{
  "openapi": "3.1.0",
  "info": {
    "title": "GG Verified Presidential Records API",
    "version": "v1",
    "description": "Read-only endpoints for verified presidential quote cards, CMS feeds, embeds and source lineage."
  },
  "servers": [
    {
      "url": "https://gg.qdev.run"
    }
  ],
  "paths": {
    "/api/v1/quotes.json": {
      "get": {
        "summary": "List all published quote records",
        "responses": {
          "200": {
            "description": "Record collection"
          }
        }
      }
    },
    "/api/v1/records/{id}.json": {
      "get": {
        "summary": "Fetch one CMS-ready quote record",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "One CMS-ready record"
          }
        }
      }
    },
    "/embed/{id}.html": {
      "get": {
        "summary": "Fetch a portable HTML embed block",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "HTML embed"
          }
        }
      }
    },
    "/api/v1/changes.json": {
      "get": {
        "summary": "List publication events",
        "responses": {
          "200": {
            "description": "Change feed"
          }
        }
      }
    },
    "/api/v1/channels.json": {
      "get": {
        "summary": "List topical channel feeds",
        "responses": {
          "200": {
            "description": "Channel index"
          }
        }
      }
    },
    "/api/v1/source-lineage.json": {
      "get": {
        "summary": "Describe source provider, filters and publication invariants",
        "responses": {
          "200": {
            "description": "Source lineage"
          }
        }
      }
    },
    "/feeds/cms/latest.json": {
      "get": {
        "summary": "CMS-ready full feed",
        "responses": {
          "200": {
            "description": "CMS feed"
          }
        }
      }
    },
    "/feeds/cms/latest.ndjson": {
      "get": {
        "summary": "Line-delimited CMS feed",
        "responses": {
          "200": {
            "description": "NDJSON feed"
          }
        }
      }
    },
    "/feeds/cms/latest.md": {
      "get": {
        "summary": "Markdown editorial pack",
        "responses": {
          "200": {
            "description": "Markdown feed"
          }
        }
      }
    }
  }
}
