EAC Content JSON:API

A live, anonymous, read-only JSON:API 1.0 surface served by the EAC's own Drupal 10 web platform at https://www.eac.gov/jsonapi. The EAC does not document, advertise or link to it from any developer page, and it has no developer portal — but the surface is real: probed 2026-09-06, the resource index returned HTTP 200 with 216 entity--bundle link relations, 210 of which answered with application/vnd.api+json and 86 of which returned substantive records. It carries the machine form of the EAC's regulatory estate — 117 voting systems in the Testing and Certification Program, 8 accredited Voting System Test Laboratories, 20 registered manufacturers, 5 VVSG testing standards, 275 Engineering Change Orders, 27 Notices of Clarification, 155 NVRA state pages, 113 state election information records, 56 per-state registration and voting records, HAVA Election Security and state grant financials, and 561 Clearinghouse Award entries. It is read-only by site configuration: every write verb returns HTTP 405 "JSON:API is configured to accept only read operations". No key, no account, no OAuth. The OpenAPI description in this repository was DERIVED BY API EVANGELIST from those live probes; the EAC publishes none.

Operations 173

GET / JSON:API resource-type index #
GET /block/block List block--block resources #
GET /block/block/{id} Get one block--block resource by UUID #
GET /block_content/basic List block_content--basic resources #
GET /block_content/basic/{id} Get one block_content--basic resource by UUID #
GET /block_content/card List block_content--card resources #
GET /block_content/card/{id} Get one block_content--card resource by UUID #
GET /block_content/cta List block_content--cta resources #
GET /block_content/cta/{id} Get one block_content--cta resource by UUID #
GET /contact_form/contact_form List contact_form--contact_form resources #
GET /contact_form/contact_form/{id} Get one contact_form--contact_form resource by UUID #
GET /date_format/date_format List date_format--date_format resources #
GET /date_format/date_format/{id} Get one date_format--date_format resource by UUID #
GET /file/file List file--file resources #
GET /file/file/{id} Get one file--file resource by UUID #
GET /media/document List media--document resources #
GET /media/document/{id} Get one media--document resource by UUID #
GET /media/image List media--image resources #
GET /media/image/{id} Get one media--image resource by UUID #
GET /media/remote_video List media--remote_video resources #
GET /media/remote_video/{id} Get one media--remote_video resource by UUID #
GET /media_type/media_type List media_type--media_type resources #
GET /media_type/media_type/{id} Get one media_type--media_type resource by UUID #
GET /menu/menu List menu--menu resources #
GET /menu/menu/{id} Get one menu--menu resource by UUID #
GET /node/article List node--article resources #
GET /node/article/{id} Get one node--article resource by UUID #
GET /node/clearinghouse_awards List node--clearinghouse_awards resources #
GET /node/clearinghouse_awards/{id} Get one node--clearinghouse_awards resource by UUID #
GET /node/competencies_wheel List node--competencies_wheel resources #
GET /node/competencies_wheel/{id} Get one node--competencies_wheel resource by UUID #
GET /node/engineering_change_order List node--engineering_change_order resources #
GET /node/engineering_change_order/{id} Get one node--engineering_change_order resource by UUID #
GET /node/es_funds List node--es_funds resources #
GET /node/es_funds/{id} Get one node--es_funds resource by UUID #
GET /node/faqs List node--faqs resources #
GET /node/faqs/{id} Get one node--faqs resource by UUID #
GET /node/landing_page List node--landing_page resources #
GET /node/landing_page/{id} Get one node--landing_page resource by UUID #
GET /node/manufacturer List node--manufacturer resources #
GET /node/manufacturer/{id} Get one node--manufacturer resource by UUID #
GET /node/notice_of_clarification List node--notice_of_clarification resources #
GET /node/notice_of_clarification/{id} Get one node--notice_of_clarification resource by UUID #
GET /node/nvra List node--nvra resources #
GET /node/nvra/{id} Get one node--nvra resource by UUID #
GET /node/page List node--page resources #
GET /node/page/{id} Get one node--page resource by UUID #
GET /node/register_vote_and_contact_state List node--register_vote_and_contact_state resources #
GET /node/register_vote_and_contact_state/{id} Get one node--register_vote_and_contact_state resource by UUID #
GET /node/state_election_information List node--state_election_information resources #
GET /node/state_election_information/{id} Get one node--state_election_information resource by UUID #
GET /node/state_funds List node--state_funds resources #
GET /node/state_funds/{id} Get one node--state_funds resource by UUID #
GET /node/testing_standard List node--testing_standard resources #
GET /node/testing_standard/{id} Get one node--testing_standard resource by UUID #
GET /node/video List node--video resources #
GET /node/video/{id} Get one node--video resource by UUID #
GET /node/voting_system List node--voting_system resources #
GET /node/voting_system/{id} Get one node--voting_system resource by UUID #
GET /node/voting_system_test_lab List node--voting_system_test_lab resources #
GET /node/voting_system_test_lab/{id} Get one node--voting_system_test_lab resource by UUID #
GET /node_type/node_type List node_type--node_type resources #
GET /node_type/node_type/{id} Get one node_type--node_type resource by UUID #
GET /paragraph/accordion List paragraph--accordion resources #
GET /paragraph/accordion/{id} Get one paragraph--accordion resource by UUID #
GET /paragraph/accordion_item List paragraph--accordion_item resources #
GET /paragraph/accordion_item/{id} Get one paragraph--accordion_item resource by UUID #
GET /paragraph/block_embed List paragraph--block_embed resources #
GET /paragraph/block_embed/{id} Get one paragraph--block_embed resource by UUID #
GET /paragraph/body List paragraph--body resources #
GET /paragraph/body/{id} Get one paragraph--body resource by UUID #
GET /paragraph/button List paragraph--button resources #
GET /paragraph/button/{id} Get one paragraph--button resource by UUID #
GET /paragraph/card List paragraph--card resources #
GET /paragraph/card/{id} Get one paragraph--card resource by UUID #
GET /paragraph/cards List paragraph--cards resources #
GET /paragraph/cards/{id} Get one paragraph--cards resource by UUID #
GET /paragraph/column List paragraph--column resources #
GET /paragraph/column/{id} Get one paragraph--column resource by UUID #
GET /paragraph/cta List paragraph--cta resources #
GET /paragraph/cta/{id} Get one paragraph--cta resource by UUID #
GET /paragraph/hero List paragraph--hero resources #
GET /paragraph/hero/{id} Get one paragraph--hero resource by UUID #
GET /paragraph/icon_list List paragraph--icon_list resources #
GET /paragraph/icon_list/{id} Get one paragraph--icon_list resource by UUID #
GET /paragraph/icon_list_item List paragraph--icon_list_item resources #
GET /paragraph/icon_list_item/{id} Get one paragraph--icon_list_item resource by UUID #
GET /paragraph/multi_column List paragraph--multi_column resources #
GET /paragraph/multi_column/{id} Get one paragraph--multi_column resource by UUID #
GET /paragraph/statistic List paragraph--statistic resources #
GET /paragraph/statistic/{id} Get one paragraph--statistic resource by UUID #
GET /paragraph/statistics List paragraph--statistics resources #
GET /paragraph/statistics/{id} Get one paragraph--statistics resource by UUID #
GET /paragraphs_type/paragraphs_type List paragraphs_type--paragraphs_type resources #
GET /paragraphs_type/paragraphs_type/{id} Get one paragraphs_type--paragraphs_type resource by UUID #
GET /search_page/search_page List search_page--search_page resources #
GET /search_page/search_page/{id} Get one search_page--search_page resource by UUID #
GET /taxonomy_term/article_type List taxonomy_term--article_type resources #
GET /taxonomy_term/article_type/{id} Get one taxonomy_term--article_type resource by UUID #
GET /taxonomy_term/blog_topics List taxonomy_term--blog_topics resources #
GET /taxonomy_term/blog_topics/{id} Get one taxonomy_term--blog_topics resource by UUID #
GET /taxonomy_term/certification_statuses List taxonomy_term--certification_statuses resources #
GET /taxonomy_term/certification_statuses/{id} Get one taxonomy_term--certification_statuses resource by UUID #
GET /taxonomy_term/ch_award List taxonomy_term--ch_award resources #
GET /taxonomy_term/ch_award/{id} Get one taxonomy_term--ch_award resource by UUID #
GET /taxonomy_term/ch_category List taxonomy_term--ch_category resources #
GET /taxonomy_term/ch_category/{id} Get one taxonomy_term--ch_category resource by UUID #
GET /taxonomy_term/ch_office List taxonomy_term--ch_office resources #
GET /taxonomy_term/ch_office/{id} Get one taxonomy_term--ch_office resource by UUID #
GET /taxonomy_term/ch_state List taxonomy_term--ch_state resources #
GET /taxonomy_term/ch_state/{id} Get one taxonomy_term--ch_state resource by UUID #
GET /taxonomy_term/competencies_wheel_categories List taxonomy_term--competencies_wheel_categories resources #
GET /taxonomy_term/competencies_wheel_categories/{id} Get one taxonomy_term--competencies_wheel_categories resource by UUID #
GET /taxonomy_term/country List taxonomy_term--country resources #
GET /taxonomy_term/country/{id} Get one taxonomy_term--country resource by UUID #
GET /taxonomy_term/document_category List taxonomy_term--document_category resources #
GET /taxonomy_term/document_category/{id} Get one taxonomy_term--document_category resource by UUID #
GET /taxonomy_term/eac_grants_faq_test List taxonomy_term--eac_grants_faq_test resources #
GET /taxonomy_term/eac_grants_faq_test/{id} Get one taxonomy_term--eac_grants_faq_test resource by UUID #
GET /taxonomy_term/event_categories List taxonomy_term--event_categories resources #
GET /taxonomy_term/event_categories/{id} Get one taxonomy_term--event_categories resource by UUID #
GET /taxonomy_term/faq_categories List taxonomy_term--faq_categories resources #
GET /taxonomy_term/faq_categories/{id} Get one taxonomy_term--faq_categories resource by UUID #
GET /taxonomy_term/faq_section List taxonomy_term--faq_section resources #
GET /taxonomy_term/faq_section/{id} Get one taxonomy_term--faq_section resource by UUID #
GET /taxonomy_term/faq_sub_categories List taxonomy_term--faq_sub_categories resources #
GET /taxonomy_term/faq_sub_categories/{id} Get one taxonomy_term--faq_sub_categories resource by UUID #
GET /taxonomy_term/faq_tags List taxonomy_term--faq_tags resources #
GET /taxonomy_term/faq_tags/{id} Get one taxonomy_term--faq_tags resource by UUID #
GET /taxonomy_term/glossary_languages List taxonomy_term--glossary_languages resources #
GET /taxonomy_term/glossary_languages/{id} Get one taxonomy_term--glossary_languages resource by UUID #
GET /taxonomy_term/keyword_categories List taxonomy_term--keyword_categories resources #
GET /taxonomy_term/keyword_categories/{id} Get one taxonomy_term--keyword_categories resource by UUID #
GET /taxonomy_term/keywords List taxonomy_term--keywords resources #
GET /taxonomy_term/keywords/{id} Get one taxonomy_term--keywords resource by UUID #
GET /taxonomy_term/manufacturer_types List taxonomy_term--manufacturer_types resources #
GET /taxonomy_term/manufacturer_types/{id} Get one taxonomy_term--manufacturer_types resource by UUID #
GET /taxonomy_term/media_category List taxonomy_term--media_category resources #
GET /taxonomy_term/media_category/{id} Get one taxonomy_term--media_category resource by UUID #
GET /taxonomy_term/news_category List taxonomy_term--news_category resources #
GET /taxonomy_term/news_category/{id} Get one taxonomy_term--news_category resource by UUID #
GET /taxonomy_term/nvra_languages List taxonomy_term--nvra_languages resources #
GET /taxonomy_term/nvra_languages/{id} Get one taxonomy_term--nvra_languages resource by UUID #
GET /taxonomy_term/nvra_states List taxonomy_term--nvra_states resources #
GET /taxonomy_term/nvra_states/{id} Get one taxonomy_term--nvra_states resource by UUID #
GET /taxonomy_term/ovr_status List taxonomy_term--ovr_status resources #
GET /taxonomy_term/ovr_status/{id} Get one taxonomy_term--ovr_status resource by UUID #
GET /taxonomy_term/payment_years List taxonomy_term--payment_years resources #
GET /taxonomy_term/payment_years/{id} Get one taxonomy_term--payment_years resource by UUID #
GET /taxonomy_term/person_type List taxonomy_term--person_type resources #
GET /taxonomy_term/person_type/{id} Get one taxonomy_term--person_type resource by UUID #
GET /taxonomy_term/resource_type List taxonomy_term--resource_type resources #
GET /taxonomy_term/resource_type/{id} Get one taxonomy_term--resource_type resource by UUID #
GET /taxonomy_term/section List taxonomy_term--section resources #
GET /taxonomy_term/section/{id} Get one taxonomy_term--section resource by UUID #
GET /taxonomy_term/staff_departments List taxonomy_term--staff_departments resources #
GET /taxonomy_term/staff_departments/{id} Get one taxonomy_term--staff_departments resource by UUID #
GET /taxonomy_term/state_voter_options List taxonomy_term--state_voter_options resources #
GET /taxonomy_term/state_voter_options/{id} Get one taxonomy_term--state_voter_options resource by UUID #
GET /taxonomy_term/states List taxonomy_term--states resources #
GET /taxonomy_term/states/{id} Get one taxonomy_term--states resource by UUID #
GET /taxonomy_term/test_lab_statuses List taxonomy_term--test_lab_statuses resources #
GET /taxonomy_term/test_lab_statuses/{id} Get one taxonomy_term--test_lab_statuses resource by UUID #
GET /taxonomy_term/video_category List taxonomy_term--video_category resources #
GET /taxonomy_term/video_category/{id} Get one taxonomy_term--video_category resource by UUID #
GET /taxonomy_term/voting_products List taxonomy_term--voting_products resources #
GET /taxonomy_term/voting_products/{id} Get one taxonomy_term--voting_products resource by UUID #

