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

# List Models

> List the models you can call and their prices

```
GET /openapi/memorylake/router/v1/models
```

Lists the models you can call through Memory Router, with their prices, sorted by name. `provider_type` tells you which base URL reaches each model: call `openai` models through `/router/openai/v1` and `anthropic` models through `/router/anthropic/v1`. Each site has its own catalog.

Unlike the inference endpoints, this endpoint answers in the MemoryLake API format: the catalog is in `data.items`, and errors carry `success`, `message` and `error_code`.

Prices are per million tokens, in US dollars and in balance tokens (what your balance is charged). A price that is not listed does not apply to the model; it is not free. When `price` is missing, no price is available for the model; it can still be called.

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET 'https://app.memorylake.ai/openapi/memorylake/router/v1/models' \
    -H 'Authorization: Bearer sk_xxxxxx'
  ```
</RequestExample>

### Response

<ResponseField name="data" type="object">
  <Expandable title="Model Catalog object">
    <ResponseField name="items" type="array">
      Every model you can call, sorted by name. An empty list when none is available.

      <Expandable title="Catalog Model object">
        <ResponseField name="name" type="string">Model name to send as `model`</ResponseField>
        <ResponseField name="provider_type" type="string">Protocol that reaches the model. One of: `openai`, `anthropic`.</ResponseField>

        <ResponseField name="price" type="object">
          Prices of the model. Missing when no price is available for it.

          <Expandable title="Model Price object">
            <ResponseField name="details" type="object">
              Every other price of the model. Only the prices that apply are listed.

              <Expandable title="Price Details object">
                <ResponseField name="batch" type="object">Prices for batch requests</ResponseField>
                <ResponseField name="cache_read" type="object">Input tokens read from the cache</ResponseField>
                <ResponseField name="cache_read_explicit" type="object">Input tokens read from a cache you created explicitly</ResponseField>
                <ResponseField name="cache_write" type="object">Input tokens written to the cache</ResponseField>
                <ResponseField name="cache_write_1h" type="object">Input tokens written to a 1-hour cache</ResponseField>
                <ResponseField name="cache_write_5m" type="object">Input tokens written to a 5-minute cache</ResponseField>
                <ResponseField name="hosted_tools" type="object">Prices of built-in tools</ResponseField>
                <ResponseField name="output_thinking" type="object">Reasoning output tokens</ResponseField>
                <ResponseField name="tiers" type="array">Prices by input length</ResponseField>
              </Expandable>
            </ResponseField>

            <ResponseField name="input" type="object">
              Input tokens

              <Expandable title="Price Tier object">
                <ResponseField name="tokens_per_million" type="integer">Balance tokens charged per million tokens</ResponseField>
                <ResponseField name="usd_per_million" type="number">US dollars per million tokens</ResponseField>
              </Expandable>
            </ResponseField>

            <ResponseField name="output" type="object">
              Output tokens

              <Expandable title="Price Tier object">
                <ResponseField name="tokens_per_million" type="integer">Balance tokens charged per million tokens</ResponseField>
                <ResponseField name="usd_per_million" type="number">US dollars per million tokens</ResponseField>
              </Expandable>
            </ResponseField>

            <ResponseField name="tiered" type="boolean">true when the price depends on input length: input and output are then the lowest band, and details.tiers lists every band</ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json Success (200) theme={null}
  {
    "success": true,
    "message": "Operation completed successfully",
    "data": {
      "items": [
        {
          "name": "claude-haiku-4-5",
          "price": {
            "details": {
              "cache_read": {
                "tokens_per_million": 32000,
                "usd_per_million": 0.1
              },
              "cache_write_5m": {
                "tokens_per_million": 400000,
                "usd_per_million": 1.25
              }
            },
            "input": {
              "tokens_per_million": 320000,
              "usd_per_million": 1
            },
            "output": {
              "tokens_per_million": 1600000,
              "usd_per_million": 5
            }
          },
          "provider_type": "anthropic"
        },
        {
          "name": "gpt-4o-mini",
          "price": {
            "details": {
              "cache_read": {
                "tokens_per_million": 24000,
                "usd_per_million": 0.075
              }
            },
            "input": {
              "tokens_per_million": 48000,
              "usd_per_million": 0.15
            },
            "output": {
              "tokens_per_million": 192000,
              "usd_per_million": 0.6
            }
          },
          "provider_type": "openai"
        }
      ]
    }
  }
  ```
</ResponseExample>

### Errors

Errors answer with `success: false`, a `message` and an `error_code`. See [Error Codes](/features/memorylake/api-reference/errors) for every code.

| Status | Meaning |
| - | - |
| `401` | The MemoryLake API key is missing, invalid, disabled or expired. `error_code` is `UNAUTHORIZE`. |
| `403` | The key may only be used from listed IP addresses, and this request came from another one. `error_code` is `ACCESS_DENIED`. |
| `429` | Too many requests with an invalid key came from your IP address. `error_code` is `RATE_LIMIT_EXCEEDED`. Wait for the time in `Retry-After`. |
| `502` | The model catalog could not be loaded. `error_code` is `INTERNAL_ERROR`. Retry later. |
| `503` | The service is temporarily unavailable, for example during maintenance. `error_code` is `SERVICE_UNAVAILABLE`. Retry later; `Retry-After` is sent when the wait is known. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.