Skip to content
GET/v1/{metro}/classesall plans

List classes

Published, active classes. from/to select terms that overlap the window (term.starts_on <= to AND (term.ends_on IS NULL OR term.ends_on >= from)); ongoing programs (schedule.type = 'ongoing') and terms with no dates always match. Unlike events, to has no default here: with from alone (default today) the window is open-ended, so next season's terms are listed. Rows below min_confidence (default 0.7) and adults audiences are left out unless asked for; meta.applied_filters and meta.defaults_applied echo what was applied. facets= adds counts over the whole filtered set. Ordered by term.starts_on nulls last, then name.

Show more

Sections. A program with sections is matched by one section at a time: the weekday (schedule_day, weekday), age, start_after/start_before, the dates and season, free/max_price and openings=true must all be satisfied by the same section. A Saturday section for ages 3-5 and a Sunday section for ages 9-12 do not match schedule_day=saturday&age=10. A program with no sections is judged on its own fields. Filters decide which programs are returned; they never trim a program's sections.

Grouping. When a provider publishes one program as several listings, the list shows a single card for it, with the other listings under sessions. Cards are formed before paging, so a page never splits one and limit counts cards. expand=sessions returns every class on its own.

Try this requestRun it with sample data, no key needed. Paste a key to run it live.
Example request
curl -sS \
  -H "X-API-Key: $TAILEND_API_KEY" \
  "https://api.tailend.dev/v1/philadelphia/classes"
Example response · 200
{
  "data": [
    {
      "id": "c57d9bae-6479-41c5-9176-f314fa4d31f4",
      "type": "class",
      "slug": "kids-pottery-classes-b3d835f7",
      "name": "Kids Pottery Classes",
      "description": "6-week pottery classes for kids ages 8-16, focusing on wheel-throwing and hand-building techniques.",
      "program": {
        "enrollment_type": "enrollment",
        "skill_level_notes": "all levels",
        "adult_participation": null,
        "what_youll_learn": null,
        "prerequisites": null
      },
      "term": {
        "name": null,
        "starts_on": "2026-09-29",
        "ends_on": "2026-12-15",
        "total_classes": null
      },
      "schedule": {
        "type": "session",
        "days": [
          "tuesday"
        ],
        "start_time": "16:00:00",
        "end_time": "18:00:00",
        "duration_minutes": 120,
        "is_recurring": true,
        "rrule": "FREQ=WEEKLY;BYDAY=TU",
        "notes": "Tuesdays (4:00 pm – 6:00 pm)",
        "timezone": "America/New_York"
      },
      "tuition": {
        "amount": 185,
        "from": 185,
        "text": "$185 for 6-week session",
        "drop_in_price": null,
        "trial_price": null,
        "trial_notes": null,
        "currency": "USD"
      },
      "price": {
        "type": "fixed",
        "min": 185,
        "max": 185,
        "scope": "admission",
        "note": "$185 for 6-week session",
        "unit": "per_session",
        "is_free": false,
        "currency": "USD"
      },
      "ages": {
        "min": 8,
        "max": 16,
        "text": "Early Elementary, Tweens, Teens",
        "audience": "kids",
        "bands": [
          "bigger_kids"
        ]
      },
      "audience": "teens",
      "traits": {
        "seasons": [
          "fall",
          "winter"
        ]
      },
      "place": {
        "id": "1af0824d-36cf-482d-a6d7-073343ae52ed",
        "slug": "earth-center-pottery-ebc6fdd7",
        "name": "Earth Center Pottery"
      },
      "location": {
        "address": "10 Stable Mill Trl, Richboro, PA 18954, USA",
        "street_address": "10 Stable Mill Trl, Richboro, PA 18954, USA",
        "city": "Richboro",
        "state": "PA",
        "zip": "18954",
        "lat": 40.2226282,
        "lng": -74.9866812,
        "neighborhood": "Somerton",
        "neighborhood_slug": "somerton"
      },
      "categories": [
        "arts_creative"
      ],
      "occasions": [],
      "registration": {
        "url": "https://www.cognitoforms.com/TylerParkCenterForTheArts/KidsPotteryClasses",
        "status": "open",
        "opens_at": null,
        "spots_remaining": null,
        "has_spots_available": true,
        "waitlist_available": false,
        "sections_with_spots": 1
      },
      "sections_total": 1,
      "sections": [
        {
          "id": "0b8a3f5e-52c4-4d64-9a0e-2f6d7c1e9a11",
          "name": "Tuesday afternoon",
          "schedule": {
            "days": [
              "tuesday"
            ],
            "start_time": "16:00:00",
            "end_time": "18:00:00",
            "duration_minutes": 120,
            "rrule": "FREQ=WEEKLY;BYDAY=TU",
            "notes": "Tuesdays (4:00 pm – 6:00 pm)",
            "timezone": "America/New_York"
          },
          "term": {
            "name": null,
            "starts_on": "2026-09-29",
            "ends_on": "2026-12-15",
            "total_classes": null
          },
          "ages": {
            "min": 8,
            "max": 16,
            "text": null
          },
          "tuition": {
            "amount": 185,
            "text": "$185 for 6-week session",
            "drop_in_price": null,
            "currency": "USD"
          },
          "registration": {
            "url": "https://www.cognitoforms.com/TylerParkCenterForTheArts/KidsPotteryClasses",
            "status": "open",
            "spots_remaining": null,
            "has_spots_available": true,
            "waitlist_available": false
          },
          "updated_at": "2026-09-26T12:01:08.782Z"
        }
      ],
      "sessions": [],
      "image_url": "https://earthcenterpottery.com/wp-content/uploads/2024/02/IMG_0318-scaled-e1707359564209-1024x566.jpg",
      "organization": {
        "id": "37bae48b-e86c-44a4-80d7-29fd9c34443c",
        "name": "Earth Center Pottery",
        "slug": "earthcenterpotterycom-f09a2fcc"
      },
      "confidence": 0.45,
      "verified_at": "2026-09-26T12:00:21.748Z",
      "metro": "philadelphia",
      "status": "published",
      "created_at": "2026-07-17T16:01:41.805Z",
      "updated_at": "2026-09-26T12:01:08.782Z",
      "links": {
        "self": "/v1/classes/c57d9bae-6479-41c5-9176-f314fa4d31f4",
        "place": "/v1/places/1af0824d-36cf-482d-a6d7-073343ae52ed",
        "organization": "/v1/organizations/37bae48b-e86c-44a4-80d7-29fd9c34443c"
      }
    }
  ],
  "meta": {
    "limit": 1,
    "count": 1,
    "has_more": false,
    "applied_filters": {
      "from": "2026-09-14",
      "to": null,
      "min_confidence": 0.7,
      "audience": [
        "not_adults"
      ]
    },
    "defaults_applied": [
      "from",
      "min_confidence",
      "audience"
    ]
  }
}