Documentation

Specifications

Other Resources

🔗
Overlay
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/overlays/election-assistance-commission-jsonapi-overlay.yaml
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/examples/_index.yml
🔗
DataModel
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/data-model/election-assistance-commission-data-model.yml
🔗
Vocabulary
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/vocabulary/election-assistance-commission-vocabulary.yml
🔗
Conventions
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/conventions/election-assistance-commission-conventions.yml
🔗
ErrorCatalog
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/errors/election-assistance-commission-problem-types.yml
🔗
Conformance
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/conformance/election-assistance-commission-conformance.yml
🔗
Lifecycle
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/lifecycle/election-assistance-commission-lifecycle.yml
🔗
Plans
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/plans/election-assistance-commission-plans-pricing.yml
🔗
AgentSkill
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/skills/_index.yml
🔗
X-MCPServerCandidate
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/mcp/election-assistance-commission-mcp.yml
🔗
LLMsTxt
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/llms/election-assistance-commission-llms.txt
🔗
ResearchAndData
https://www.eac.gov/research-and-data
🔗
APIsJSON
https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/apis.yml

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/eac"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

election-assistance-commission-jsonapi-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: U.S. Election Assistance Commission Content JSON:API
  version: '1.0'
  summary: Anonymous, read-only JSON:API 1.0 over the EAC's public content estate at www.eac.gov — voting
    system certifications, test labs, manufacturers, NVRA state pages, HAVA grant financials and the Clearinghouse
    Awards.
  description: 'The U.S. Election Assistance Commission publishes no developer portal and no OpenAPI description.
    It does, however, serve a live, entirely anonymous, standards-conformant JSON:API 1.0 surface at https://www.eac.gov/jsonapi,
    generated by Drupal 10 (the `x-generator` response header says so) and hosted on Acquia behind Cloudflare.


    THIS DOCUMENT IS DERIVED BY API EVANGELIST FROM LIVE PROBES, NOT PUBLISHED BY THE EAC. Every path
    below corresponds to a `links` entry in the resource-type index document fetched from https://www.eac.gov/jsonapi
    on 2026-09-06, and every path in this document was individually requested anonymously on that date
    and returned HTTP 200 with `content-type: application/vnd.api+json` AND at least one resource object.
    Resource types the index advertises but which returned an empty `data` array, or which Drupal omitted
    for insufficient authorisation, are recorded in `x-probe.excluded` rather than described here.


    THE SURFACE IS READ-ONLY BY CONFIGURATION. An anonymous `POST /jsonapi/node/article` on 2026-09-06
    returned HTTP 405 with the JSON:API error detail "JSON:API is configured to accept only read operations."
    No write, create, update or delete operation exists on this surface for any caller, credentialed or
    not, so this document describes GET only.


    WHAT IT EXPOSES that is of public interest: the EAC''s voting system certification programme (117
    certified/withdrawn voting systems, 20 registered manufacturers, 8 accredited Voting System Test Laboratories,
    5 testing standards, 275 engineering change orders, 27 Notices of Clarification), the National Voter
    Registration Act state pages (155), state election information and online-voter-registration status
    (113), state voter registration deadlines and lookup links (56), HAVA Election Security and state
    grant financial reporting (56 + 56), 561 Clearinghouse Award entries, 495 news articles and 378 FAQs,
    plus the taxonomies behind them.


    WHAT IT DOES NOT EXPOSE: the Election Administration and Voting Survey (EAVS) microdata. EAVS is distributed
    as bulk CSV/Excel/SPSS/Stata/SAS downloads catalogued in https://www.eac.gov/data.json (Project Open
    Data v1.1), not through this API. `node--jurisdiction_data`, `paragraph--eavs_data` and `taxonomy_term--eavs_states`
    are advertised by the index but return empty collections.'
  contact:
    name: U.S. Election Assistance Commission
    url: https://www.eac.gov/contact
  license:
    name: U.S. Government Work — generally public domain under 17 U.S.C. 105
    url: https://www.eac.gov/main/privacy-statement
  x-derived-by: API Evangelist enrichment pipeline
  x-derived-from: https://www.eac.gov/jsonapi
  x-derived-on: '2026-09-06'
  x-publisher-provided: false
