Listar los modelos y precios de Devin Desktop
curl --request GET \
--url https://server.codeium.com/api/v2alpha/models \
--header 'Authorization: Bearer <token>'import requests
url = "https://server.codeium.com/api/v2alpha/models"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://server.codeium.com/api/v2alpha/models', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.codeium.com/api/v2alpha/models",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v2alpha/models"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://server.codeium.com/api/v2alpha/models")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v2alpha/models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"models": [
{
"uid": "<string>",
"name": "<string>",
"allowed": true,
"pricing_dimensions": [
{
"label": "<string>",
"unit": "<string>",
"value": 123,
"denominator": "<string>",
"info": "<string>"
}
]
}
],
"allowed_model_uids": [
"<string>"
],
"allowed_model_tags": [
"<string>"
]
}Referencia de la API
Listar los modelos y precios de Devin Desktop
Lista los modelos de Devin Desktop disponibles en tu cuenta, con sus UID, sus nombres, sus precios, si tu equipo permite o no cada uno y la lista de modelos permitidos del equipo.
GET
/
api
/
v2alpha
/
models
Listar los modelos y precios de Devin Desktop
curl --request GET \
--url https://server.codeium.com/api/v2alpha/models \
--header 'Authorization: Bearer <token>'import requests
url = "https://server.codeium.com/api/v2alpha/models"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://server.codeium.com/api/v2alpha/models', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.codeium.com/api/v2alpha/models",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v2alpha/models"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://server.codeium.com/api/v2alpha/models")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v2alpha/models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"models": [
{
"uid": "<string>",
"name": "<string>",
"allowed": true,
"pricing_dimensions": [
{
"label": "<string>",
"unit": "<string>",
"value": 123,
"denominator": "<string>",
"info": "<string>"
}
]
}
],
"allowed_model_uids": [
"<string>"
],
"allowed_model_tags": [
"<string>"
]
}Descripción general
Devuelve los modelos disponibles para la cuenta que realiza la llamada, con los precios que realmente se cobran a esa cuenta, si tu equipo permite actualmente cada uno de ellos y la lista de modelos permitidos que el equipo tiene guardada. Ćsalo como fuente de verdad programĆ”tica para los precios de los modelos, en lugar de copiarlos desde la pĆ”gina de modelos, y como la operación de lectura complementaria de la API de actualización de la lista de modelos permitidos. Los precios dependen del plan y del modelo de facturación de quien realiza la llamada, por lo que dos equipos pueden obtener valores distintos para el mismo modelo.Este endpoint estĆ” en alfa (
v2alpha). La estructura de la respuesta puede cambiar.Autenticación
EnvĆa una clave de API en el encabezadoAuthorization:
Authorization: Bearer <api-key>
cog_...). El rol del usuario de servicio debe incluir el permiso Use Devin Desktop y la cuenta debe tener habilitado el acceso a Devin Desktop.
solicitud
string
Déjalo sin definir para listar todos los modelos permitidos por tu plan y tu modelo de facturación, ignorando las restricciones a nivel de equipo. El campo
allowed de cada modelo indica si las restricciones de tu equipo lo permiten actualmente.Establécelo en allowlist para listar solo los modelos que autorizan la lista de modelos permitidos de tu equipo, los controles de la organización y las restricciones de grupo, de modo que la lista coincida con la que ven los usuarios en el selector de modelos de Devin Desktop.string
Un
ETag de una respuesta anterior. Devuelve 304 Not Modified sin cuerpo si la respuesta no ha cambiado desde entonces.Ejemplo de solicitud
curl https://server.codeium.com/api/v2alpha/models \
-H "Authorization: Bearer $DEVIN_API_KEY"
curl "https://server.codeium.com/api/v2alpha/models?filter=allowlist" \
-H "Authorization: Bearer $DEVIN_API_KEY"
Respuesta
La respuesta incluye un encabezadoETag que cambia cada vez que se modifica cualquier elemento de la respuesta sin filtrar: los modelos disponibles, sus nombres y precios, sus opciones allowed o los campos de la lista de permitidos. PÔsalo como If-Match a la API de actualización de la lista de modelos permitidos; su valor es el mismo independientemente de filter.
object[]
Modelos disponibles para quien realiza la llamada. No se incluyen los modelos deshabilitados.
Mostrar propiedades
Mostrar propiedades
string
Identificador estable del modelo, p. ej.
claude-sonnet-4-5.string
Nombre que se muestra en el selector de modelos.
boolean
Indica si la lista de modelos permitidos de tu equipo, los controles de la organización y las restricciones de grupo permiten actualmente a los usuarios elegir este modelo. Siempre es
true con filter=allowlist.object[]
Precios que se cobran a quien realiza la llamada por este modelo. VacĆo en el caso de los modelos sin cargo.
Mostrar propiedades
Mostrar propiedades
string
Aquello a lo que se aplica el precio, en snake_case:
input, output, cached_input, cache_read o cache_write para el precio por tokens; para precios en una unidad distinta de la moneda, la cantidad tarificada, p. ej. message para el precio por mensaje. Los modelos Fusion tambiƩn listan los precios de su modelo secundario con el prefijo sidekick_, p. ej. sidekick_input o sidekick_message.string
La unidad en la que se expresa
value, en snake_case, p. ej. usd, acus o credits.number
El precio en
unit, por denominator.string
La cantidad a la que se aplica el precio, p. ej.
1M tokens o message.string
Nota opcional sobre el precio, p. ej.
Higher effort consumes more tokens.string[]
UID de los modelos incluidos en la lista de permitidos de tu equipo, tal como estĆ”n almacenados. VacĆo cuando el equipo solo permite modelos por etiqueta.
string[]
Etiquetas de modelos incluidas en la lista de permitidos de tu equipo, tal como estƔn almacenadas, incluidas las etiquetas de proveedor como
provider-anthropic. Un modelo estĆ” permitido si su UID figura en la lista o si tiene alguna de las etiquetas incluidas.Ejemplo de respuesta
Los modelos y precios que se muestran a continuación solo ilustran la estructura de la respuesta. Llama al endpoint para consultar tus precios reales.{
"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"]
}
Respuestas de error
Los errores se devuelven como{"error": "<message>"}.
| Estado | Causa |
|---|---|
400 | filter tiene un valor distinto de allowlist |
401 | Clave de API ausente o no vƔlida, o 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 |
429 | Se superó el lĆmite de tasa; espera el tiempo indicado en el encabezado Retry-After antes de volver a intentarlo |

