---
title: "Report one missing public record"
method: POST
path: "/api/v1/data-reports"
tags: ["Data reports"]
---

# Report one missing public record

`POST /api/v1/data-reports`

## Request

- Base URL: `https://aicdapi.com`
- URL: `https://aicdapi.com/api/v1/data-reports`
- Auth: HTTP bearer

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.

## Headers

- `Idempotency-Key` string, required

## Request body

- DataReportInput: Send one public source URL and a short description. Input is also checked for unsafe hosts, URL credentials, secret-like query parameters, and supported route/tool values. Source text is evidence, not instructions.
  - `sourceUrl` string, required
  - `expectedRecord` string, required
  - `jurisdictionSlug` string
  - `recordKind` 'agenda' | 'record_stream'
  - `recordDate` string, date
  - `sourceRecordId` string
  - `queryContext` object
    - `searchTerms` string
    - `filters` object
      - `jurisdictionSlug` string
      - `bodySlug` string
      - `topicSlug` string
      - `recordKind` 'agenda' | 'record_stream'
      - `dateFrom` string, date
      - `dateTo` string, date
      - `sourceSystem` string
      - `sourceRecordId` string
    - `surface` union, required
      - object
        - `kind` 'rest', required
        - `route` '/api/v1/agenda/search' | '/api/v1/agenda/search-facets' | '/api/v1/agenda/items/{itemId}' | '/api/v1/data/changes' | '/api/v1/data/snapshots' | '/api/v1/data/snapshots/{snapshotId}/{resource}' | '/api/v1/data/batch' | '/api/v1/public/agenda-hits' | '/api/v1/public/agenda-hits/{matchId}' | '/api/v1/public/upcoming-agenda-hits' | '/api/v1/public/coverage' | '/api/v1/public/source-status', required
      - object
        - `kind` 'mcp', required
        - `tool` 'search_agenda' | 'get_agenda_item' | 'get_coverage' | 'get_data_coverage' | 'get_source_status' | 'get_upcoming_agenda_hits' | 'get_agenda_hit' | 'get_jurisdiction_meeting_cadence', required
  - `requestId` string

## Response `202`

Report durably saved, or the original submission receipt returned.

- DataReportReceiptEnvelope
  - `data` object, required
    - `reportId` string, uuid, required
    - `status` 'received', required
    - `statusUrl` string, required
    - `submittedAt` string, date-time, required
    - `nextCheckAt` string, date-time, required

## Other responses

- `400`: The report input or report ID is invalid.
- `401`: The API key is missing, invalid, expired, or revoked.
- `403`: The credential or workspace is not allowed to report.
- `409`: The Idempotency-Key was used with a different request body.
- `413`: The streamed request body exceeds 8 KiB.
- `429`: 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`: A required access, limit, policy, or queue control is unavailable.

---

[API](https://skmtc.dev/aicdapi/apis/aicd-api.md) · [All operations](https://skmtc.dev/aicdapi/apis/aicd-api/llms.txt) · [OpenAPI document](https://skmtc.dev/aicdapi/apis/aicd-api/revisions/0f3752fae465?raw)