servers:
- url: https://www.eac.gov/jsonapi
  description: Production JSON:API entry point. Public, anonymous, read-only.
security: []
x-provenance:
  generated: '2026-09-06'
  method: probed
  source: https://www.eac.gov/jsonapi
  author: API Evangelist
x-probe:
  fetched: '2026-09-06'
  index:
    url: https://www.eac.gov/jsonapi
    http_status: 200
    content_type: application/vnd.api+json
    resource_types_advertised: 215
  described: 86
  excluded:
    empty_collection:
    - ai_file--ai_file
    - ai_guardrail--ai_guardrail
    - ai_guardrail_set--ai_guardrail_set
    - ai_prompt--ai_prompt
    - ai_prompt_type--ai_prompt_type
    - comment--comment
    - facets_summary--facets_summary
    - feeds_feed--cares_grants
    - feeds_feed--engineering_change_orders
    - feeds_feed--register_vote_and_contact_state
    - feeds_feed--state_requirement_payments
    - feeds_subscription--feeds_subscription
    - flagging--following
    - key_config_override--key_config_override
    - media--galleries
    - media_bulk_config--media_bulk_config
    - node--jurisdiction_data
    - paragraph--eavs_data
    - paragraph--poll_worker_information
    - paragraph--voting_policies_information
    - paragraph--voting_technology_information
    - search_api_task--search_api_task
    - taxonomy_term--ai_tones
    - taxonomy_term--eavs_states
    - taxonomy_term--galleries
    - taxonomy_term--media_directories
    - taxonomy_term--program_type
    - taxonomy_term--quick_tips
    - taxonomy_term--subscribers
    - taxonomy_term--tags
    - taxonomy_term--test
    - taxonomy_term--uswds_classes
    - vote--reaction_10_yes
    - vote--reaction_20_somewhat
    - vote--reaction_30_no
    - vote--vote
    - vote_result--vote_result
    - webform_submission--2022_national_clearinghouse_awar
    - webform_submission--2023_national_clearinghouse_awar
    - webform_submission--bloggers_contact_form
    - webform_submission--clearie_submission_form
    - webform_submission--contact
    - webform_submission--contact_us
    - webform_submission--demo_webform
    - webform_submission--e_alert
    - webform_submission--faq
    - webform_submission--sign_up_for_eac_updates
    - webform_submission--sign_up_for_the_eac_newsletter
    - webform_submission--sponsors_form
    - webform_submission--staff_contact
    - webform_submission--template_contact
    - webform_submission--template_employee_evaluation
    - webform_submission--template_feedback
    - webform_submission--template_issue
    - webform_submission--template_job_application
    - webform_submission--template_job_seeker_profile
    - webform_submission--template_registration
    - webform_submission--template_session_evaluation
    - webform_submission--template_subscribe
    - webform_submission--template_user_profile
    - webform_submission--vulnerability_disclosure_policy
    omitted_insufficient_authorization:
    - action--action
    - base_field_override--base_field_override
    - behavior_settings--behavior_settings
    - block_content_type--block_content_type
    - captcha_point--captcha_point
    - comment_type--comment_type
    - config_split--config_split
    - configurable_language--configurable_language
    - crop--focal_point
    - crop_type--crop_type
    - editor--editor
    - embed_button--embed_button
    - entity_browser--entity_browser
    - entity_form_display--entity_form_display
    - entity_form_mode--entity_form_mode
    - entity_view_display--entity_view_display
    - entity_view_mode--entity_view_mode
    - facets_facet--facets_facet
    - facets_facet_source--facets_facet_source
    - feeds_feed--es_funds
    - feeds_feed--notice_of_clarification
    - feeds_feed_type--feeds_feed_type
    - field_config--field_config
    - field_storage_config--field_storage_config
    - filter_format--filter_format
    - flag--flag
    - flexslider--flexslider
    - google_tag_container--google_tag_container
    - image_style--image_style
    - imce_profile--imce_profile
    - key--key
    - language_content_settings--language_content_settings
    - linkit_profile--linkit_profile
    - media--archive
    - menu_link_content--menu_link_content
    - metatag_defaults--metatag_defaults
    - node--person
    - node--slideshow_slide
    - node--state_payment_requirements
    - path_alias--path_alias
    - pathauto_pattern--pathauto_pattern
    - rdf_mapping--rdf_mapping
    - redirect--redirect
    - responsive_image_style--responsive_image_style
    - rest_resource_config--rest_resource_config
    - search_api_index--search_api_index
    - search_api_server--search_api_server
    - shortcut--default
    - shortcut_set--shortcut_set
    - simple_sitemap--simple_sitemap
    - simple_sitemap_type--simple_sitemap_type
    - sitewide_alert--sitewide_alert
    - slick--slick
    - taxonomy_term--uswds_breakpoints
    - taxonomy_vocabulary--taxonomy_vocabulary
    - token_custom_type--token_custom_type
    - tour--tour
    - user_role--user_role
    - view--view
    - vote_type--vote_type
    - webform--webform
    - webform_options--webform_options
    - workflow--workflow
    non_200:
      contact_message--feedback: 405
      contact_message--personal: 405
      node--event: 503
      token_custom--custom: 503
      user--user: 503
  write_surface:
    probe: POST https://www.eac.gov/jsonapi/node/article
    http_status: 405
    detail: JSON:API is configured to accept only read operations.
  response_headers_observed:
  - 'x-generator: Drupal 10'
  - 'cache-control: max-age=31536000, public'
  - etag
  - last-modified
  - x-drupal-cache
  - x-request-id
  - 'server: cloudflare'
  - 'via: varnish'
  rate_limit_headers_observed: []
