> ## Documentation Index
> Fetch the complete documentation index at: https://docs.llm-stats.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> Programmatic access to benchmark scores, model rankings, pricing, and metadata across every model we track.

The LLM Stats API gives you direct, read-only access to the same dataset that powers [llm-stats.com](https://llm-stats.com) — every model, every benchmark score, every pricing change.

## Base URL

```
https://api.llm-stats.com/stats/v1
```

## Authentication

Send your API key as a Bearer token on every request.

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
Authorization: Bearer YOUR_API_KEY
```

Request access and create keys from the [developer console](https://llm-stats.com/developer).

<Tip>
  Keys starting with `ze_` are LLM Stats keys. The same key works for both the
  Stats API and the Gateway API.
</Tip>

## Endpoints at a glance

| Method | Path              | Description                                         |
| ------ | ----------------- | --------------------------------------------------- |
| GET    | `/v1/models`      | Catalog with metadata, pricing, and category scores |
| GET    | `/v1/models/{id}` | Full model detail with every benchmark score        |
| GET    | `/v1/benchmarks`  | All benchmarks with categories and model counts     |
| GET    | `/v1/scores`      | Score matrix — filter across models and benchmarks  |
| GET    | `/v1/rankings`    | TrueSkill rankings by category                      |
| GET    | `/v1/updates`     | Recently added models (1–30 day lookback)           |

See the [Endpoints](/api-reference) section for full request and response schemas.

## Discovering gateway-routable models

Every model returned by `/v1/models` and `/v1/models/{id}` carries an
`inference` block that tells you whether the model can be invoked
through the [LLM Stats gateway](/gateway/introduction) and the
canonical id to pass as `model`:

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "id": "gpt-5-2025-08-07",
  "inference": {
    "available": true,
    "endpoint": "https://gateway.llm-stats.com/v1/chat/completions",
    "gateway_model_id": "gpt-5-2025-08-07",
    "openai_compatible": true,
    "supports_streaming": true,
    "supports_tools": true,
    "supports_vision": false,
    "docs_url": "https://docs.llm-stats.com/gateway/chat-completions"
  }
}
```

When `available` is `false`, the optional fields are omitted —
that model is in the catalog but cannot be called through the gateway.

## Errors

Every error uses the same envelope, so you only need to write the handling code once.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "error": {
    "code": "not_found",
    "message": "Human-readable explanation.",
    "param": "model_id"
  }
}
```

`code` is the contract — branch on it, never on `message`.

## Rate limits

Limits are applied per API key, per endpoint:

| Endpoint          | Limit        |
| ----------------- | ------------ |
| `/v1/models/{id}` | 120 / minute |
| `/v1/rankings`    | 120 / minute |
| `/v1/models`      | 60 / minute  |
| `/v1/benchmarks`  | 60 / minute  |
| `/v1/updates`     | 60 / minute  |
| `/v1/scores`      | 30 / minute  |

Exceeding a limit returns HTTP `429` with the standard error envelope and a `Retry-After` header. Need higher limits? [Get in touch](mailto:founders@llm-stats.com).
