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

# Actualizar la lista de modelos permitidos de Devin Desktop

> Reemplaza mediante programación la lista de modelos permitidos de Devin Desktop de tu equipo: define los UID de modelo y las etiquetas permitidos, con una comprobación de ETag contra el estado actual.

## Descripción general

Reemplaza la lista de modelos permitidos de tu equipo, la misma configuración que los Admin gestionan en los controles de la organización de Devin Desktop. El cuerpo de la solicitud representa el estado deseado completo: las dos listas sobrescriben las que estén almacenadas.

Para no sobrescribir un cambio que no hayas visto, la solicitud debe incluir en `If-Match` el `ETag` de una respuesta de [List Models](/es/desktop/accounts/api-reference/list-models). Si la lista de permitidos, los modelos disponibles o sus precios han cambiado desde esa respuesta, la actualización se rechaza con un `412` y debes volver a listar los modelos.

> [!NOTE]
>
> Este endpoint está en fase alfa (`v2alpha`). La estructura de la solicitud y de la respuesta puede cambiar.

## Autenticación

Envía una clave de API en el encabezado `Authorization`:

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

Usa una [clave de API de usuario de servicio](/es/api-reference/authentication) de Devin (`cog_...`). Además del permiso **Use Devin Desktop** que requiere [List Models](/es/desktop/accounts/api-reference/list-models), el rol del usuario de servicio debe tener el permiso **Windsurf admin** (`account.windsurf.admin`), incluido en el rol integrado Account Admin. Un usuario de servicio sin este permiso puede listar modelos, pero recibe un `403` en este endpoint.

## Solicitud

**If-Match** `string` *required*

El encabezado `ETag` de una respuesta de `GET /api/v2alpha/models` que refleja el estado actual. Obligatorio; no se acepta `*`.

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

UID de los modelos que los usuarios pueden elegir, p. ej., `["claude-sonnet-4-5"]`. Pasa `[]` para permitir modelos solo por etiqueta.

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

Etiquetas de los modelos que los usuarios pueden elegir, incluidas etiquetas de proveedor como `provider-anthropic` o `provider-openai`. Pasa `[]` para permitir solo los UID de modelos indicados.

Ambos campos son obligatorios. Se rechazan los campos desconocidos.

### Ejemplo de solicitud

```bash theme={null}
ETAG=$(curl -s -D - -o /dev/null https://server.codeium.com/api/v2alpha/models \
  -H "Authorization: Bearer $DEVIN_API_KEY" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')

curl -X PUT https://server.codeium.com/api/v2alpha/models \
  -H "Authorization: Bearer $DEVIN_API_KEY" \
  -H "If-Match: $ETAG" \
  -H "Content-Type: application/json" \
  -d '{"allowed_model_uids": ["claude-sonnet-4-5"], "allowed_model_tags": ["provider-anthropic"]}'
```

## Respuesta

Si la operación se realiza correctamente, la respuesta es la misma que la de [List Models](/es/desktop/accounts/api-reference/list-models), pero con la nueva lista de permitidos aplicada: cada modelo con su opción `allowed`, los valores almacenados de `allowed_model_uids` y `allowed_model_tags`, y un nuevo encabezado `ETag`.

## Respuestas de error

Los errores se devuelven con el formato `{"error": "<message>"}`.

| Estado | Causa |
| - | - |
| `400` | El cuerpo no es JSON, contiene campos desconocidos o le falta `allowed_model_uids` o `allowed_model_tags`; o se ha especificado el parámetro de consulta `filter` (solo lo acepta [List Models](/es/desktop/accounts/api-reference/list-models)) |
| `401` | Falta la clave de API o no es válida, o se ha usado una clave de API legacy de Windsurf (solo se aceptan claves de usuario de servicio `cog_...` de Devin) |
| `403` | El usuario de la clave no tiene acceso a Devin Desktop, o su rol no tiene el permiso de Windsurf admin (`account.windsurf.admin`) |
| `412` | `If-Match` no coincide con el `ETag` actual; vuelve a listar los modelos e inténtalo de nuevo |
| `428` | Falta el encabezado `If-Match` |
| `429` | Se superó el límite de tasa; espera el tiempo indicado en el encabezado `Retry-After` antes de volver a intentarlo |


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