tags:
- name: block
  description: Theme block placements.
- name: block_content
  description: Reusable content blocks.
- name: contact_form
  description: Contact form definitions.
- name: date_format
  description: Site date format configuration.
- name: file
  description: File entities backing media items.
- name: media
  description: Media entities — documents (PDF reports, certifications, test reports), images and remote
    video.
- name: media_type
  description: Media bundle definitions.
- name: menu
  description: Site menus.
- name: node
  description: Content nodes — the EAC's substantive records (voting systems, manufacturers, test labs,
    NVRA, grants, news, FAQs).
- name: node_type
  description: Node bundle definitions.
- name: paragraph
  description: Layout paragraph components composing EAC landing pages.
- name: paragraphs_type
  description: Paragraph bundle definitions.
- name: search_page
  description: Search page configuration.
- name: taxonomy_term
  description: Controlled vocabularies the EAC maintains — states, certification statuses, manufacturer
    types, test lab statuses, document and news categories.
paths:
  /:
    get:
      operationId: getResourceIndex
      summary: JSON:API resource-type index
      tags:
      - node
      description: 'The JSON:API entry point. Returns a `links` map of every advertised resource type
        in `entity--bundle` form. Probed 2026-09-06: HTTP 200, application/vnd.api+json, 21878 bytes,
        215 resource-type link relations.'
      responses:
        '200':
          description: Resource-type index document
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/IndexDocument'
  /block/block:
    get:
      operationId: listBlockBlock
      summary: List block--block resources
      tags:
      - block
      description: 'Probed anonymously 2026-09-06: HTTP 200, `application/vnd.api+json`, at least one
        resource object returned.'
      parameters:
      - $ref: '#/components/parameters/pageLimit'
      - $ref: '#/components/parameters/pageOffset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API collection document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/CollectionDocument'
        '400':
          $ref: '#/components/responses/BadRequest'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      x-probe:
        url: https://www.eac.gov/jsonapi/block/block?page[limit]=1
        http_status: 200
        content_type: application/vnd.api+json
        fetched: '2026-09-06'
  /block/block/{id}:
    get:
      operationId: getBlockBlock
      summary: Get one block--block resource by UUID
      tags:
      - block
      description: Returns a single resource object. Individual reads were verified on 2026-09-06 against
        `node--voting_system`; the route exists for every collection above. An unknown UUID returns HTTP
        404 with a JSON:API error document.
      parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API individual document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/IndividualDocument'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /block_content/basic:
    get:
      operationId: listBlockContentBasic
      summary: List block_content--basic resources
      tags:
      - block_content
      description: 'Probed anonymously 2026-09-06: HTTP 200, `application/vnd.api+json`, at least one
        resource object returned.'
      parameters:
      - $ref: '#/components/parameters/pageLimit'
      - $ref: '#/components/parameters/pageOffset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API collection document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/CollectionDocument'
        '400':
          $ref: '#/components/responses/BadRequest'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      x-probe:
        url: https://www.eac.gov/jsonapi/block_content/basic?page[limit]=1
        http_status: 200
        content_type: application/vnd.api+json
        fetched: '2026-09-06'
  /block_content/basic/{id}:
    get:
      operationId: getBlockContentBasic
      summary: Get one block_content--basic resource by UUID
      tags:
      - block_content
      description: Returns a single resource object. Individual reads were verified on 2026-09-06 against
        `node--voting_system`; the route exists for every collection above. An unknown UUID returns HTTP
        404 with a JSON:API error document.
      parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API individual document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/IndividualDocument'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /block_content/card:
    get:
      operationId: listBlockContentCard
      summary: List block_content--card resources
      tags:
      - block_content
      description: 'Probed anonymously 2026-09-06: HTTP 200, `application/vnd.api+json`, at least one
        resource object returned.'
      parameters:
      - $ref: '#/components/parameters/pageLimit'
      - $ref: '#/components/parameters/pageOffset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API collection document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/CollectionDocument'
        '400':
          $ref: '#/components/responses/BadRequest'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      x-probe:
        url: https://www.eac.gov/jsonapi/block_content/card?page[limit]=1
        http_status: 200
        content_type: application/vnd.api+json
        fetched: '2026-09-06'
  /block_content/card/{id}:
    get:
      operationId: getBlockContentCard
      summary: Get one block_content--card resource by UUID
      tags:
      - block_content
      description: Returns a single resource object. Individual reads were verified on 2026-09-06 against
        `node--voting_system`; the route exists for every collection above. An unknown UUID returns HTTP
        404 with a JSON:API error document.
      parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API individual document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/IndividualDocument'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /block_content/cta:
    get:
      operationId: listBlockContentCta
      summary: List block_content--cta resources
      tags:
      - block_content
      description: 'Probed anonymously 2026-09-06: HTTP 200, `application/vnd.api+json`, at least one
        resource object returned.'
      parameters:
      - $ref: '#/components/parameters/pageLimit'
      - $ref: '#/components/parameters/pageOffset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API collection document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/CollectionDocument'
        '400':
          $ref: '#/components/responses/BadRequest'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      x-probe:
        url: https://www.eac.gov/jsonapi/block_content/cta?page[limit]=1
        http_status: 200
        content_type: application/vnd.api+json
        fetched: '2026-09-06'
  /block_content/cta/{id}:
    get:
      operationId: getBlockContentCta
      summary: Get one block_content--cta resource by UUID
      tags:
      - block_content
      description: Returns a single resource object. Individual reads were verified on 2026-09-06 against
        `node--voting_system`; the route exists for every collection above. An unknown UUID returns HTTP
        404 with a JSON:API error document.
      parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API individual document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/IndividualDocument'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /block_content/link_list:
    get:
      operationId: listBlockContentLinkList
      summary: List block_content--link_list resources
      tags:
      - block_content
      description: 'Probed anonymously 2026-09-06: HTTP 200, `application/vnd.api+json`, at least one
        resource object returned.'
      parameters:
      - $ref: '#/components/parameters/pageLimit'
      - $ref: '#/components/parameters/pageOffset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API collection document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/CollectionDocument'
        '400':
          $ref: '#/components/responses/BadRequest'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      x-probe:
        url: https://www.eac.gov/jsonapi/block_content/link_list?page[limit]=1
        http_status: 200
        content_type: application/vnd.api+json
        fetched: '2026-09-06'
  /block_content/link_list/{id}:
    get:
      operationId: getBlockContentLinkList
      summary: Get one block_content--link_list resource by UUID
      tags:
      - block_content
      description: Returns a single resource object. Individual reads were verified on 2026-09-06 against
        `node--voting_system`; the route exists for every collection above. An unknown UUID returns HTTP
        404 with a JSON:API error document.
      parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API individual document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/IndividualDocument'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /contact_form/contact_form:
    get:
      operationId: listContactFormContactForm
      summary: List contact_form--contact_form resources
      tags:
      - contact_form
      description: 'Probed anonymously 2026-09-06: HTTP 200, `application/vnd.api+json`, at least one
        resource object returned.'
      parameters:
      - $ref: '#/components/parameters/pageLimit'
      - $ref: '#/components/parameters/pageOffset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API collection document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/CollectionDocument'
        '400':
          $ref: '#/components/responses/BadRequest'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      x-probe:
        url: https://www.eac.gov/jsonapi/contact_form/contact_form?page[limit]=1
        http_status: 200
        content_type: application/vnd.api+json
        fetched: '2026-09-06'
  /contact_form/contact_form/{id}:
    get:
      operationId: getContactFormContactForm
      summary: Get one contact_form--contact_form resource by UUID
      tags:
      - contact_form
      description: Returns a single resource object. Individual reads were verified on 2026-09-06 against
        `node--voting_system`; the route exists for every collection above. An unknown UUID returns HTTP
        404 with a JSON:API error document.
      parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API individual document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/IndividualDocument'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /date_format/date_format:
    get:
      operationId: listDateFormatDateFormat
      summary: List date_format--date_format resources
      tags:
      - date_format
      description: 'Probed anonymously 2026-09-06: HTTP 200, `application/vnd.api+json`, at least one
        resource object returned.'
      parameters:
      - $ref: '#/components/parameters/pageLimit'
      - $ref: '#/components/parameters/pageOffset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API collection document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/CollectionDocument'
        '400':
          $ref: '#/components/responses/BadRequest'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      x-probe:
        url: https://www.eac.gov/jsonapi/date_format/date_format?page[limit]=1
        http_status: 200
        content_type: application/vnd.api+json
        fetched: '2026-09-06'
  /date_format/date_format/{id}:
    get:
      operationId: getDateFormatDateFormat
      summary: Get one date_format--date_format resource by UUID
      tags:
      - date_format
      description: Returns a single resource object. Individual reads were verified on 2026-09-06 against
        `node--voting_system`; the route exists for every collection above. An unknown UUID returns HTTP
        404 with a JSON:API error document.
      parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API individual document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/IndividualDocument'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /file/file:
    get:
      operationId: listFileFile
      summary: List file--file resources
      tags:
      - file
      description: 'Probed anonymously 2026-09-06: HTTP 200, `application/vnd.api+json`, at least one
        resource object returned.'
      parameters:
      - $ref: '#/components/parameters/pageLimit'
      - $ref: '#/components/parameters/pageOffset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API collection document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/CollectionDocument'
        '400':
          $ref: '#/components/responses/BadRequest'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      x-probe:
        url: https://www.eac.gov/jsonapi/file/file?page[limit]=1
        http_status: 200
        content_type: application/vnd.api+json
        fetched: '2026-09-06'
  /file/file/{id}:
    get:
      operationId: getFileFile
      summary: Get one file--file resource by UUID
      tags:
      - file
      description: Returns a single resource object. Individual reads were verified on 2026-09-06 against
        `node--voting_system`; the route exists for every collection above. An unknown UUID returns HTTP
        404 with a JSON:API error document.
      parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API individual document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/IndividualDocument'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /media/document:
    get:
      operationId: listMediaDocument
      summary: List media--document resources
      tags:
      - media
      description: 'Document media — the PDF and Office files behind certifications, test reports, studies
        and guidance.


        Probed anonymously 2026-09-06: HTTP 200, `application/vnd.api+json`, at least one resource object
        returned.'
      parameters:
      - $ref: '#/components/parameters/pageLimit'
      - $ref: '#/components/parameters/pageOffset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API collection document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/CollectionDocument'
        '400':
          $ref: '#/components/responses/BadRequest'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      x-probe:
        url: https://www.eac.gov/jsonapi/media/document?page[limit]=1
        http_status: 200
        content_type: application/vnd.api+json
        fetched: '2026-09-06'
      x-observed-fields:
        attributes:
        - changed
        - created
        - default_langcode
        - drupal_internal__mid
        - drupal_internal__vid
        - field_archived
        - field_body
        - field_eco
        - field_event
        - field_featured
        - field_key_findings
        - field_library
        - field_new_window
        - field_post_date
        - langcode
        - metatag
        - name
        - path
        - revision_created
        - revision_translation_affected
        - status
        relationships:
        - bundle
        - field_document_category
        - field_keywords
        - field_media_category
        - field_media_document
        - field_related_events
        - field_related_videos
        - revision_user
        - thumbnail
        - uid
  /media/document/{id}:
    get:
      operationId: getMediaDocument
      summary: Get one media--document resource by UUID
      tags:
      - media
      description: Returns a single resource object. Individual reads were verified on 2026-09-06 against
        `node--voting_system`; the route exists for every collection above. An unknown UUID returns HTTP
        404 with a JSON:API error document.
      parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API individual document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/IndividualDocument'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /media/image:
    get:
      operationId: listMediaImage
      summary: List media--image resources
      tags:
      - media
      description: 'Probed anonymously 2026-09-06: HTTP 200, `application/vnd.api+json`, at least one
        resource object returned.'
      parameters:
      - $ref: '#/components/parameters/pageLimit'
      - $ref: '#/components/parameters/pageOffset'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/include'
      - $ref: '#/components/parameters/fields'
      responses:
        '200':
          description: JSON:API collection document.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/CollectionDocument'
        '400':
          $ref: '#/components/responses/BadRequest'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
    

# --- truncated at 32 KB (229 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/election-assistance-commission/refs/heads/main/openapi/election-assistance-commission-jsonapi-openapi.yml