Skip to main content
PUT
Update the Devin Desktop Model Allowlist

Overview

Replaces your team’s model allowlist, the same setting admins manage under organization controls in Devin Desktop. The request body is the full desired state: the two lists overwrite the stored ones. To avoid overwriting a change you have not seen, the request must carry the ETag of a List Models response in If-Match. If the allowlist, the available models, or their prices changed since that response, the update is rejected with 412 and you should list the models again.
This endpoint is in alpha (v2alpha). The request and response shape may change.

Authentication

Pass an API key in the Authorization header:
Use a Devin service user API key (cog_...). In addition to the Use Devin Desktop permission that List Models requires, the service user’s role must have the Windsurf admin permission (account.windsurf.admin), which the built-in Account Admin role includes. A service user without it can list models but gets 403 on this endpoint.

Request

string
required
The ETag header of a GET /api/v2alpha/models response reflecting the current state. Required; * is not accepted.
string[]
required
Model UIDs users may pick, e.g. ["claude-sonnet-4-5"]. Pass [] to allow models by tag only.
string[]
required
Model tags users may pick, including provider tags such as provider-anthropic or provider-openai. Pass [] to allow only the listed model UIDs.
Both fields are required. Unknown fields are rejected.

Example Request

Response

On success the response is the same as List Models with the new allowlist applied: every model with its allowed flag, the stored allowed_model_uids and allowed_model_tags, and a new ETag header.

Error Responses

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