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

List camps

Published, active camps, with their sessions. from/to select camps whose overall span (starts_on..ends_on) or any session overlaps the window; undated camps always match. As for classes, to has no default: from alone (default today) is open-ended. 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 starts_on nulls last, then name.

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/camps"
Example response · 200
{
  "data": [
    {
      "id": "7fb56a77-8603-4c31-a07f-ef9d9e7f53e3",
      "type": "camp",
      "slug": "2026-summer-circus-camp-e49f4a3a",
      "name": "2026 Summer Circus Camp",
      "description": "The Philadelphia School of Circus Arts – Best of Philly Winner for “Kids Classes” – announces Summer Circus Camp 2026 for youth ages 4 – 15. Circus Camp returns with our 1-week camp program designed for campers with an emphasis on play and exploration in the exciting world of circus. Campers will learn static trapeze, aerial sling, aerial fabric, wire walking, juggling, plate-spinning, rolling globe, tumbling, unicycling, clowning and more. We can’t wait to share the excitement and challenge of the circus with kids in our full-day program!",
      "season": "summer",
      "year": 2026,
      "starts_on": "2026-06-01",
      "ends_on": "2026-06-05",
      "schedule": {
        "type": null,
        "is_full_day": true,
        "is_half_day_am": false,
        "is_half_day_pm": false,
        "day_start_time": "09:00:00",
        "day_end_time": "15:00:00",
        "extended_care": {
          "morning_start": null,
          "morning_price": null,
          "afternoon_end": null,
          "afternoon_price": null,
          "notes": "Before Care: $20/day; After Care: $35/day",
          "currency": "USD"
        },
        "timezone": "America/New_York"
      },
      "is_overnight": false,
      "is_travel": false,
      "is_specialty": false,
      "pricing_unit": "per_week",
      "price": {
        "type": "fixed",
        "min": 495,
        "max": 495,
        "scope": "admission",
        "note": "$495/week",
        "unit": "per_session",
        "is_free": false,
        "currency": "USD"
      },
      "ages": {
        "min": 4,
        "max": 15,
        "text": null,
        "audience": null,
        "bands": [
          "young_kids",
          "bigger_kids"
        ]
      },
      "audience": "teens",
      "traits": {
        "seasons": [
          "summer"
        ]
      },
      "place": {
        "id": "1730e947-3dd8-45ad-88f5-2fe7cdeec9e8",
        "slug": "philadelphia-school-of-circus-arts-62377244",
        "name": "Philadelphia School of Circus Arts"
      },
      "location": {
        "address": "6452 Greene Street",
        "street_address": "6452 Greene Street",
        "city": "Philadelphia",
        "state": "PA",
        "zip": "19119",
        "lat": 40.0419162,
        "lng": -75.1896032,
        "neighborhood": "Northwest Philadelphia",
        "neighborhood_slug": null
      },
      "categories": [
        "sports_active_play"
      ],
      "registration": {
        "url": "https://portal.iclasspro.com/phillycircus/booking",
        "opens_on": null,
        "deadline_on": null,
        "early_bird_deadline_on": null,
        "has_spots_available": true,
        "sessions_with_spots": 1
      },
      "sessions": [
        {
          "id": "4fbe88ce-c939-450e-92a0-e92c3f04ed6c",
          "name": "Summer Circus Camp 2026",
          "starts_on": "2026-06-01",
          "ends_on": "2026-06-05",
          "price": 495,
          "early_bird_price": null,
          "full_day_price": null,
          "half_day_price": null,
          "currency": "USD",
          "capacity": null,
          "spots_remaining": null,
          "status": "open",
          "theme": null,
          "notes": null
        }
      ],
      "image_url": "https://phillycircus.com/wp-content/uploads/PSCA-web-promo-01.jpg",
      "organization": {
        "id": "c6e39d31-abce-43f8-bccd-2cf5ce73a0ad",
        "name": "Philadelphia School of Circus Arts",
        "slug": "philadelphia-school-of-circus-arts"
      },
      "confidence": 0.55,
      "verified_at": null,
      "metro": "philadelphia",
      "status": "published",
      "created_at": "2026-09-22T06:11:27.636Z",
      "updated_at": "2026-09-26T08:19:23.038Z",
      "links": {
        "self": "/v1/camps/7fb56a77-8603-4c31-a07f-ef9d9e7f53e3",
        "place": "/v1/places/1730e947-3dd8-45ad-88f5-2fe7cdeec9e8",
        "organization": "/v1/organizations/c6e39d31-abce-43f8-bccd-2cf5ce73a0ad"
      }
    }
  ],
  "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 (31)

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.

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.

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.

The camp's year.

Keep only overnight camps.

Sync mode.

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

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