> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/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 UIDs, names, prices, whether your team allows each one, and the team's model allowlist.

## Overview

Returns the models available to the calling account, with the prices that account is actually charged, whether your team currently allows each one, and the team's stored model allowlist. Use it as a programmatic source of truth for model pricing instead of copying prices from the [models page](/desktop/models), and as the read side of the [Update Model Allowlist API](/desktop/accounts/api-reference/update-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.

## 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

**filter** `string`

Leave unset to list every model allowed by your plan and billing model, ignoring team-level restrictions. Each model's `allowed` field tells you whether your team's restrictions currently allow it.

Set to `allowlist` to list only the models your team's model allowlist, organization controls, and group restrictions allow, so the list matches what users see in the Devin Desktop model picker.

**If-None-Match** `string`

An `ETag` from an earlier response. Returns `304 Not Modified` with no body when the response has not changed since.

### 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

The response carries an `ETag` header that changes whenever anything in the unfiltered response changes: the available models, their names and prices, their `allowed` flags, or the allowlist fields. Pass it as `If-Match` to the [Update Model Allowlist API](/desktop/accounts/api-reference/update-models); it is the same regardless of `filter`.

**models** `object[]`

Models available to the caller. Disabled models are not included.

**properties**

**uid** `string`

Stable model identifier, e.g. `claude-sonnet-4-5`.

**name** `string`

Display name shown in the model picker.

**allowed** `boolean`

Whether your team's model allowlist, organization controls, and group restrictions currently let users pick this model. Always `true` with `filter=allowlist`.

**pricing\_dimensions** `object[]`

Prices charged to the caller for this model. Empty for models with no charge.

**properties**

**label** `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`.

**unit** `string`

The unit `value` is expressed in, in snake\_case, e.g. `usd`, `acus`, or `credits`.

**value** `number`

The price in `unit`, per `denominator`.

**denominator** `string`

The quantity the price applies to, e.g. `1M tokens` or `message`.

**info** `string`

Optional note about the price, e.g. `Higher effort consumes more tokens`.

**allowed\_model\_uids** `string[]`

Model UIDs on your team's allowlist, as stored. Empty when the team allows models by tag only.

**allowed\_model\_tags** `string[]`

Model tags on your team's allowlist, as stored, including provider tags such as `provider-anthropic`. A model is allowed when its UID is listed or it carries a listed tag.

### 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",
      "allowed": true,
      "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",
      "allowed": false,
      "pricing_dimensions": [
        { "label": "message", "unit": "acus", "value": 0.5, "denominator": "message" }
      ]
    }
  ],
  "allowed_model_uids": ["claude-sonnet-4-5"],
  "allowed_model_tags": ["provider-anthropic"]
}
```

## 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, or a legacy Windsurf API key (only Devin `cog_...` service user keys are accepted) |
| `403` | The key's user doesn't have Devin Desktop access |
| `429` | Rate limit exceeded; wait for the `Retry-After` header before retrying |


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