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

# List Devin Desktop Models and Pricing

> List the Devin Desktop models available to your account with their model UIDs, names, and the per-token or per-message prices your team is charged.

## Overview

Returns the models available to the calling account, with the prices that account is actually charged. Use it as a programmatic source of truth for model pricing instead of copying prices from the [models page](/desktop/models).

Prices depend on the caller's plan and billing model, so two teams can get different values for the same model.

<Note>This endpoint is in alpha (`v2alpha`). The response shape may change.</Note>

## Authentication

Pass an API key in the `Authorization` header:

```
Authorization: Bearer <api-key>
```

Use a Devin [service user API key](/api-reference/authentication) (`cog_...`). The service user's role must include the **Use Devin Desktop** permission, and Devin Desktop access must be enabled for the account.

## Request

<ParamField query="filter" type="string">
  Leave unset to list every model allowed by your plan and billing model, ignoring team-level restrictions.

  Set to `allowlist` to also apply your team's model allowlist, organization controls, and group restrictions, so the list matches what users see in the Devin Desktop model picker.
</ParamField>

### Example Request

```bash theme={null}
curl https://server.codeium.com/api/v2alpha/models \
  -H "Authorization: Bearer $DEVIN_API_KEY"
```

Only the models your users can pick:

```bash theme={null}
curl "https://server.codeium.com/api/v2alpha/models?filter=allowlist" \
  -H "Authorization: Bearer $DEVIN_API_KEY"
```

## Response

<ResponseField name="models" type="object[]">
  Models available to the caller. Disabled models are not included.

  <Expandable title="properties">
    <ResponseField name="uid" type="string">
      Stable model identifier, e.g. `claude-sonnet-4-5`.
    </ResponseField>

    <ResponseField name="name" type="string">
      Display name shown in the model picker.
    </ResponseField>

    <ResponseField name="pricing_dimensions" type="object[]">
      Prices charged to the caller for this model. Empty for models with no charge.

      <Expandable title="properties">
        <ResponseField name="label" type="string">
          What is being priced, in snake\_case: `input`, `output`, `cached_input`, `cache_read`, or `cache_write` for token pricing; for prices in a non-currency unit, the quantity being priced, e.g. `message` for per-message pricing. Fusion models also list their sidekick's prices with a `sidekick_` prefix, e.g. `sidekick_input` or `sidekick_message`.
        </ResponseField>

        <ResponseField name="unit" type="string">
          The unit `value` is expressed in, in snake\_case, e.g. `usd`, `acus`, or `credits`.
        </ResponseField>

        <ResponseField name="value" type="number">
          The price in `unit`, per `denominator`.
        </ResponseField>

        <ResponseField name="denominator" type="string">
          The quantity the price applies to, e.g. `1M tokens` or `message`.
        </ResponseField>

        <ResponseField name="info" type="string">
          Optional note about the price, e.g. `Higher effort consumes more tokens`.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

### Example Response

The models and prices below only illustrate the response shape. Call the endpoint for your actual prices.

```json theme={null}
{
  "models": [
    {
      "uid": "claude-sonnet-4-5",
      "name": "Claude Sonnet 4.5",
      "pricing_dimensions": [
        { "label": "input", "unit": "usd", "value": 3, "denominator": "1M tokens" },
        { "label": "cached_input", "unit": "usd", "value": 0.3, "denominator": "1M tokens" },
        { "label": "output", "unit": "usd", "value": 15, "denominator": "1M tokens" }
      ]
    },
    {
      "uid": "example-model",
      "name": "Example Model",
      "pricing_dimensions": [
        { "label": "message", "unit": "acus", "value": 0.5, "denominator": "message" }
      ]
    }
  ]
}
```

## Error Responses

Errors are returned as `{"error": "<message>"}`.

| Status | Cause                                                                  |
| ------ | ---------------------------------------------------------------------- |
| `400`  | `filter` is set to a value other than `allowlist`                      |
| `401`  | Missing or invalid API key                                             |
| `403`  | The key's user doesn't have Devin Desktop access                       |
| `429`  | Rate limit exceeded; wait for the `Retry-After` header before retrying |
