# Retrieve a camp

> A camp by id.

Source: https://api.tailend.dev/docs/api/get-camp

```http
GET https://api.tailend.dev/v1/camps/{id}
X-API-Key: $TAILEND_API_KEY
```

A camp by id. Published and active by default; archived rows answer
`404` unless `include_archived=true`, and drafts never appear. The
response carries `status`.

Authorization: send your key in the `X-API-Key` header. Available on every plan.

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string (uuid) | yes | Listing id. |

## Query parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `include_archived` | boolean | no | Also serve a listing whose status is archived — a permalink that should still render, with a "this has passed" banner, rather than 404. |
| `fields` | array of string | no | 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. |
| `expand` | array of string | no | Attach the full Place and/or the Organization behind each item under expanded, one extra read per expansion per page (not per row). |
| `include` | array of string | no | Opt into a block the lean default response leaves out. |
| `include_mode` | string | no | How an include= the key is not entitled to is handled. |

## Example request

```bash
curl -sS \
  -H "X-API-Key: $TAILEND_API_KEY" \
  "https://api.tailend.dev/v1/camps/7fb56a77-8603-4c31-a07f-ef9d9e7f53e3"
```

## Responses

### 200

The camp

```json
{
  "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"
    }
  }
}
```

### 400

Malformed or contradictory parameters (lat without lng, to before from, unknown category), or a cursor this API did not issue for this exact request — replayed from another endpoint, resource, metro or filter set, hand-crafted, or altered.

```json
{
  "error": {
    "code": "bad_request",
    "message": "radius_m: must be at least 100",
    "details": {
      "param": "radius_m"
    },
    "request_id": "req_dfbc3295a8382b05"
  }
}
```

### 401

Missing, unknown or revoked X-API-Key.

```json
{
  "error": {
    "code": "unauthorized",
    "message": "missing X-API-Key header",
    "request_id": "req_90e63908273f6bff"
  }
}
```

### 403

Two different reasons share this status.

```json
{
  "error": {
    "code": "forbidden",
    "message": "key is not scoped to metro 'boston'",
    "details": {
      "metros": [
        "philadelphia"
      ]
    },
    "request_id": "req_9e7a750acef48ab2"
  }
}
```

### 404

No published, active resource with that id (or unknown metro).

```json
{
  "error": {
    "code": "not_found",
    "message": "unknown metro 'boston'",
    "request_id": "req_7431b51e10ec2b77"
  }
}
```

### 405

The path exists; the method does not.

```json
{
  "error": {
    "code": "method_not_allowed",
    "message": "POST is not allowed on this path; this API is read-only",
    "details": {
      "allow": [
        "GET",
        "HEAD",
        "OPTIONS"
      ]
    },
    "request_id": "req_01J9Z3"
  }
}
```

### 429

A limit was reached.

```json
{
  "error": {
    "code": "rate_limited",
    "message": "3 requests per minute exceeded",
    "request_id": "req_06bfd3c2d5e8aa9f"
  }
}
```

### 500

A bug on our side.

```json
{
  "error": {
    "code": "internal",
    "message": "internal error",
    "request_id": "req_01J9Z3"
  }
}
```

### 501

This endpoint or feature is not available and will not become available without a configuration change — for ?address=, this means no geocoder is configured.

```json
{
  "error": {
    "code": "not_implemented",
    "message": "this endpoint is not enabled on this deployment; it is not a fault and retrying will not help",
    "request_id": "req_01J9Z3"
  }
}
```

### 503

A transient outage: a dependency could not be reached or did not answer in time.

```json
{
  "error": {
    "code": "unavailable",
    "message": "the service is temporarily unable to serve this request; retry after the interval in Retry-After",
    "request_id": "req_01J9Z3"
  }
}
```
