# Report one missing public record

`POST /api/v1/data-reports` - [human page](https://aicdapi.com/api-reference#submitDataReport)

**Release status.** Limited availability

Limited release. Any active API key can submit a report; no scope and no report permission are required, and the account needs current paid access: a confirmed current paid subscription period, or a confirmed API payment within the last 30 days on the pay-as-you-go path. A report takes no extra payment and does not consume paid data-call usage. Saves a report and validation job together; intake does not fetch the source or call a model. A 202 response confirms receipt, not a verified gap or promised fix. Reuse the same Idempotency-Key and body after a lost response. Report limits apply across keys, REST, and MCP.

**Authentication.** Customer API key: `Authorization: Bearer aicd_...`. A browser session does not authenticate this endpoint. It requires no scope; the account's own access rules still apply.

### Parameters

| Field | Type | Required | Bounds | Description |
| --- | --- | --- | --- | --- |
| `header Idempotency-Key` | string | yes | length 1..128, pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ | A caller-chosen retry token. Reuse only for the same request body. |

### Request body



| Field | Type | Required | Bounds | Description |
| --- | --- | --- | --- | --- |
| `sourceUrl` | string | yes | length 1..2048 |  |
| `expectedRecord` | string | yes | length 1..1000 |  |
| `jurisdictionSlug` | string | no | length 1..100, pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |  |
| `recordKind` | one of `agenda` \| `record_stream` | no |  |  |
| `recordDate` | string (date) | no | pattern ^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))$ |  |
| `sourceRecordId` | string | no | length 1..200, pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]*$ |  |
| `queryContext` | object | no |  |  |
| `queryContext.searchTerms` | string | no | length 1..200 |  |
| `queryContext.filters` | object | no |  |  |
| `queryContext.surface` | any | yes |  |  |
| `requestId` | string | no | length 1..128, pattern ^[A-Za-z0-9][A-Za-z0-9._:-]*$ |  |

Example request body:

```json
{
  "sourceUrl": "https://example.gov/meetings/2026-09-01-council-agenda",
  "expectedRecord": "The September 1, 2026 council agenda packet for the regular session."
}
```

### Example request

```bash
curl -X POST 'https://aicdapi.com/api/v1/data-reports' \
  -H "Authorization: Bearer $AICD_API_KEY" \
  -H 'Idempotency-Key: example-retry-token' \
  -H 'Content-Type: application/json' \
  --data '{"sourceUrl":"https://example.gov/meetings/2026-09-01-council-agenda","expectedRecord":"The September 1, 2026 council agenda packet for the regular session."}'
```

### Response 202

Report durably saved, or the original submission receipt returned.

| Field | Type | Required | Bounds | Description |
| --- | --- | --- | --- | --- |
| `data` | object | yes |  |  |
| `data.reportId` | string (uuid) | yes | pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}\|00000000-0000-0000-0000-000000000000\|ffffffff-ffff-ffff-ffff-ffffffffffff)$ |  |
| `data.status` | string | yes |  |  |
| `data.statusUrl` | string | yes | length 1..2048 |  |
| `data.submittedAt` | string (date-time) | yes | pattern ^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))T(?:(?:[01]\\d\|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z\|([+-](?:[01]\\d\|2[0-3]):[0-5]\\d)))$ |  |
| `data.nextCheckAt` | string (date-time) | yes | pattern ^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))T(?:(?:[01]\\d\|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z\|([+-](?:[01]\\d\|2[0-3]):[0-5]\\d)))$ |  |

### Errors

| Status | `error.code` | Description |
| --- | --- | --- |
| **400** | `invalid_input` | The report input or report ID is invalid. |
| **401** | `unauthorized` | The API key is missing, invalid, expired, or revoked. |
| **403** | `forbidden` | The credential or workspace is not allowed to report. |
| **409** | `replay_conflict` | The Idempotency-Key was used with a different request body. |
| **413** | `invalid_input` | The streamed request body exceeds 8 KiB. |
| **429** | `rate_limited`, `report_limit_reached`, `submit_rate_limited` | A report limit was reached, or the account-wide abuse ceiling was reached. The abuse ceiling is account-wide and is not charged against the paid quota. Retry after the stated delay. |
| **503** | `authentication_unavailable` | A required access, limit, policy, or queue control is unavailable. |

### Behaviour

- **Retry-After.** Sent on 429 only, as whole seconds.
- **Caching.** Customer report responses must not be cached.
