# List organization places

> Same as GET /v1/{metro}/places?organization_id={id}, addressed by the organization instead of the metro.

Source: https://api.tailend.dev/docs/api/list-organization-places

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

Same as `GET /v1/{metro}/places?organization_id={id}`, addressed by the organization instead of the metro.

Resolves the organization by id, `404`s if it does not exist, and takes the metro from that row. An organization with live listings in more than one metro is a `400` asking for `metro=` to disambiguate, exactly like a slug that is not unique across the key's metros; give it and the ambiguity is resolved the same way. Every other list parameter keeps working. Same auth, metro scope, rate limiting and metering as the list endpoint; a key without access to the organization's metro gets the same `403` the list endpoint gives.

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 |
| --- | --- | --- | --- |
| `metro` | string | no | Which metro's row is meant, when a slug is not unique across the key's metros. |
| `min_confidence` | number | no | Drop rows whose confidence is below this. |
| `category` | array of string | no | Keep rows whose categories contain any of these. |
| `audience` | array of string | no | Keep rows whose audience is one of these. |
| `age` | integer | no | A child's age in years. |
| `neighborhood` | string | no | Neighborhood slug or free-text name (case-insensitive). |
| `lat` | number | no | Center latitude for a radius search. |
| `lng` | number | no | Center longitude for a radius search. |
| `radius_m` | integer | no | Radius in metres around lat/lng (or near_zip, where enabled). |
| `zip` | array of string | no | Beta — may not be enabled for all keys yet. |
| `near_zip` | string | no | Beta — may not be enabled for all keys yet. |
| `include_approximate` | boolean | no | Beta — may not be enabled for all keys yet. |
| `type_hint` | string | no | Filters on the place's type (see Place.type_hint). |
| `place_type` | string | no | The deprecated spelling of type_hint. |
| `has_birthday_parties` | boolean | no |  |
| `has_classes` | boolean | no |  |
| `sensory` | boolean | no | Filter on is_sensory_friendly (on events and classes, the linked place's; on places, the place's own). |
| `changed_since` | string (date-time) | no | Sync mode. |
| `q` | string | no | Full-text search over the listing's name and search text (websearch syntax: storytime park, "drop in", art -camp). |
| `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. |
| `cursor` | string | no | Opaque cursor from meta.next_cursor. |
| `page` | integer | no | 1-based page number (browse mode). |
| `facets` | array of string | no | Counts over every listing that matches the filters, not just this page, returned as a top-level facets object beside data and meta. |
| `limit` | integer | no | Items per page, 1 to 200. |

## Example request

```bash
curl -sS \
  -H "X-API-Key: $TAILEND_API_KEY" \
  "https://api.tailend.dev/v1/organizations/1aed87ca-ab4f-4fc0-baaa-8c6ebeefa10e/places"
