# Get a public body's meeting cadence

`GET /api/v1/public/jurisdictions/{slug}/bodies/{bodySlug}/cadence` - [human page](https://aicdapi.com/api-reference#getPublicBodyCadence)

**Release status.** Available

Returns when a covered public body last met and when it is next scheduled to meet, based on active source endpoints only, together with the jurisdiction timezone. A cancelled meeting counts as neither. The supported inputs are the published DFW coverage pairs: `dallas/city-council`, `dallas-county/commissioners-court`, `ellis-county/commissioners-court`, `fort-worth/city-council`, `kaufman-county/commissioners-court`, `parker-county/commissioners-court`, `wise-county/commissioners-court`. Any other pair answers 404. A supported pair is accepted input: it does not guarantee that ingestion is live for that body or that a meeting date is known. If the cadence query fails, every date is returned as null with HTTP 200.

**Authentication.** No credentials. This endpoint is public.

### Parameters

| Field | Type | Required | Bounds | Description |
| --- | --- | --- | --- | --- |
| `path slug` | string | yes | length 1..∞ | Covered jurisdiction slug. |
| `path bodySlug` | string | yes | length 1..∞ | Covered public-body slug within the jurisdiction. |

### Example request

```bash
curl -X GET 'https://aicdapi.com/api/v1/public/jurisdictions/dallas/bodies/city-council/cadence'
```

### Response 200

Most recently observed and next scheduled meetings.

| Field | Type | Required | Bounds | Description |
| --- | --- | --- | --- | --- |
| `data` | object (JurisdictionMeetingCadence) | yes |  |  |
| `data.lastMetAt` | string \| null | yes |  |  |
| `data.nextScheduledAt` | string \| null | yes |  |  |
| `data.timezone` | string \| null | yes |  | IANA time-zone identifier when known. |
| `meta` | object (ResponseMeta) | no |  |  |
| `meta.pagination` | object (PaginationMeta) | no |  |  |

### Errors

| Status | `error.code` | Description |
| --- | --- | --- |
| **404** | `not_found` | The requested record was not found. |
| **429** | `rate_limited` | More than 120 requests were made by this client IP in 60 seconds. |
| **500** | `internal_error` | The request could not be completed because of an internal error. |

### Behaviour

- **Pagination.** None.
- **Limits.** 120 requests per 60 seconds per client IP, counted separately for each public endpoint and keyed on the first X-Forwarded-For entry. The allowance is not shared between public endpoints: exhausting one leaves the others available. If the limiter's own store fails, the request is allowed through rather than refused.
- **Retry-After.** Sent on 429 only, as whole seconds.
