# method: derived # x-source-url: https://www.arc.gov/wp-json/ # generated: '2026-09-07' # Derived by the API Evangelist enrichment pipeline from the provider's own live # discovery document. The Appalachian Regional Commission publishes no OpenAPI. openapi: 3.1.0 info: title: ARC Content API (WordPress REST wp/v2) version: wp/v2 summary: Anonymous read access to ARC newsroom posts, site pages, the media library and site-wide search. description: 'The Appalachian Regional Commission publishes www.arc.gov on WordPress, which exposes the WordPress REST API at https://www.arc.gov/wp-json/. This document covers the general content surface: the ARC newsroom (204 posts as of 2026-09-07), site pages (176), the media library (6,293 attachments, largely PDF reports and infographics) and the site-wide search endpoint. The `wp/v2` namespace at https://www.arc.gov/wp-json/ is readable anonymously — no key, no OAuth, no registration. Write methods are advertised on these same routes but reject anonymous callers (WordPress authenticates writes with Application Passwords over HTTP Basic), so only the GET surface is documented here. This document was DERIVED mechanically by API Evangelist from the route-discovery document served at https://www.arc.gov/wp-json/ on 2026-09-07 — every path, method and query parameter below is taken verbatim from that descriptor, and each collection route was called live to confirm it answers 200 anonymously. The Appalachian Regional Commission does not publish an OpenAPI definition of its own; this is the content API its CMS exposes, not a product API.' contact: name: Appalachian Regional Commission url: https://www.arc.gov/contact-arc/ license: name: U.S. Government Work url: https://www.arc.gov/arc-web-and-privacy-policy/ x-derived-by: API Evangelist enrichment pipeline x-derived-from: https://www.arc.gov/wp-json/ x-derived-on: '2026-09-07' x-provider-published: false servers: - url: https://www.arc.gov/wp-json description: Production (arc.gov WordPress REST API) tags: - name: Content paths: /wp/v2/posts: get: operationId: getPosts summary: GET /wp/v2/posts description: List ARC newsroom posts (press releases, announcements, blog items). 204 records live on 2026-09-07. tags: - Content parameters: - name: after in: query required: false schema: type: string format: date-time description: Limit response to posts published after a given ISO8601 compliant date. - name: author in: query required: false schema: type: array items: type: integer default: [] description: Limit result set to posts assigned to specific authors. - name: author_exclude in: query required: false schema: type: array items: type: integer default: [] description: Ensure result set excludes posts assigned to specific authors. - name: before in: query required: false schema: type: string format: date-time description: Limit response to posts published before a given ISO8601 compliant date. - name: categories in: query required: false schema: type: object description: Limit result set to items with specific terms assigned in the categories taxonomy. - name: categories_exclude in: query required: false schema: type: object description: Limit result set to items except those with specific terms assigned in the categories taxonomy. - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. - name: exclude in: query required: false schema: type: array items: type: integer default: [] description: Ensure result set excludes specific IDs. - name: format in: query required: false schema: type: array items: type: string enum: - standard - aside - chat - gallery - link - image - quote - status - video - audio description: Limit result set to items assigned one or more given formats. - name: global_type in: query required: false schema: type: object description: Limit result set to items with specific terms assigned in the global_type taxonomy. - name: global_type_exclude in: query required: false schema: type: object description: Limit result set to items except those with specific terms assigned in the global_type taxonomy. - name: ignore_sticky in: query required: false schema: type: boolean default: true description: Whether to ignore sticky posts or not. - name: include in: query required: false schema: type: array items: type: integer default: [] description: Limit result set to specific IDs. - name: modified_after in: query required: false schema: type: string format: date-time description: Limit response to posts modified after a given ISO8601 compliant date. - name: modified_before in: query required: false schema: type: string format: date-time description: Limit response to posts modified before a given ISO8601 compliant date. - name: newsroom_topic in: query required: false schema: type: object description: Limit result set to items with specific terms assigned in the newsroom_topic taxonomy. - name: newsroom_topic_exclude in: query required: false schema: type: object description: Limit result set to items except those with specific terms assigned in the newsroom_topic taxonomy. - name: newsroom_types in: query required: false schema: type: object description: Limit result set to items with specific terms assigned in the newsroom_types taxonomy. - name: newsroom_types_exclude in: query required: false schema: type: object description: Limit result set to items except those with specific terms assigned in the newsroom_types taxonomy. - name: office_inspector_general_type in: query required: false schema: type: object description: Limit result set to items with specific terms assigned in the office_inspector_general_type taxonomy. - name: office_inspector_general_type_exclude in: query required: false schema: type: object description: Limit result set to items except those with specific terms assigned in the office_inspector_general_type taxonomy. - name: offset in: query required: false schema: type: integer description: Offset the result set by a specific number of items. - name: operational_guidance_type in: query required: false schema: type: object description: Limit result set to items with specific terms assigned in the operational_guidance_type taxonomy. - name: operational_guidance_type_exclude in: query required: false schema: type: object description: Limit result set to items except those with specific terms assigned in the operational_guidance_type taxonomy. - name: order in: query required: false schema: type: string enum: - asc - desc default: desc description: Order sort attribute ascending or descending. - name: orderby in: query required: false schema: type: string enum: - author - date - id - include - modified - parent - relevance - slug - include_slugs - title default: date description: Sort collection by post attribute. - name: page in: query required: false schema: type: integer default: 1 minimum: 1 description: Current page of the collection. - name: per_page in: query required: false schema: type: integer default: 10 minimum: 1 maximum: 100 description: Maximum number of items to be returned in result set. - name: search in: query required: false schema: type: string description: Limit results to those matching a string. - name: search_columns in: query required: false schema: type: array items: type: string enum: - post_title - post_content - post_excerpt default: [] description: Array of column names to be searched. - name: search_semantics in: query required: false schema: type: string enum: - exact description: How to interpret the search input. - name: slug in: query required: false schema: type: array items: type: string description: Limit result set to posts with one or more specific slugs. - name: states_counties in: query required: false schema: type: object description: Limit result set to items with specific terms assigned in the states_counties taxonomy. - name: states_counties_exclude in: query required: false schema: type: object description: Limit result set to items except those with specific terms assigned in the states_counties taxonomy. - name: status in: query required: false schema: type: array items: type: string enum: - publish - future - draft - pending - private - trash - auto-draft - inherit - request-pending - request-confirmed - request-failed - request-completed - acf-disabled - dp-rewrite-republish - draft-revision - pending-revision - future-revision - any - draft-revision - pending-revision - future-revision default: publish description: Limit result set to posts assigned one or more statuses. - name: sticky in: query required: false schema: type: boolean description: Limit result set to items that are sticky. - name: tags in: query required: false schema: type: object description: Limit result set to items with specific terms assigned in the tags taxonomy. - name: tags_exclude in: query required: false schema: type: object description: Limit result set to items except those with specific terms assigned in the tags taxonomy. - name: tax_relation in: query required: false schema: type: string enum: - AND - OR description: Limit result set based on relationship between multiple taxonomies. - name: tax_year in: query required: false schema: type: object description: Limit result set to items with specific terms assigned in the tax_year taxonomy. - name: tax_year_exclude in: query required: false schema: type: object description: Limit result set to items except those with specific terms assigned in the tax_year taxonomy. responses: '200': description: Success. JSON body; collection routes also return `X-WP-Total` and `X-WP-TotalPages` headers. headers: X-WP-Total: description: Total number of records matching the query. schema: type: integer X-WP-TotalPages: description: Total number of pages available at the current `per_page`. schema: type: integer content: application/json: schema: {} '400': description: Bad request — an invalid parameter was supplied. Body is the WordPress REST error envelope. content: application/json: schema: $ref: '#/components/schemas/RestError' '401': description: Unauthorized — the route requires an authenticated WordPress user. content: application/json: schema: $ref: '#/components/schemas/RestError' '403': description: Forbidden — the capability is disabled for anonymous callers. content: application/json: schema: $ref: '#/components/schemas/RestError' '404': description: Not found — no resource exists with the supplied identifier. content: application/json: schema: $ref: '#/components/schemas/RestError' /wp/v2/posts/{id}: get: operationId: getPostsByid summary: GET /wp/v2/posts/{id} description: Read `/wp/v2/posts/{id}` from the WordPress REST API at https://www.arc.gov/wp-json. tags: - Content parameters: - name: id in: path required: true schema: type: integer description: Unique identifier for the post. - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. - name: excerpt_length in: query required: false schema: type: integer description: Override the default excerpt length. - name: password in: query required: false schema: type: string description: The password for the post if it is password protected. responses: '200': description: Success. JSON body; collection routes also return `X-WP-Total` and `X-WP-TotalPages` headers. headers: X-WP-Total: description: Total number of records matching the query. schema: type: integer X-WP-TotalPages: description: Total number of pages available at the current `per_page`. schema: type: integer content: application/json: schema: {} '400': description: Bad request — an invalid parameter was supplied. Body is the WordPress REST error envelope. content: application/json: schema: $ref: '#/components/schemas/RestError' '401': description: Unauthorized — the route requires an authenticated WordPress user. content: application/json: schema: $ref: '#/components/schemas/RestError' '403': description: Forbidden — the capability is disabled for anonymous callers. content: application/json: schema: $ref: '#/components/schemas/RestError' '404': description: Not found — no resource exists with the supplied identifier. content: application/json: schema: $ref: '#/components/schemas/RestError' /wp/v2/pages: get: operationId: getPages summary: GET /wp/v2/pages description: List ARC site pages — programs, investment priorities, about, applicant resources. 176 records live on 2026-09-07. tags: - Content parameters: - name: after in: query required: false schema: type: string format: date-time description: Limit response to posts published after a given ISO8601 compliant date. - name: author in: query required: false schema: type: array items: type: integer default: [] description: Limit result set to posts assigned to specific authors. - name: author_exclude in: query required: false schema: type: array items: type: integer default: [] description: Ensure result set excludes posts assigned to specific authors. - name: before in: query required: false schema: type: string format: date-time description: Limit response to posts published before a given ISO8601 compliant date. - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. - name: exclude in: query required: false schema: type: array items: type: integer default: [] description: Ensure result set excludes specific IDs. - name: include in: query required: false schema: type: array items: type: integer default: [] description: Limit result set to specific IDs. - name: investment_priority_topic in: query required: false schema: type: object description: Limit result set to items with specific terms assigned in the investment_priority_topic taxonomy. - name: investment_priority_topic_exclude in: query required: false schema: type: object description: Limit result set to items except those with specific terms assigned in the investment_priority_topic taxonomy. - name: menu_order in: query required: false schema: type: integer description: Limit result set to posts with a specific menu_order value. - name: modified_after in: query required: false schema: type: string format: date-time description: Limit response to posts modified after a given ISO8601 compliant date. - name: modified_before in: query required: false schema: type: string format: date-time description: Limit response to posts modified before a given ISO8601 compliant date. - name: offset in: query required: false schema: type: integer description: Offset the result set by a specific number of items. - name: order in: query required: false schema: type: string enum: - asc - desc default: desc description: Order sort attribute ascending or descending. - name: orderby in: query required: false schema: type: string enum: - author - date - id - include - modified - parent - relevance - slug - include_slugs - title - menu_order default: date description: Sort collection by post attribute. - name: page in: query required: false schema: type: integer default: 1 minimum: 1 description: Current page of the collection. - name: parent in: query required: false schema: type: array items: type: integer default: [] description: Limit result set to items with particular parent IDs. - name: parent_exclude in: query required: false schema: type: array items: type: integer default: [] description: Limit result set to all items except those of a particular parent ID. - name: per_page in: query required: false schema: type: integer default: 10 minimum: 1 maximum: 100 description: Maximum number of items to be returned in result set. - name: search in: query required: false schema: type: string description: Limit results to those matching a string. - name: search_columns in: query required: false schema: type: array items: type: string enum: - post_title - post_content - post_excerpt default: [] description: Array of column names to be searched. - name: search_semantics in: query required: false schema: type: string enum: - exact description: How to interpret the search input. - name: slug in: query required: false schema: type: array items: type: string description: Limit result set to posts with one or more specific slugs. - name: states_counties in: query required: false schema: type: object description: Limit result set to items with specific terms assigned in the states_counties taxonomy. - name: states_counties_exclude in: query required: false schema: type: object description: Limit result set to items except those with specific terms assigned in the states_counties taxonomy. - name: status in: query required: false schema: type: array items: type: string enum: - publish - future - draft - pending - private - trash - auto-draft - inherit - request-pending - request-confirmed - request-failed - request-completed - acf-disabled - dp-rewrite-republish - draft-revision - pending-revision - future-revision - any - draft-revision - pending-revision - future-revision default: publish description: Limit result set to posts assigned one or more statuses. - name: tax_relation in: query required: false schema: type: string enum: - AND - OR description: Limit result set based on relationship between multiple taxonomies. responses: '200': description: Success. JSON body; collection routes also return `X-WP-Total` and `X-WP-TotalPages` headers. headers: X-WP-Total: description: Total number of records matching the query. schema: type: integer X-WP-TotalPages: description: Total number of pages available at the current `per_page`. schema: type: integer content: application/json: schema: {} '400': description: Bad request — an invalid parameter was supplied. Body is the WordPress REST error envelope. content: application/json: schema: $ref: '#/components/schemas/RestError' '401': description: Unauthorized — the route requires an authenticated WordPress user. content: application/json: schema: $ref: '#/components/schemas/RestError' '403': description: Forbidden — the capability is disabled for anonymous callers. content: application/json: schema: $ref: '#/components/schemas/RestError' '404': description: Not found — no resource exists with the supplied identifier. content: application/json: schema: $ref: '#/components/schemas/RestError' /wp/v2/pages/{id}: get: operationId: getPagesByid summary: GET /wp/v2/pages/{id} description: Read `/wp/v2/pages/{id}` from the WordPress REST API at https://www.arc.gov/wp-json. tags: - Content parameters: - name: id in: path required: true schema: type: integer description: Unique identifier for the post. - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. - name: excerpt_length in: query required: false schema: type: integer description: Override the default excerpt length. - name: password in: query required: false schema: type: string description: The password for the post if it is password protected. responses: '200': description: Success. JSON body; collection routes also return `X-WP-Total` and `X-WP-TotalPages` headers. headers: X-WP-Total: description: Total number of records matching the query. schema: type: integer X-WP-TotalPages: description: Total number of pages available at the current `per_page`. schema: type: integer content: application/json: schema: {} '400': description: Bad request — an invalid parameter was supplied. Body is the WordPress REST error envelope. content: application/json: schema: $ref: '#/components/schemas/RestError' '401': description: Unauthorized — the route requires an authenticated WordPress user. content: application/json: schema: $ref: '#/components/schemas/RestError' '403': description: Forbidden — the capability is disabled for anonymous callers. content: application/json: schema: $ref: '#/components/schemas/RestError' '404': description: Not found — no resource exists with the supplied identifier. content: application/json: schema: $ref: '#/components/schemas/RestError' /wp/v2/media: get: operationId: getMedia summary: GET /wp/v2/media description: 'List the ARC media library: PDF reports, infographics, maps and images. 6,293 records live on 2026-09-07.' tags: - Content parameters: - name: after in: query required: false schema: type: string format: date-time description: Limit response to posts published after a given ISO8601 compliant date. - name: author in: query required: false schema: type: array items: type: integer default: [] description: Limit result set to posts assigned to specific authors. - name: author_exclude in: query required: false schema: type: array items: type: integer default: [] description: Ensure result set excludes posts assigned to specific authors. - name: before in: query required: false schema: type: string format: date-time description: Limit response to posts published before a given ISO8601 compliant date. - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. - name: exclude in: query required: false schema: type: array items: type: integer default: [] description: Ensure result set excludes specific IDs. - name: include in: query required: false schema: type: array items: type: integer default: [] description: Limit result set to specific IDs. - name: media_type in: query required: false schema: type: array items: type: string enum: - image - video - text - application - audio description: Limit result set to attachments of a particular media type or media types. - name: mime_type in: query required: false schema: type: array items: type: string description: Limit result set to attachments of a particular MIME type or MIME types. - name: modified_after in: query required: false schema: type: string format: date-time description: Limit response to posts modified after a given ISO8601 compliant date. - name: modified_before in: query required: false schema: type: string format: date-time description: Limit response to posts modified before a given ISO8601 compliant date. - name: offset in: query required: false schema: type: integer description: Offset the result set by a specific number of items. - name: order in: query required: false schema: type: string enum: - asc - desc default: desc description: Order sort attribute ascending or descending. - name: orderby in: query required: false schema: type: string enum: - author - date - id - include - modified - parent - relevance - slug - include_slugs - title default: date description: Sort collection by post attribute. - name: page in: query required: false schema: type: integer default: 1 minimum: 1 description: Current page of the collection. - name: parent in: query required: false schema: type: array items: type: integer default: [] description: Limit result set to items with particular parent IDs. - name: parent_exclude in: query required: false schema: type: array items: type: integer default: [] description: Limit result set to all items except those of a particular parent ID. - name: per_page in: query required: false schema: type: integer default: 10 minimum: 1 maximum: 100 description: Maximum number of items to be returned in result set. - name: search in: query required: false schema: type: string description: Limit results to those matching a string. - name: search_columns in: query required: false schema: type: array items: type: string enum: - post_title - post_content - post_excerpt default: [] description: Array of column names to be searched. - name: search_semantics in: query required: false schema: type: string enum: - exact description: How to interpret the search input. - name: slug in: query required: false schema: type: array items: type: string description: Limit result set to posts with one or more specific slugs. - name: status in: query required: false schema: type: array items: type: string enum: - inherit - private - trash default: inherit description: Limit result set to posts assigned one or more statuses. responses: '200': description: Success. JSON body; collection routes also return `X-WP-Total` and `X-WP-TotalPages` headers. headers: X-WP-Total: description: Total number of records matching the query. schema: type: integer X-WP-TotalPages: description: Total number of pages available at the current `per_page`. schema: type: integer content: application/json: schema: {} '400': description: Bad request — an invalid parameter was supplied. Body is the WordPress REST error envelope. content: application/json: schema: $ref: '#/components/schemas/RestError' '401': description: Unauthorized — the route requires an authenticated WordPress user. content: application/json: schema: $ref: '#/components/schemas/RestError' '403': description: Forbidden — the capability is disabled for anonymous callers. content: application/json: schema: $ref: '#/components/schemas/RestError' '404': description: Not found — no resource exists with the supplied identifier. content: application/json: schema: $ref: '#/components/schemas/RestError' /wp/v2/media/{id}: get: operationId: getMediaByid summary: GET /wp/v2/media/{id} description: Read `/wp/v2/media/{id}` from the WordPress REST API at https://www.arc.gov/wp-json. tags: - Content parameters: - name: id in: path required: true schema: type: integer description: Unique identifier for the post. - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. responses: '200': description: Success. JSON body; collection routes also return `X-WP-Total` and `X-WP-TotalPages` headers. headers: X-WP-Total: description: Total number of records matching the query. schema: type: integer X-WP-TotalPages: description: Total number of pages available at the current `per_page`. schema: type: integer content: application/json: schema: {} '400': description: Bad request — an invalid parameter was supplied. Body is the WordPress REST error envelope. content: application/json: schema: $ref: '#/components/schemas/RestError' '401': description: Unauthorized — the route requires an authenticated WordPress user. content: application/json: schema: $ref: '#/components/schemas/RestError' '403': description: Forbidden — the capability is disabled for anonymous callers. content: application/json: schema: $ref: '#/components/schemas/RestError' '404': description: Not found — no resource exists with the supplied identifier. content: application/json: schema: $ref: '#/components/schemas/RestError' /wp/v2/search: get: operationId: getSearch summary: GET /wp/v2/search description: Site-wide search across every public post type. 243 hits for `search=grant` on 2026-09-07. tags: - Content parameters: - name: context in: query required: false schema: type: string enum: - view - embed default: view description: Scope under which the request is made; determines fields present in response. - name: exclude in: query required: false schema: type: array items: type: integer default: [] description: Ensure result set excludes specific IDs. - name: include in: query required: false schema: type: array items: type: integer default: [] description: Limit result set to specific IDs. - name: page in: query required: false schema: type: integer default: 1 minimum: 1 description: Current page of the collection. - name: per_page in: query required: false schema: type: integer default: 10 minimum: 1 maximum: 100 description: Maximum number of items to be returned in result set. - name: search in: query required: false schema: type: string description: Limit results to those matching a string. - name: subtype in: query required: false schema: type: array items: type: string enum: - post - page - map - success_story - resource - staff - report - event - investment_priority - ldd - category - post_tag - grant_type - event_type - staff_type - map_topic - funding_source - global_type - event_topic - event_host - month - tax_year - research_eval_maps_data_type - fact_sheets_infographics_type - fact_sheets_infographics_topic - staff_topic - state_partner_role - grant_resources_funding_type - grant_resources_resource_type - grant_resources_funding_stage - newsroom_topic - office_inspector_general_type - newsroom_types - state_resource_type - research_report_eval_topic - investment_priority_topic - states_counties - operational_guidance_type - applicant_resources_funding_op - applicant_resources_project_type - applicant_resources_type - grantee_resources_funding_op - grantee_resources_project_type - grantee_resources_resource_type - any default: any description: Limit results to items of one or more object subtypes. - name: type in: query required: false schema: type: string enum: - post - term - post-format default: post description: Limit results to items of an object type. responses: '200': description: Success. JSON body; collection routes also return `X-WP-Total` and `X-WP-TotalPages` headers. headers: X-WP-Total: description: Total number of records matching the query. schema: type: integer X-WP-TotalPages: description: Total number of pages available at the current `per_page`. schema: type: integer content: application/json: schema: {} '400': description: Bad request — an invalid parameter was supplied. Body is the WordPress REST error envelope. content: application/json: schema: $ref: '#/components/schemas/RestError' '401': description: Unauthorized — the route requires an authenticated WordPress user. content: application/json: schema: $ref: '#/components/schemas/RestError' '403': description: Forbidden — the capability is disabled for anonymous callers. content: application/json: schema: $ref: '#/components/schemas/RestError' '404': description: Not found — no resource exists with the supplied identifier. content: application/json: schema: $ref: '#/components/schemas/RestError' components: schemas: RestError: type: object description: WordPress REST API error envelope. Observed live on 2026-09-07 (for example `rest_comment_disabled`, `rest_forbidden`, `rest_user_cannot_view`). properties: code: type: string description: Machine-readable error slug, e.g. `rest_forbidden`. message: type: string description: Human-readable message. data: type: object properties: status: type: integer description: HTTP status code. required: - code - message