```

## Responses

### 200

A page of places.

```json
{
  "data": [
    {
      "id": "1aed87ca-ab4f-4fc0-baaa-8c6ebeefa10e",
      "type": "place",
      "slug": "philly-art-center-queen-village",
      "name": "Philly Art Center - Queen Village",
      "description": "Philly Art Center's Queen Village studio offers classes, camps, and after-school programs for kids from infancy through tweens, plus adult classes in drawing, painting, printmaking, fibers, and clay. Programs include Creative Playgroup + Story Time (drop-in for 0-30 months), adult+child music and art classes, drop-off kids art classes (ages 2+), tween classes, summer camps (ages 4-13), vacation camps (ages 5-12), and after-school art with free school pick-up. Process over product philosophy — all materials included.",
      "type_hint": "other",
      "type_hint_notes": "Art studio / creative learning center",
      "location": {
        "address": "514 Bainbridge St, Philadelphia, PA 19147, USA",
        "street_address": "514 Bainbridge St, Philadelphia, PA 19147, USA",
        "city": "Philadelphia",
        "state": "PA",
        "zip": "19147",
        "lat": 39.9408481,
        "lng": -75.1516337,
        "neighborhood": "Queen Village",
        "neighborhood_slug": "queen-village"
      },
      "hours": {
        "monday": "Closed",
        "tuesday": "Class hours vary",
        "wednesday": "Class hours vary",
        "thursday": "Class hours vary",
        "friday": "Class hours vary",
        "saturday": "Class hours vary",
        "sunday": "Closed",
        "notes": "Hours vary by class schedule. Check phillyartcenter.captyn.com for current session times.",
        "exceptions": null
      },
      "admission": {
        "type": "paid",
        "child_price": null,
        "adult_price": null,
        "infant_age_cutoff": null,
        "notes": "Varies by program. Tuition assistance available. 10% household discount.",
        "currency": "USD"
      },
      "membership": {
        "available": false,
        "price_monthly": null,
        "price_annual": null,
        "notes": null,
        "currency": "USD"
      },
      "birthday_parties": {
        "available": false,
        "min_guests": null,
        "max_guests": null,
        "age_range": null,
        "booking_url": null,
        "notes": null
      },
      "classes": {
        "available": true,
        "types": [
          "art",
          "music",
          "playgroup",
          "after school art"
        ],
        "age_range": "0-12 years",
        "schedule_notes": "Fall Registration is LIVE!",
        "registration_url": "https://phillyartcenter.com/kids-classes/"
      },
      "amenities": {
        "has_outdoor_space": false,
        "has_parking": false,
        "parking_notes": "Street parking on Bainbridge St and surrounding blocks.",
        "has_wifi": false,
        "socks_required": false,
        "outside_food_allowed": true,
        "stroller_policy": null
      },
      "ages": {
        "min": 0,
        "max": 17,
        "text": "Playgroup: 0-30 months. Adult+child classes: 3-36 months. Kids classes: ages 2+. Tween classes available. Summer camps: 4-13. Vacation camps: 5-12.",
        "audience": null,
        "bands": [
          "baby",
          "toddler",
          "young_kids",
          "bigger_kids"
        ]
      },
      "audience": "teens",
      "categories": [
        "arts_creative"
      ],
      "image_url": "https://a.mpcdn.io/pac/2023/04/pac-social-share.jpg?auto=compress%2Cformat&ixlib=php-3.3.1",
      "images": [
        "https://mpcdn.imgix.net/pac/26/04/web-banner_fnl-copy-2.png?auto=compress%2Cformat&ixlib=php-3.3.1",
        "https://mpcdn.imgix.net/pac/26/07/fall-classes_final-1.png?auto=compress%2Cformat&ixlib=php-3.3.1",
        "https://a.mpcdn.io/pac/2023/03/testimonial-bg.jpg?auto=compress%2Cformat&ixlib=php-3.3.1"
      ],
      "website_url": "https://phillyartcenter.com/",
      "organization": {
        "id": null,
        "name": null,
        "slug": null
      },
      "confidence": 0.7,
      "verified_at": null,
      "metro": "philadelphia",
      "status": "published",
      "created_at": "2026-02-18T19:16:17.504Z",
      "updated_at": "2026-09-21T18:07:17.391Z",
      "links": {
        "self": "/v1/places/1aed87ca-ab4f-4fc0-baaa-8c6ebeefa10e",
        "events": "/v1/places/1aed87ca-ab4f-4fc0-baaa-8c6ebeefa10e/events",
        "classes": "/v1/places/1aed87ca-ab4f-4fc0-baaa-8c6ebeefa10e/classes",
        "camps": "/v1/places/1aed87ca-ab4f-4fc0-baaa-8c6ebeefa10e/camps"
      }
    }
  ],
  "meta": {
    "limit": 1,
    "count": 1,
    "has_more": false,
    "applied_filters": {
      "min_confidence": 0.5,
      "audience": [
        "not_adults"
      ]
    },
    "defaults_applied": [
      "min_confidence",
      "audience"
    ]
  }
}
```

### 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"
  }
}
```
