openapi: 3.2.0 info: title: ODNI Public Content API (WordPress REST) News API version: wp/v2 summary: The anonymous, read-only WordPress REST API serving www.odni.gov content — newsroom posts, site pages, and the ODNI publications/downloads catalog. description: The Office of the Director of National Intelligence publishes no developer program, no API documentation and no machine-readable specification of its own. contact: name: ODNI Public Affairs url: https://www.odni.gov/get-in-touch/ license: name: U.S. Government Work (17 U.S.C. Sec. 105) — see ODNI website policies url: https://www.odni.gov/policies/ x-provenance: method: derived source: https://www.odni.gov/?rest_route=/ derived: '2026-09-06' verbatim_source_file: openapi/director-of-national-intelligence-wp-routes-original.json note: Derived by API Evangelist from the live WordPress route discovery document served by www.odni.gov. Not authored, published or endorsed by ODNI. servers: - url: https://www.odni.gov/wp-json description: Canonical WordPress REST root. NOT CALLABLE as of 2026-09-06 — the Akamai edge answers 301 to https://www.odni.gov/ for /wp-json and every path beneath it. - url: https://www.odni.gov/?rest_route= description: Working prefix. WordPress's alternate query-string route form; concatenate the operation path directly after this URL (https://www.odni.gov/?rest_route=/wp/v2/posts). Verified 200 on 2026-09-06. security: - {} tags: - name: News description: ODNI newsroom posts — press releases, remarks, interviews and reports. paths: /wp/v2/posts: get: operationId: listPosts summary: List ODNI news posts description: Press releases, remarks, reports and interviews published to the ODNI newsroom. 156 records at the time of harvest; classified with the `categories` taxonomy (press-releases, remarks, reports, interviews). tags: - News security: - {} parameters: - name: after in: query description: Limit response to posts published after a given ISO8601 compliant date. required: false schema: type: string format: date-time - name: author in: query description: Limit result set to posts assigned to specific authors. required: false schema: type: array items: type: integer default: [] - name: author_exclude in: query description: Ensure result set excludes posts assigned to specific authors. required: false schema: type: array items: type: integer default: [] - name: before in: query description: Limit response to posts published before a given ISO8601 compliant date. required: false schema: type: string format: date-time - name: categories in: query description: Limit result set to items with specific terms assigned in the categories taxonomy. required: false schema: type: object - name: categories_exclude in: query description: Limit result set to items except those with specific terms assigned in the categories taxonomy. required: false schema: type: object - name: context in: query description: Scope under which the request is made; determines fields present in response. required: false schema: type: string enum: - view - embed - edit default: view - name: exclude in: query description: Ensure result set excludes specific IDs. required: false schema: type: array items: type: integer default: [] - name: format in: query description: Limit result set to items assigned one or more given formats. required: false schema: type: array items: type: string enum: - standard - aside - chat - gallery - link - image - quote - status - video - audio - name: ignore_sticky in: query description: Whether to ignore sticky posts or not. required: false schema: type: boolean default: true - name: include in: query description: Limit result set to specific IDs. required: false schema: type: array items: type: integer default: [] - name: modified_after in: query description: Limit response to posts modified after a given ISO8601 compliant date. required: false schema: type: string format: date-time - name: modified_before in: query description: Limit response to posts modified before a given ISO8601 compliant date. required: false schema: type: string format: date-time - name: offset in: query description: Offset the result set by a specific number of items. required: false schema: type: integer - name: order in: query description: Order sort attribute ascending or descending. required: false schema: type: string enum: - asc - desc default: desc - name: orderby in: query description: Sort collection by post attribute. required: false schema: type: string enum: - author - date - id - include - modified - parent - relevance - slug - include_slugs - title default: date - name: page in: query description: Current page of the collection. required: false schema: type: integer minimum: 1 default: 1 - name: per_page in: query description: Maximum number of items to be returned in result set. required: false schema: type: integer minimum: 1 maximum: 100 default: 10 - name: search in: query description: Limit results to those matching a string. required: false schema: type: string - name: search_columns in: query description: Array of column names to be searched. required: false schema: type: array items: type: string enum: - post_title - post_content - post_excerpt default: [] - name: search_semantics in: query description: How to interpret the search input. required: false schema: type: string enum: - exact - name: sticky in: query description: Limit result set to items that are sticky. required: false schema: type: boolean - name: tags in: query description: Limit result set to items with specific terms assigned in the tags taxonomy. required: false schema: type: object - name: tags_exclude in: query description: Limit result set to items except those with specific terms assigned in the tags taxonomy. required: false schema: type: object - name: tax_relation in: query description: Limit result set based on relationship between multiple taxonomies. required: false schema: type: string enum: - AND - OR responses: '200': description: Successful response. content: application/json: schema: $ref: '#/components/schemas/WPCollection' examples: saved: summary: Saved response captured 2026-09-06 externalValue: ../examples/director-of-national-intelligence-posts.json headers: X-WP-Total: description: Total number of matching records. schema: type: integer X-WP-TotalPages: description: Total number of pages available at the current per_page. schema: type: integer Link: description: RFC 8288 pagination links (rel="next" / rel="prev"). schema: type: string '400': description: Invalid parameter. WordPress returns `rest_invalid_param` with a `data.params` map naming the offending parameters. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No matching route or record (`rest_no_route`, `rest_post_invalid_id`, `rest_term_invalid`). content: application/json: schema: $ref: '#/components/schemas/WPError' x-verified: url: https://www.odni.gov/?rest_route=/wp/v2/posts&per_page=3 status: 200 date: '2026-09-06' /wp/v2/posts/{id}: get: operationId: getPost summary: Retrieve one ODNI news post description: Retrieve a single newsroom post by its WordPress id. tags: - News security: - {} parameters: - name: id in: path required: true description: WordPress post id. schema: type: integer responses: '200': description: Successful response. content: application/json: schema: $ref: '#/components/schemas/WPObject' '400': description: Invalid parameter. WordPress returns `rest_invalid_param` with a `data.params` map naming the offending parameters. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No matching route or record (`rest_no_route`, `rest_post_invalid_id`, `rest_term_invalid`). content: application/json: schema: $ref: '#/components/schemas/WPError' x-verified: url: https://www.odni.gov/?rest_route=/wp/v2/posts/14092 status: 200 date: '2026-09-06' components: schemas: WPError: type: object description: The WordPress REST error envelope. This API does NOT use RFC 9457 application/problem+json; errors are returned as application/json with this shape. required: - code - message - data properties: code: type: string description: Machine-readable error code, e.g. rest_invalid_param, rest_no_route, rest_post_invalid_id, rest_forbidden. message: type: string description: Human-readable message. data: type: object properties: status: type: integer description: The HTTP status, repeated in the body. params: type: object description: 'Present on rest_invalid_param: a map of offending parameter name to explanation.' details: type: object description: 'Present on rest_invalid_param: per-parameter code/message/data detail.' WPObject: type: object description: A single WordPress REST record. WPCollection: type: array description: A page of WordPress REST records. Page size is controlled by per_page (1-100, default 10) and page; the total count and page count are returned in the X-WP-Total and X-WP-TotalPages response headers. items: type: object