Try any request with sample data, no key needed. Available on every plan.

Metro slug from /v1/metros (e.g. philadelphia).

Optional parameters (41)

Fetch specific listings of this resource type in one call: up to 100 comma-separated listing UUIDs (ids=<id>,<id>).

Local calendar date (metro timezone), inclusive.

Local calendar date (metro timezone), inclusive; at most 366 days after from.

Classes only.

Classes only.

Drop rows whose confidence is below this.

Keep rows whose categories contain any of these.

Keep rows whose audience is one of these.

Events, classes and camps only.

Events and classes tagged for a seasonal occasion.

A child's age in years.

Neighborhood slug or free-text name (case-insensitive).

Center latitude for a radius search.

Center longitude for a radius search.

Radius in metres around lat/lng (or near_zip, where enabled).

Beta — may not be enabled for all keys yet.

Beta — may not be enabled for all keys yet.

Beta — may not be enabled for all keys yet.

Keep rows held at this place (place.id).

Events, classes, and camps only; ignored for places.

Classes only.

Filter on is_indoor, a fact about the linked place.

Filter on is_outdoor, a fact about the linked place.

Filter on is_sensory_friendly (on events and classes, the linked place's; on places, the place's own).

Keep classes that meet on this weekday.

Keep rows matching this enrollment type.

Sync mode.

Full-text search over the listing's name and search text (websearch syntax: storytime park, "drop in", art -camp).

Keep rows on any of these local days.

Local start time at or after this, HH:MM (or HH:MM:SS).

Local start time strictly before this, HH:MM; 09:00–12:00 is the morning and 12:00 belongs to the afternoon.

A budget.

Keep rows published by this organization (organization.id).

Keep only these dotted paths on each item (name,place.name,price.is_free); id and type are always kept so a trimmed item stays addressable.

Attach the full Place and/or the Organization behind each item under expanded, one extra read per expansion per page (not per row).

Opt into a block the lean default response leaves out.

How an include= the key is not entitled to is handled.

Opaque cursor from meta.next_cursor.

1-based page number (browse mode).

Counts over every listing that matches the filters, not just this page, returned as a top-level facets object beside data and meta.

Items per page, 1 to 200.

Ctrl Enter to send