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_...) with the same permissions List Models requires: the service user’s role must include the Use Devin Desktop permission and the Windsurf admin permission (account.windsurf.admin), which the built-in Account Admin role includes.

Request

string
required
The ETag header of a GET /api/v2alpha/models response reflecting the current state (of the same org_id, if you pass one). 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.
string
Replace the allowlist override of one organization in your account instead of the account-wide allowlist. The override is created if the organization has none, and If-Match must be the ETag of a GET /api/v2alpha/models?org_id=<org_id> response. Leave unset to replace the account-wide allowlist.
allowed_model_uids and allowed_model_tags are required. Unknown fields are rejected; org_id is accepted only in the body, not as a query parameter.

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>"}.