{
  "openapi": "3.1.0",
  "info": {
    "title": "ArtificialWatch open data",
    "version": "1.0.0",
    "summary": "AI model releases, first-party LLM API prices and leaderboard indexes as static JSON, CSV and iCalendar files.",
    "description": "Read-only, keyless, CORS-open files at stable URLs: the AI model release log (dated by the day each model went live on a public API), each live model's list price on its maker's own API, the composite Bench and Coding indexes across public leaderboards, and first-seen versus announcement times. Files refresh with the site (about every 4 hours). Licence CC BY 4.0: credit ArtificialWatch with a link to the page named in each file's `url`. Each board's raw scores belong to that board.",
    "license": {
      "name": "CC BY 4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/"
    },
    "contact": {
      "name": "ArtificialWatch",
      "url": "https://artificialwatch.com/data"
    }
  },
  "externalDocs": {
    "description": "The open data page",
    "url": "https://artificialwatch.com/data"
  },
  "servers": [
    {
      "url": "https://artificialwatch.com"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "releases",
      "description": "The AI model release log"
    },
    {
      "name": "prices",
      "description": "First-party LLM API list prices"
    },
    {
      "name": "leaderboards",
      "description": "Composite indexes across public leaderboards"
    }
  ],
  "paths": {
    "/data/releases.json": {
      "get": {
        "operationId": "getReleases",
        "summary": "AI model release log",
        "description": "Every model ArtificialWatch has seen go live on a public API, newest first. live_since is the day it was verified live, not the day it was announced.",
        "tags": [
          "releases"
        ],
        "responses": {
          "200": {
            "description": "The release log",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Releases"
                }
              }
            }
          }
        }
      }
    },
    "/data/releases.csv": {
      "get": {
        "operationId": "getReleasesCsv",
        "summary": "AI model release log (CSV)",
        "description": "The release log as CSV: id, name, lab, live_since, frontier, preview_only, page.",
        "tags": [
          "releases"
        ],
        "responses": {
          "200": {
            "description": "CSV with a header row",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/data/releases.ics": {
      "get": {
        "operationId": "getReleasesCalendar",
        "summary": "AI model release calendar",
        "description": "The release log as an RFC 5545 calendar: one all-day event per release on the day it went live. Subscribe with webcal://artificialwatch.com/data/releases.ics.",
        "tags": [
          "releases"
        ],
        "responses": {
          "200": {
            "description": "iCalendar",
            "content": {
              "text/calendar": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/data/llm-prices.json": {
      "get": {
        "operationId": "getLlmPrices",
        "summary": "LLM API list prices (first-party)",
        "description": "Each live model's list price on its maker's own API, in US dollars per million tokens, with cached-input and long-prompt rates where the maker publishes them.",
        "tags": [
          "prices"
        ],
        "responses": {
          "200": {
            "description": "The price table",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Prices"
                }
              }
            }
          }
        }
      }
    },
    "/data/llm-prices.csv": {
      "get": {
        "operationId": "getLlmPricesCsv",
        "summary": "LLM API list prices (CSV)",
        "description": "The price table as CSV, one row per model.",
        "tags": [
          "prices"
        ],
        "responses": {
          "200": {
            "description": "CSV with a header row",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/data/bench-index.json": {
      "get": {
        "operationId": "getBenchIndex",
        "summary": "Bench Index",
        "description": "AI models ranked across the public LLM leaderboards: each board's raw score, the model's percentile on that board, and the composite index (median of percentiles).",
        "tags": [
          "leaderboards"
        ],
        "responses": {
          "200": {
            "description": "The Bench Index",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Index"
                }
              }
            }
          },
          "503": {
            "description": "The table is rebuilding; retry shortly"
          }
        }
      }
    },
    "/data/bench-index.csv": {
      "get": {
        "operationId": "getBenchIndexCsv",
        "summary": "Bench Index (CSV)",
        "description": "The Bench Index as CSV: rank, id, name, vendor, index, boards, then <board>_raw and <board>_percentile per board.",
        "tags": [
          "leaderboards"
        ],
        "responses": {
          "200": {
            "description": "CSV with a header row",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "The table is rebuilding; retry shortly"
          }
        }
      }
    },
    "/data/coding-index.json": {
      "get": {
        "operationId": "getCodingIndex",
        "summary": "Coding Index",
        "description": "The same composite across the public coding leaderboards.",
        "tags": [
          "leaderboards"
        ],
        "responses": {
          "200": {
            "description": "The Coding Index",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Index"
                }
              }
            }
          },
          "503": {
            "description": "The table is rebuilding; retry shortly"
          }
        }
      }
    },
    "/data/coding-index.csv": {
      "get": {
        "operationId": "getCodingIndexCsv",
        "summary": "Coding Index (CSV)",
        "description": "The Coding Index as CSV, in the Bench Index layout.",
        "tags": [
          "leaderboards"
        ],
        "responses": {
          "200": {
            "description": "CSV with a header row",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "The table is rebuilding; retry shortly"
          }
        }
      }
    },
    "/data/lead-time.json": {
      "get": {
        "operationId": "getLeadTime",
        "summary": "First seen versus announced",
        "description": "For each verified launch: when ArtificialWatch first saw the model live on an API or public catalog, and when the lab first announced it. lead_minutes is positive when the model was live before the announcement.",
        "tags": [
          "releases"
        ],
        "responses": {
          "200": {
            "description": "The lead-time table",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadTime"
                }
              }
            }
          }
        }
      }
    },
    "/data/lead-time.csv": {
      "get": {
        "operationId": "getLeadTimeCsv",
        "summary": "First seen versus announced (CSV)",
        "description": "The lead-time table as CSV.",
        "tags": [
          "releases"
        ],
        "responses": {
          "200": {
            "description": "CSV with a header row",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Release": {
        "type": "object",
        "required": [
          "id",
          "name",
          "lab",
          "live_since",
          "frontier",
          "preview_only",
          "page"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "lab": {
            "type": "string"
          },
          "live_since": {
            "type": "string",
            "format": "date"
          },
          "frontier": {
            "type": "boolean"
          },
          "preview_only": {
            "type": "boolean"
          },
          "page": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Releases": {
        "type": "object",
        "required": [
          "name",
          "url",
          "license",
          "generated",
          "count",
          "releases"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "license": {
            "type": "string",
            "format": "uri"
          },
          "attribution": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "generated": {
            "type": "string",
            "format": "date"
          },
          "count": {
            "type": "integer"
          },
          "releases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Release"
            }
          }
        }
      },
      "Price": {
        "type": "object",
        "required": [
          "id",
          "name",
          "lab",
          "provider",
          "model_id",
          "input",
          "output",
          "page"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "lab": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "model_id": {
            "type": "string",
            "description": "The maker's own API model id"
          },
          "input": {
            "type": "number",
            "description": "USD per 1M input tokens"
          },
          "output": {
            "type": "number",
            "description": "USD per 1M output tokens"
          },
          "cached_input": {
            "type": [
              "number",
              "null"
            ],
            "description": "USD per 1M cached input tokens"
          },
          "long_prompt": {
            "type": [
              "object",
              "null"
            ],
            "description": "The higher rate once a prompt passes over_tokens",
            "properties": {
              "over_tokens": {
                "type": "integer"
              },
              "input": {
                "type": "number"
              },
              "output": {
                "type": "number"
              }
            }
          },
          "context": {
            "type": [
              "integer",
              "null"
            ]
          },
          "max_output": {
            "type": [
              "integer",
              "null"
            ]
          },
          "bench_index": {
            "type": [
              "number",
              "null"
            ]
          },
          "page": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Prices": {
        "type": "object",
        "required": [
          "name",
          "url",
          "license",
          "as_of",
          "count",
          "models"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "license": {
            "type": "string",
            "format": "uri"
          },
          "attribution": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "source": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "as_of": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "models": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Price"
            }
          }
        }
      },
      "Index": {
        "type": "object",
        "required": [
          "name",
          "url",
          "license",
          "sources",
          "models"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "license": {
            "type": "string",
            "format": "uri"
          },
          "attribution": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "generatedAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "name",
                "url"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "scale": {
                  "type": "string"
                },
                "asOf": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "models": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "rank",
                "id",
                "name",
                "vendor",
                "index",
                "boards",
                "scores",
                "page"
              ],
              "properties": {
                "rank": {
                  "type": "integer"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "vendor": {
                  "type": "string"
                },
                "index": {
                  "type": "number"
                },
                "boards": {
                  "type": "integer"
                },
                "scores": {
                  "type": "object",
                  "description": "Keyed by source id; null where the board does not rate the model",
                  "additionalProperties": {
                    "type": [
                      "object",
                      "null"
                    ],
                    "properties": {
                      "raw": {
                        "type": "number"
                      },
                      "percentile": {
                        "type": "number"
                      }
                    }
                  }
                },
                "page": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "LeadTime": {
        "type": "object",
        "required": [
          "name",
          "url",
          "license",
          "launches"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "license": {
            "type": "string",
            "format": "uri"
          },
          "attribution": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "temporalCoverage": {
            "type": "string"
          },
          "counted": {
            "type": "integer"
          },
          "liveBeforeAnnouncement": {
            "type": "integer"
          },
          "launches": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "model",
                "lab",
                "first_seen",
                "announced",
                "outcome"
              ],
              "properties": {
                "model": {
                  "type": "string"
                },
                "lab": {
                  "type": "string"
                },
                "first_seen": {
                  "type": "string",
                  "format": "date-time"
                },
                "announced": {
                  "type": "string",
                  "format": "date-time"
                },
                "lead_minutes": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "outcome": {
                  "type": "string"
                },
                "announcement_source": {
                  "type": "string"
                },
                "announcement_url": {
                  "type": "string",
                  "format": "uri"
                },
                "note": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
}