TEGNA · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the TEGNA Content API

7 actions 7 updates documentation extends openapi/tegna-content-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for TEGNA's API. It is a proposal applied on top of the contract, not a document TEGNA publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-tegna-custom-typedescriptioncontactlicensex-api-evangelistx-runtime-semanticsx-anonymous-readx-observed

Targets 6

$.info
$.servers
$.components.securitySchemes.applicationPassword
$.paths['/wp/v2/posts'].get
$.paths['/wp/v2/leadership-team'].get
$.paths['/wp/v2/board-of-director'].get

OpenAPI Overlay

tegna-content-api-overlay.yaml Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the TEGNA Content API
  version: 1.0.0
x-provenance:
  generated: '2026-08-13'
  method: generated
  source: openapi/tegna-content-api-openapi.yml
  note: >-
    Captures API Evangelist's enhancements as an Overlay so the derived specification is never
    mutated in place. Every fact asserted below was observed on a live response from
    https://www.tegna.com/wp-json/ on 2026-08-13.
extends: openapi/tegna-content-api-openapi.yml
actions:
  - target: $.info
    update:
      contact:
        name: TEGNA
        url: https://www.tegna.com/contact/
      license:
        name: Proprietary
        url: https://www.tegna.com/terms-of-service/
      x-api-evangelist:
        surface: content
        provider_published_spec: false
        note: >-
          TEGNA publishes no OpenAPI. This document is derived from the WordPress REST route
          index the provider serves at https://www.tegna.com/wp-json/.
  - target: $.info
    update:
      x-runtime-semantics:
        idempotency: false
        rate_limit_headers: []
        pagination:
          style: page-number
          params: [page, per_page, offset]
          headers: [X-WP-Total, X-WP-TotalPages, Link]
          per_page_max: 100
          per_page_over_max: 400 rest_invalid_param — rejected, not clamped
        sparse_fieldsets: {param: _fields, verified: true}
        embedding: {param: _embed, verified: true}
        error_envelope: {code: string, message: string, data: {status: integer}}
        rfc9457: false
        edge_cache: "cache-control: max-age=600, must-revalidate (Cloudflare + WP Engine)"
        request_id: none — only Cloudflare's cf-ray is returned
  - target: $.servers
    update:
      - url: https://www.tegna.com/wp-json
        description: >-
          Live WordPress REST API. Verified reachable 2026-08-13; 12 sampled routes returned
          200 or 401, none returned 404.
  - target: $.components.securitySchemes.applicationPassword
    update:
      x-anonymous-read: >-
        Public content routes (posts, pages, media, categories, tags, users, taxonomies, search)
        return 200 with no credential. Privileged routes (menus, font-collections, icons,
        aioseo/v1/*, wp-abilities/v1) return 401.
  - target: $.paths['/wp/v2/posts'].get
    update:
      x-observed:
        total_records: 1608
        observed_on: '2026-08-13'
        headers: {x-wp-total: 1608, x-wp-totalpages: 804}
  - target: $.paths['/wp/v2/leadership-team'].get
    update:
      x-tegna-custom-type: true
      description: >-
        TEGNA-specific custom post type carrying executive leadership profiles, with an `acf`
        (Advanced Custom Fields) block alongside the standard post shape. Public, populated.
  - target: $.paths['/wp/v2/board-of-director'].get
    update:
      x-tegna-custom-type: true
      description: >-
        TEGNA-specific custom post type for board profiles. Route is public and returns 200 with
        an empty array — registered but unpopulated for anonymous callers.