{
  "openapi": "3.1.0",
  "info": {
    "title": "Models API",
    "version": "1.0.0",
    "summary": "Rank and score of every model on about 30 public AI leaderboards, captured daily, plus a composite that names the leader of leaders",
    "description": "Rank and score of every model on about 30 public AI leaderboards, captured daily, plus a composite that names the leader of leaders. Captured every day at 04:30 UTC. Free to read; please cite \"Models (models.fru.dev)\" with a link. Responses are cached at the edge; keep to about 60 requests a minute. Guide: https://models.fru.dev/agents",
    "contact": {
      "name": "fru.dev",
      "url": "https://fru.dev",
      "email": "fru.dev3@gmail.com"
    }
  },
  "externalDocs": {
    "description": "For AI agents",
    "url": "https://models.fru.dev/agents"
  },
  "servers": [
    {
      "url": "https://models.fru.dev"
    }
  ],
  "paths": {
    "/api/leaders": {
      "get": {
        "operationId": "leader_of_leaders",
        "summary": "The composite ranking: every model that earns points on the fresh language-model boards",
        "description": "The composite ranking: every model that earns points on the fresh language-model boards. Returns models in rank order with podium score (0 to 100), #1 finishes, top-10 places and median rank.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 200",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 200
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Items to skip, for the next page",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "models in rank order with podium score (0 to 100), #1 finishes, top-10 places and median rank",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "capturedAt": "2026-09-25T10:50:07.172Z",
                  "boardsCounted": [
                    "lmarena-text",
                    "scale-multichallenge"
                  ],
                  "method": "https://models.fru.dev/method",
                  "items": [
                    {
                      "rank": 1,
                      "model": "claude-fable-5-1",
                      "name": "Claude Fable 5.1",
                      "vendor": "anthropic",
                      "vendorName": "Anthropic",
                      "openWeights": false,
                      "podiumScore": 57.3,
                      "points": 86,
                      "wins": 1,
                      "top10": 11,
                      "listed": 11,
                      "medianRank": 2,
                      "url": "https://models.fru.dev/models/claude-fable-5-1"
                    },
                    {
                      "rank": 2,
                      "model": "gpt-6-astra",
                      "name": "GPT-6 Astra",
                      "vendor": "openai",
                      "vendorName": "OpenAI",
                      "openWeights": false,
                      "podiumScore": 48,
                      "points": 72,
                      "wins": 4,
                      "top10": 8,
                      "listed": 11,
                      "medianRank": 3,
                      "url": "https://models.fru.dev/models/gpt-6-astra"
                    }
                  ],
                  "total": 59,
                  "limit": 3,
                  "offset": 0,
                  "next": "/api/leaders?limit=3&offset=3"
                }
              }
            }
          }
        }
      }
    },
    "/api/boards": {
      "get": {
        "operationId": "list_boards",
        "summary": "Every leaderboard tracked, with its current #1",
        "description": "Every leaderboard tracked, with its current #1. Returns boards with category, metric, status (fresh, stale, retired), publish date, entry count and the #1 model and score.",
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Only boards in this category",
            "schema": {
              "type": "string",
              "enum": [
                "chat",
                "reasoning",
                "coding",
                "agents",
                "vision",
                "image",
                "video",
                "speech",
                "embeddings",
                "speed",
                "price",
                "usage"
              ]
            },
            "example": "coding"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 200",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 200
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Items to skip, for the next page",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "boards with category, metric, status (fresh, stale, retired), publish date, entry count and the #1 model and score",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "capturedAt": "2026-09-25T10:50:07.172Z",
                  "items": [
                    {
                      "id": "lmarena-webdev",
                      "name": "LMArena WebDev Arena",
                      "org": "LMArena",
                      "category": "coding",
                      "metric": "Arena rating",
                      "unit": "elo",
                      "higherIsBetter": true,
                      "status": "fresh",
                      "publishedOn": "2026-09-23",
                      "capturedAt": "2026-09-25 05:22:13",
                      "entries": 100,
                      "countsTowardComposite": true,
                      "leader": {
                        "model": "claude-opus-5-5",
                        "name": "Claude Opus 5.5",
                        "publishedAs": "claude-opus-5.5-max",
                        "score": 1818.4080843495265,
                        "verified": true
                      },
                      "source": "https://arena.ai/leaderboard/code"
                    },
                    {
                      "id": "scale-swe-pro",
                      "name": "SWE-Bench Pro",
                      "org": "Scale AI",
                      "category": "coding",
                      "metric": "Resolved",
                      "unit": "%",
                      "higherIsBetter": true,
                      "status": "fresh",
                      "publishedOn": "2026-09-25",
                      "capturedAt": "2026-09-25 05:22:14",
                      "entries": 11,
                      "countsTowardComposite": true,
                      "leader": {
                        "model": "claude-opus-5",
                        "name": "Claude Opus 5",
                        "publishedAs": "Opus 5 (Claude Code) xhigh",
                        "score": 98,
                        "verified": true
                      },
                      "source": "https://labs.scale.com/leaderboard/swe_bench_pro_public_v2"
                    }
                  ],
                  "total": 4,
                  "limit": 2,
                  "offset": 0,
                  "next": "/api/boards?category=coding&limit=2&offset=2"
                }
              }
            }
          }
        }
      }
    },
    "/api/boards/{id}": {
      "get": {
        "operationId": "board_ranking",
        "summary": "One board: the full ranking as published, best variant per model",
        "description": "One board: the full ranking as published, best variant per model. Returns the board and up to 100 entries with rank, model, name as published, score and verified flag.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Board id from /api/boards, e.g. lmarena-text",
            "schema": {
              "type": "string"
            },
            "example": "lmarena-text"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Entries, 1 to 100",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "the board and up to 100 entries with rank, model, name as published, score and verified flag",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "board": {
                    "id": "lmarena-text",
                    "name": "LMArena Text Arena",
                    "org": "LMArena",
                    "category": "chat",
                    "measures": "Blind pairwise votes from millions of people chatting with two anonymous models. Style control on.",
                    "metric": "Arena rating",
                    "unit": "elo",
                    "higherIsBetter": true,
                    "status": "fresh",
                    "publishedOn": "2026-09-13",
                    "capturedAt": "2026-09-25 05:22:12",
                    "entries": 100,
                    "source": "https://arena.ai/leaderboard/text",
                    "url": "https://models.fru.dev/boards/lmarena-text"
                  },
                  "ranking": [
                    {
                      "rank": 1,
                      "model": "claude-fable-5",
                      "name": "Claude Fable 5",
                      "vendor": "anthropic",
                      "publishedAs": "claude-fable-5-high",
                      "score": 1505.682718082738,
                      "verified": true,
                      "capturedOn": "2026-09-25"
                    },
                    {
                      "rank": 2,
                      "model": "claude-opus-4-6",
                      "name": "Claude Opus 4.6",
                      "vendor": "anthropic",
                      "publishedAs": "claude-opus-4-6-high",
                      "score": 1504.559637415755,
                      "verified": true,
                      "capturedOn": "2026-09-25"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    },
    "/api/models/{id}": {
      "get": {
        "operationId": "model_ranks",
        "summary": "One model: its rank and score on every board that lists it",
        "description": "One model: its rank and score on every board that lists it. Returns the model (name, vendor, open weights, release date), its composite standing and one row per board.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Model id, from /api/leaders or /api/search",
            "schema": {
              "type": "string"
            },
            "example": "gpt-6-astra"
          }
        ],
        "responses": {
          "200": {
            "description": "the model (name, vendor, open weights, release date), its composite standing and one row per board",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "model": {
                    "id": "gpt-6-astra",
                    "name": "GPT-6 Astra",
                    "vendor": "openai",
                    "vendorName": "OpenAI",
                    "openWeights": false,
                    "releaseDate": "2026-09-02",
                    "url": "https://models.fru.dev/models/gpt-6-astra"
                  },
                  "standing": {
                    "rank": 2,
                    "podiumScore": 48,
                    "wins": 4,
                    "top10": 8,
                    "listed": 11,
                    "medianRank": 3
                  },
                  "boards": [
                    {
                      "board": "scale-hle",
                      "name": "Humanity's Last Exam",
                      "category": "reasoning",
                      "rank": 1,
                      "of": 42,
                      "score": 54.8,
                      "unit": "%",
                      "publishedAs": "GPT 6 Astra",
                      "verified": true,
                      "status": "fresh",
                      "capturedOn": "2026-09-25"
                    },
                    {
                      "board": "epoch-gpqa",
                      "name": "GPQA Diamond (Epoch AI runs)",
                      "category": "reasoning",
                      "rank": 1,
                      "of": 100,
                      "score": 95.77020202020202,
                      "unit": "%",
                      "publishedAs": "gpt-6-astra_max",
                      "verified": true,
                      "status": "fresh",
                      "capturedOn": "2026-09-25"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    },
    "/api/compare": {
      "get": {
        "operationId": "compare",
        "summary": "Compare two to four models, vendors, or open against closed weights on every board where one is ranked",
        "description": "Compare two to four models, vendors, or open against closed weights on every board where one is ranked. Returns the sides with boards ranked and boards placed best, then one row per board (current capture) with each side's rank, score and model, and which side placed best.",
        "parameters": [
          {
            "name": "models",
            "in": "query",
            "required": false,
            "description": "Two to four model ids, comma separated (from /api/leaders or /api/search)",
            "schema": {
              "type": "string"
            },
            "example": "gpt-6-astra,claude-fable-5-1"
          },
          {
            "name": "vendors",
            "in": "query",
            "required": false,
            "description": "Or two to four vendor slugs, comma separated; each cell is that vendor's best-ranked model on the board",
            "schema": {
              "type": "string"
            },
            "example": "openai,anthropic"
          },
          {
            "name": "weights",
            "in": "query",
            "required": false,
            "description": "Or open,closed: the best open-weight model on each board against the best closed one",
            "schema": {
              "type": "string",
              "enum": [
                "open,closed"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "the sides with boards ranked and boards placed best, then one row per board (current capture) with each side's rank, score and model, and which side placed best",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "capturedAt": "2026-09-25T10:50:07.172Z",
                  "mode": "vendors",
                  "url": "https://models.fru.dev/compare?vendors=openai,anthropic",
                  "note": "Current capture of each board. rank is the board's own order (1 is best); in vendors and weights mode each cell is that side's best-ranke...",
                  "sides": [
                    {
                      "key": "openai",
                      "name": "OpenAI",
                      "vendor": "openai",
                      "vendorName": "OpenAI",
                      "openWeights": null,
                      "boardsRanked": 26,
                      "boardsBest": 11,
                      "url": "https://models.fru.dev/vendors/openai"
                    },
                    {
                      "key": "anthropic",
                      "name": "Anthropic",
                      "vendor": "anthropic",
                      "vendorName": "Anthropic",
                      "openWeights": null,
                      "boardsRanked": 21,
                      "boardsBest": 10,
                      "url": "https://models.fru.dev/vendors/anthropic"
                    }
                  ],
                  "headToHead": 21,
                  "allRanked": 21,
                  "boards": [
                    {
                      "board": "lmarena-text",
                      "name": "LMArena Text Arena",
                      "category": "chat",
                      "metric": "Arena rating",
                      "unit": "elo",
                      "higherIsBetter": true,
                      "status": "fresh",
                      "publishedOn": "2026-09-13",
                      "capturedAt": "2026-09-25 05:22:12",
                      "url": "https://models.fru.dev/boards/lmarena-text",
                      "best": [
                        "anthropic"
                      ],
                      "cells": {
                        "openai": {
                          "rank": 15,
                          "score": 1483.474347288669,
                          "model": "gpt-5-6-sol",
                          "name": "GPT-5.6 Sol",
                          "publishedAs": "gpt-5.6-sol-xhigh",
                          "modelUrl": "https://models.fru.dev/models/gpt-5-6-sol"
                        },
                        "anthropic": {
                          "rank": 1,
                          "score": 1505.682718082738,
                          "model": "claude-fable-5",
                          "name": "Claude Fable 5",
                          "publishedAs": "claude-fable-5-high",
                          "modelUrl": "https://models.fru.dev/models/claude-fable-5"
                        }
                      }
                    },
                    {
                      "board": "scale-multichallenge",
                      "name": "Scale SEAL MultiChallenge",
                      "category": "chat",
                      "metric": "Score",
                      "unit": "%",
                      "higherIsBetter": true,
                      "status": "fresh",
                      "publishedOn": "2026-09-25",
                      "capturedAt": "2026-09-25 05:22:14",
                      "url": "https://models.fru.dev/boards/scale-multichallenge",
                      "best": [
                        "openai"
                      ],
                      "cells": {
                        "openai": {
                          "rank": 4,
                          "score": 69.23,
                          "model": "gpt-5-4-pro",
                          "name": "GPT-5.4 Pro",
                          "publishedAs": "gpt-5.4-pro-2026-03-05",
                          "modelUrl": "https://models.fru.dev/models/gpt-5-4-pro"
                        },
                        "anthropic": {
                          "rank": 12,
                          "score": 58.97,
                          "model": "claude-opus-4-5",
                          "name": "Claude Opus 4.5",
                          "publishedAs": "claude-opus-4-5-20251101-thinking",
                          "modelUrl": "https://models.fru.dev/models/claude-opus-4-5"
                        }
                      }
                    }
                  ],
                  "dropped": []
                }
              }
            }
          }
        }
      }
    },
    "/api/changes": {
      "get": {
        "operationId": "list_changes",
        "summary": "Every rank change, newest first (append-only history)",
        "description": "Every rank change, newest first (append-only history). Returns changes with board, model, kind (entered, moved, rescored, extra = votes/CI/cost per task changed at the same rank with extra_json, left, corrected, board_updated, model_*), old and new rank and score, and the day.",
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only changes on or after this date (YYYY-MM-DD) or datetime",
            "schema": {
              "type": "string"
            },
            "example": "2026-09-01"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 200",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 200
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Items to skip, for the next page",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "changes with board, model, kind (entered, moved, rescored, extra = votes/CI/cost per task changed at the same rank with extra_json, left, corrected, board_updated, model_*), old and new rank and score, and the day",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "since": "",
                  "note": "Append-only: rows are only ever added. Times are UTC.",
                  "items": [
                    {
                      "at": "2026-09-25 05:22:15",
                      "day": "2026-09-25",
                      "board": "openrouter-usage",
                      "boardName": "OpenRouter weekly usage",
                      "model": "",
                      "modelName": "",
                      "kind": "board_updated",
                      "oldRank": null,
                      "newRank": null,
                      "oldScore": null,
                      "newScore": null,
                      "note": "2026-09-23 to 2026-09-24",
                      "modelUrl": "",
                      "boardUrl": "https://models.fru.dev/boards/openrouter-usage"
                    },
                    {
                      "at": "2026-09-25 05:22:15",
                      "day": "2026-09-25",
                      "board": "openrouter-usage",
                      "boardName": "OpenRouter weekly usage",
                      "model": "kimi-k3",
                      "modelName": "Kimi K3",
                      "kind": "left",
                      "oldRank": 18,
                      "newRank": null,
                      "oldScore": 1416.82,
                      "newScore": null,
                      "note": "",
                      "modelUrl": "https://models.fru.dev/models/kimi-k3",
                      "boardUrl": "https://models.fru.dev/boards/openrouter-usage"
                    }
                  ],
                  "total": 673,
                  "limit": 3,
                  "offset": 0,
                  "next": "/api/changes?limit=3&offset=3"
                }
              }
            }
          }
        }
      }
    },
    "/api/search": {
      "get": {
        "operationId": "search",
        "summary": "Search models, boards, labs and pages",
        "description": "Search models, boards, labs and pages. Returns up to 20 ranked results with title, link and one line.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "A model, board or lab name",
            "schema": {
              "type": "string"
            },
            "example": "claude"
          }
        ],
        "responses": {
          "200": {
            "description": "up to 20 ranked results with title, link and one line",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "q": "claude",
                  "results": [
                    {
                      "id": "m:claude-opus-5",
                      "group": "items",
                      "title": "Claude Opus 5",
                      "subtitle": "Anthropic · #3 overall · 10 boards",
                      "href": "/models/claude-opus-5",
                      "keywords": [
                        "claude opus 5"
                      ],
                      "logo": "https://models.fru.dev/api/logo?domain=anthropic.com&size=64",
                      "boost": 27,
                      "score": 845
                    },
                    {
                      "id": "m:claude-fable-5-1",
                      "group": "items",
                      "title": "Claude Fable 5.1",
                      "subtitle": "Anthropic · #1 overall · 13 boards",
                      "href": "/models/claude-fable-5-1",
                      "keywords": [
                        "claude fable 5 1"
                      ],
                      "logo": "https://models.fru.dev/api/logo?domain=anthropic.com&size=64",
                      "boost": 29,
                      "score": 844
                    }
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
}