{
  "openapi": "3.1.0",
  "info": {
    "title": "Changelogs.us Developer API",
    "version": "1.0.0",
    "description": "Public, high-performance REST endpoints for querying software release intelligence, breaking changes, security patches, and velocity radar metrics across 52 open-source ecosystems.",
    "contact": {
      "name": "Changelogs.us API Support",
      "url": "https://changelogs.us/about/"
    }
  },
  "servers": [
    {
      "url": "https://changelogs.us",
      "description": "Production API Server"
    }
  ],
  "paths": {
    "/api/releases": {
      "get": {
        "summary": "Query Latest Software Releases",
        "description": "Retrieve chronological release logs with optional filtering by tool, breaking status, and channel.",
        "parameters": [
          {
            "name": "tools",
            "in": "query",
            "description": "Comma-separated tool slugs (e.g., 'supabase,nextjs,prisma')",
            "required": false,
            "schema": {
              "type": "string",
              "example": "supabase,nextjs"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of releases to return (default: 20, max: 50)",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 20,
              "maximum": 50
            }
          },
          {
            "name": "breaking",
            "in": "query",
            "description": "Filter strictly by breaking changes (1 = breaking only)",
            "required": false,
            "schema": {
              "type": "integer",
              "enum": [
                0,
                1
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of releases returned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "tool": {
                            "type": "string"
                          },
                          "version": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          },
                          "summary": {
                            "type": "string"
                          },
                          "breaking": {
                            "type": "boolean"
                          },
                          "impact": {
                            "type": "integer"
                          },
                          "url": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/tools": {
      "get": {
        "summary": "List Tracked Open-Source Tools",
        "description": "Returns metadata for all 52 tracked tools, including category, website, and repository identifiers.",
        "responses": {
          "200": {
            "description": "Array of tool metadata objects"
          }
        }
      }
    },
    "/{tool}/context.txt": {
      "get": {
        "summary": "AI & LLM Plaintext Context Corpus",
        "description": "Plaintext markdown formatted specifically for LLM context windows (Cursor, Claude, ChatGPT, Copilot) containing latest releases and breaking changes.",
        "parameters": [
          {
            "name": "tool",
            "in": "path",
            "required": true,
            "description": "Tool slug (e.g. 'supabase')",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Plaintext corpus",
            "content": {
              "text/plain": {}
            }
          }
        }
      }
    }
  }
}