{
  "openapi": "3.1.0",
  "info": {
    "title": "Cancel Atlas open data",
    "version": "1.1",
    "summary": "The Cancellation Friction Index as published JSON.",
    "description": "A read-only published dataset, not a query API. Every path is a GET of a static JSON file: no parameters, no authentication, no rate limits, no mutations. Download companies.json once and query it locally.\n\nMethodology version CES-1.1, 2075 companies, generated 2026-06-04.\n\nEvery published grade recomputes from the weights inside companies.json. A notebook that does exactly that is at https://www.cancelatlas.com/methodology, and the build refuses to publish if it stops reproducing.",
    "license": {
      "name": "CC BY-SA 4.0",
      "url": "https://creativecommons.org/licenses/by-sa/4.0/"
    },
    "contact": {
      "name": "Cancel Atlas",
      "url": "https://www.cancelatlas.com/contact"
    }
  },
  "servers": [
    {
      "url": "https://www.cancelatlas.com"
    }
  ],
  "externalDocs": {
    "description": "Reproduce every grade",
    "url": "https://www.cancelatlas.com/methodology"
  },
  "paths": {
    "/api/v1/assistant-index.json": {
      "get": {
        "summary": "assistant-index.json",
        "description": "Compact index for assistants and in-page search.",
        "operationId": "get_assistant_index",
        "responses": {
          "200": {
            "description": "The file. Served static from a CDN, CORS-open.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/v1/companies.json": {
      "get": {
        "summary": "companies.json",
        "description": "Every graded company, with per-dimension sub-scores, the published weights, the score formula and the grade bands. This one file is enough to recompute every grade independently.",
        "operationId": "get_companies",
        "responses": {
          "200": {
            "description": "The file. Served static from a CDN, CORS-open.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/v1/index.json": {
      "get": {
        "summary": "index.json",
        "description": "Version, generated date, counts, licence and the list of endpoints.",
        "operationId": "get_index",
        "responses": {
          "200": {
            "description": "The file. Served static from a CDN, CORS-open.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/v1/insights.json": {
      "get": {
        "summary": "insights.json",
        "description": "Aggregate analytics: grade distribution, dimension means, industry and jurisdiction rollups.",
        "operationId": "get_insights",
        "responses": {
          "200": {
            "description": "The file. Served static from a CDN, CORS-open.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/v1/leaderboard.json": {
      "get": {
        "summary": "leaderboard.json",
        "description": "Companies ranked against published revenue figures.",
        "operationId": "get_leaderboard",
        "responses": {
          "200": {
            "description": "The file. Served static from a CDN, CORS-open.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/v1/no-policy.json": {
      "get": {
        "summary": "no-policy.json",
        "description": "Companies with no published cancellation page. An absence, recorded as a finding.",
        "operationId": "get_no_policy",
        "responses": {
          "200": {
            "description": "The file. Served static from a CDN, CORS-open.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/v1/provenance.json": {
      "get": {
        "summary": "provenance.json",
        "description": "What every grade rests on: per-record evidence tier, the date it was checked, its age in days, and whether that is still within the published freshness policy. Report-only today: no page is withheld on a breach.",
        "operationId": "get_provenance",
        "responses": {
          "200": {
            "description": "The file. Served static from a CDN, CORS-open.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/v1/schema.json": {
      "get": {
        "summary": "schema.json",
        "description": "JSON Schema for a single company record.",
        "operationId": "get_schema",
        "responses": {
          "200": {
            "description": "The file. Served static from a CDN, CORS-open.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/v1/signals.json": {
      "get": {
        "summary": "signals.json",
        "description": "Extracted source-tier signals behind the grades.",
        "operationId": "get_signals",
        "responses": {
          "200": {
            "description": "The file. Served static from a CDN, CORS-open.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/v1/trends.json": {
      "get": {
        "summary": "trends.json",
        "description": "Score history: most improved and regressed, per-company series, freshness rollup.",
        "operationId": "get_trends",
        "responses": {
          "200": {
            "description": "The file. Served static from a CDN, CORS-open.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    }
  },
  "x-mcp": {
    "endpoint": "https://cancel-atlas-mcp.cancelatlas.workers.dev/mcp",
    "discovery": "https://www.cancelatlas.com/.well-known/mcp.json",
    "transport": "streamable-http",
    "auth": "none (read-only over already-public data)"
  },
  "x-llms-txt": "https://www.cancelatlas.com/llms.txt"
}
