generated: '2026-09-06' method: probed source: >- live probes of https://www.eac.gov/jsonapi on 2026-09-06; the JSON:API 1.0 specification (https://jsonapi.org/format/1.0/) that the surface declares in every response; and openapi/election-assistance-commission-jsonapi-openapi.yml provider: Election Assistance Commission providerId: election-assistance-commission summary: >- Cross-cutting runtime semantics of the EAC JSON:API. Almost nothing here is an EAC decision — the surface is Drupal core's JSON:API module, so its conventions are the JSON:API 1.0 specification's conventions, which is the good news: an agent that already speaks JSON:API needs no EAC-specific connector. The EAC publishes none of this itself. auth: style: none detail: Anonymous read. See authentication/election-assistance-commission-authentication.yml. media_type: request: application/vnd.api+json response: application/vnd.api+json observed: true note: Every 200 and every JSON error observed on 2026-09-06 carried content-type application/vnd.api+json. idempotency: coverage: none applicable: false reason: >- There is no mutating surface to protect. Drupal's JSON:API is configured read-only on this site; an anonymous POST returned HTTP 405 "JSON:API is configured to accept only read operations." GET is idempotent by HTTP semantics. No Idempotency-Key header is documented, offered or needed. evidence: - url: https://www.eac.gov/jsonapi/node/article method: POST status: 405 reversibility: grade: na applicable: false reason: >- Read-only API. There is no write, no create, no update and no delete, therefore no action an agent takes against this surface can need taking back. Recorded as `na` rather than absent so it leaves the denominator instead of scoring a zero the EAC could not have avoided. write_surfaces: [] evidence: - url: https://www.eac.gov/jsonapi/node/article method: POST status: 405 detail: JSON:API is configured to accept only read operations. dry_run_mode: supported: na reason: Read-only API; every call is already side-effect free. pagination: style: offset spec: JSON:API 1.0 page[] family, Drupal implementation params: limit: page[limit] offset: page[offset] max_page_size: 50 max_page_size_note: >- Drupal JSON:API caps page[limit] at 50 and silently clamps larger values. Verified by walking node--clearinghouse_awards to 561 records in 50-record pages on 2026-09-06. response_fields: - links.self - links.next - links.prev cursor: false total_count: false total_count_note: >- No total count is returned. `meta.count` is absent from every collection document observed. A caller who needs a total must walk links.next to exhaustion — which is how every count recorded in this repository was obtained. guidance: Follow links.next rather than computing page[offset] yourself. filtering: supported: true shorthand: filter[]= long_form: filter[