# List public source statuses

`GET /api/v1/public/source-status` - [human page](https://aicdapi.com/api-reference#listPublicSourceStatuses)

**Release status.** Available

Returns ingestion-health evidence for covered public bodies. Normalized
`jurisdictionSlug` and `bodySlug` parameters take precedence over the
legacy `jurisdiction` and `body` aliases.


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

### Parameters

| Field | Type | Required | Bounds | Description |
| --- | --- | --- | --- | --- |
| `query jurisdictionSlug` | string | no | length 1..∞ | Normalized jurisdiction slug. Takes precedence over `jurisdiction`. |
| `query jurisdiction` | string | no | length 1..∞ | Legacy alias for `jurisdictionSlug`. |
| `query bodySlug` | string | no | length 1..∞ | Normalized public-body slug. Takes precedence over `body`. |
| `query body` | string | no | length 1..∞ | Legacy alias for `bodySlug`. |

### Example request

```bash
curl -X GET 'https://aicdapi.com/api/v1/public/source-status'
```

### Response 200

Public source statuses.

| Field | Type | Required | Bounds | Description |
| --- | --- | --- | --- | --- |
| `data` | object[] | yes |  |  |
| `data.jurisdictionName` | string | yes |  |  |
| `data.publicBodyName` | string | yes |  |  |
| `data.sourceTypeLabel` | string | yes |  |  |
| `data.status` | one of `healthy` \| `stale` \| `failing` \| `unsupported` \| `unknown` | yes |  |  |
| `data.agendaTextEvidence` | one of `readable` \| `no_text_layer` \| `null` | yes |  |  |
| `data.lastSuccessfulCheckAt` | string \| null | yes |  |  |
| `data.officialSourceUrl` | string (uri) | no |  |  |
| `meta` | object (ResponseMeta) | no |  |  |
| `meta.pagination` | object (PaginationMeta) | no |  |  |

### Errors

| Status | `error.code` | Description |
| --- | --- | --- |
| **400** | `invalid_parameter` | A path or query parameter is invalid or unsupported. |
| **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. The covered set is fixed.
- **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.
