# List model aliases and exact versions

`GET /v1/models` (operation id `listModels`)

Any valid API key may call this route. Fallback versions are listed for transparency; callers cannot request them directly.

Authentication: API key as `authorization: Bearer <key>`, scope `any scope`.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-client-request-id` | header | string | no | Your own correlation id, accepted on every public operation. Logged with the request metadata and echoed in the response. A malformed value answers 400 `invalid_header`. (1 to 128 characters; pattern ^[\x21-\x7E]+$) |

## Responses

### 200

Models visible to the caller.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | (always "list") |
| `data` | array of Model | yes |  |
| `data[].id` | string | yes |  |
| `data[].object` | string | yes | (always "model") |
| `data[].kind` | string | yes | (one of "alias", "version") |
| `data[].target` | string \| null | no | For an alias, the exact version it resolves to. |
| `data[].served_by` | ServedBy | yes | `gpu` is our own engine; `fallback` is the hosted Azure OpenAI path in the EU data zone. (one of "gpu", "fallback") |
| `data[].status` | string | yes | (one of "active", "deprecated", "retired") |
| `data[].deterministic` | boolean | yes | True when the same request always gives the same answers from this version. |
| `data[].released_at` | string | yes | (format date-time) |
| `data[].retires_at` | string \| null | no | (format date-time) |
| `data[].calibration` | string \| null | no |  |
| `data[].upstream` | string \| null | no | For fallback versions, the hosted model and region that serve them. |
| `data[].limits` | ModelLimits | yes |  |
| `data[].limits.max_state_tokens` | integer | yes |  |
| `data[].limits.max_question_tokens` | integer | yes |  |
| `data[].limits.max_total_tokens` | integer | yes |  |
| `data[].limits.max_questions` | integer | yes |  |
| `data[].limits.max_options` | integer | yes |  |
| `data[].limits.max_levels` | integer | yes |  |
| `data[].limits.exact_option_probabilities` | integer | no | How many options get exact probabilities. Fallback versions give exact values for the 20 most likely options. |
| `data[].quality` | ModelQuality \| null | no |  |
| `data[].quality.agreement` | number | yes | Agreement with reference labels on the report split, both languages. |
| `data[].quality.agreement_en` | number | yes |  |
| `data[].quality.agreement_nl` | number | yes |  |
| `data[].quality.ece` | object | yes |  |
| `data[].quality.ece.pick` | number | yes |  |
| `data[].quality.ece.rate` | number | yes |  |
| `data[].quality.ece.check` | number | yes |  |
| `data[].quality.report_url` | string | yes | (format uri) |

### 400

The request could not be read. Codes: `invalid_json` (not JSON, not UTF-8, or a `\u` escape that is half of a
surrogate pair, such as `"\ud800"` without its low half), `duplicate_key` (a JSON object
repeats a key; `param` is the JSON pointer of the repeated member, such as `/questions/q1/options/a`),
`unsupported_media_type` (not `application/json`) and `invalid_header` (a malformed `idempotency-key` or
`x-client-request-id`; `param` names the header).


### 401

Missing, unknown, revoked or expired credentials.

### 403

The credentials are valid but not allowed to do this (missing scope, suspended account or failed CSRF check).

### 429

A rate limit or quota is exhausted. Retry after the given number of seconds. For `test_daily_quota` that is
the time until 00:00 UTC; clients should not retry it automatically.


### 500

An unexpected error. Any charge was refunded. Retry with the same idempotency key.

### 503

No serving path could answer in time, or a dependency is down. Any charge was refunded.

## Example request

```bash
curl "https://api.thinqit.ai/v1/models" \
  -H "authorization: Bearer $DEX_API_KEY"
```

## Examples

Illustrative values. Examples show the shape of requests and responses; the numbers in them are not measured results.

Response: The alias, the GPU version and the two fallback versions (illustrative numbers)

```json
{
  "object": "list",
  "data": [
    {
      "id": "dex-1",
      "object": "model",
      "kind": "alias",
      "target": "dex-1.0.0",
      "served_by": "gpu",
      "status": "active",
      "deterministic": true,
      "released_at": "2026-10-15T00:00:00Z",
      "retires_at": null,
      "calibration": "cal-20261015-1",
      "upstream": null,
      "limits": {
        "max_state_tokens": 16384,
        "max_question_tokens": 4096,
        "max_total_tokens": 16384,
        "max_questions": 32,
        "max_options": 255,
        "max_levels": 10,
        "exact_option_probabilities": 255
      },
      "quality": null
    },
    {
      "id": "dex-1.0.0",
      "object": "model",
      "kind": "version",
      "target": null,
      "served_by": "gpu",
      "status": "active",
      "deterministic": true,
      "released_at": "2026-10-15T00:00:00Z",
      "retires_at": null,
      "calibration": "cal-20261015-1",
      "upstream": null,
      "limits": {
        "max_state_tokens": 16384,
        "max_question_tokens": 4096,
        "max_total_tokens": 16384,
        "max_questions": 32,
        "max_options": 255,
        "max_levels": 10,
        "exact_option_probabilities": 255
      },
      "quality": {
        "agreement": 0.701,
        "agreement_en": 0.712,
        "agreement_nl": 0.69,
        "ece": {
          "pick": 0.031,
          "rate": 0.044,
          "check": 0.027
        },
        "report_url": "https://thinqit.ai/docs/calibration/dex-1.0.0/cal-20261015-1"
      }
    },
    {
      "id": "dex-fallback-1.0.0",
      "object": "model",
      "kind": "version",
      "target": null,
      "served_by": "fallback",
      "status": "active",
      "deterministic": false,
      "released_at": "2026-10-15T00:00:00Z",
      "retires_at": "2027-04-14T00:00:00Z",
      "calibration": "cal-20261015-2",
      "upstream": "Azure OpenAI gpt-4.1-mini (2025-04-14), Data Zone Standard, EU",
      "limits": {
        "max_state_tokens": 16384,
        "max_question_tokens": 4096,
        "max_total_tokens": 16384,
        "max_questions": 32,
        "max_options": 255,
        "max_levels": 10,
        "exact_option_probabilities": 20
      },
      "quality": {
        "agreement": 0.724,
        "agreement_en": 0.733,
        "agreement_nl": 0.715,
        "ece": {
          "pick": 0.038,
          "rate": 0.047,
          "check": 0.03
        },
        "report_url": "https://thinqit.ai/docs/calibration/dex-fallback-1.0.0/cal-20261015-2"
      }
    },
    {
      "id": "dex-fallback-lite-1.0.0",
      "object": "model",
      "kind": "version",
      "target": null,
      "served_by": "fallback",
      "status": "active",
      "deterministic": false,
      "released_at": "2026-10-15T00:00:00Z",
      "retires_at": "2027-04-14T00:00:00Z",
      "calibration": "cal-20261015-3",
      "upstream": "Azure OpenAI gpt-4o-mini (2024-07-18), Data Zone Standard, EU",
      "limits": {
        "max_state_tokens": 16384,
        "max_question_tokens": 4096,
        "max_total_tokens": 16384,
        "max_questions": 32,
        "max_options": 255,
        "max_levels": 10,
        "exact_option_probabilities": 20
      },
      "quality": {
        "agreement": 0.686,
        "agreement_en": 0.697,
        "agreement_nl": 0.675,
        "ece": {
          "pick": 0.041,
          "rate": 0.049,
          "check": 0.034
        },
        "report_url": "https://thinqit.ai/docs/calibration/dex-fallback-lite-1.0.0/cal-20261015-3"
      }
    }
  ]
}
```
