Buscar documentación...

Empieza a escribir para buscar documentación

Guía de la plataforma

API de la plataforma

Lea el catálogo, los precios, su saldo y su consumo desde el código.

Esto es todo menos enviar un prompt: qué modelos existen, cuánto cobra cada proveedor, cuánto ha gastado y qué claves tiene. Todo responde JSON en el mismo host api al que envía las completions.

Los endpoints de catálogo y de precios son públicos y no necesitan ninguna credencial. Todo lo relativo a su propia cuenta necesita una, y hay dos tipos.

No son intercambiables. Una clave de API no puede leer su saldo, y un token de acceso no puede enviar una completion.

CredencialAspectoDa acceso a
Clave de APIsk-...La inferencia, la lista de modelos y el contador de uso de esa clave concreta.
Token de accesoDe 29 a 32 caracteres, sin prefijoSu cuenta: saldo, gestión de claves, registros de uso.

Ambas viajan en la misma cabecera, Authorization: Bearer seguido del valor. No se lee nada más. Los ejemplos antiguos añaden una cabecera New-Api-User, que se ignora, y no existe ninguna alternativa basada en cookies.

Envíe esa cabecera incluso donde el endpoint respondería sin ella. Una petición a una ruta de cuenta que no lleva credencial puede quedar sometida a una verificación antes de llegar hasta nosotros, y esa verificación responde HTML en lugar de JSON.

Abra Configuración, busque Acceso a la API dentro de Seguridad y genere uno. Se muestra una sola vez. Solo puede crearse mientras tiene la sesión iniciada, así que un script no puede generar el suyo.

Solo tiene un token de acceso a la vez. Generar uno nuevo invalida el anterior sin avisar, y todo lo que siga usándolo deja de funcionar.

Trátelo como una contraseña. Puede gastar dinero, crear claves y leer su historial. Revóquelo desde la misma pantalla en cuanto un script ya no lo necesite.

Una sola petición pública devuelve todos los modelos, con los precios ya convertidos a dólares por millón de tokens. Sin clave y sin registro.

bash
curl https://api.unorouter.com/api/pricing/catalog
json
{
  "counts": { "models": 239, "free": 134, "paid": 105, "vendors": 50 },
  "first_free_model": "glm-5.3:free",
  "vendors": [{ "vendor_id": 4, "vendor_name": "Zhipu", "icon": "Zhipu.Color" }],
  "models": [
    {
      "model_name": "glm-5.3",
      "vendor": "Zhipu",
      "type": "text",
      "is_free": false,
      "online": true,
      "input_price": 0.05103,
      "output_price": 0.160382187,
      "original_input_price": 1.26,
      "original_output_price": 3.960054,
      "tags": "Text,Reasoning,Tools,Cache",
      "supported_endpoint_types": ["openai", "anthropic"],
      "uptime_24h": 99.965,
      "success_rate": 95,
      "avg_latency_ms": 11062
    }
  ]
}

input_price y output_price son lo que pagaría hoy en realidad, con el proveedor más barato que sirve ese modelo en este momento. original_input_price y original_output_price son el precio de lista del propio fabricante, así que la diferencia entre ambos es el descuento. is_free marca los modelos que nunca cobran, y online marca los que ahora mismo tienen un proveedor activo.

Dos parientes más pequeños: /api/pricing/counts devuelve solo los totales y es lo bastante barato como para consultarlo de forma periódica, y /api/pricing/vendors devuelve la lista de fabricantes. El endpoint más antiguo /api/pricing devuelve ratios en bruto en vez de dólares y es varias veces más grande.

La mayoría de los modelos los sirven varios proveedores a tarifas distintas. Pida un modelo concreto para verlos todos.

bash
curl "https://api.unorouter.com/api/pricing/catalog/model?model=glm-5.3"
json
{
  "model_name": "glm-5.3",
  "model_ratio": 0.63,
  "completion_ratio": 3.1429,
  "cache_ratio": 0.1857,
  "input_price": 0.05103,
  "output_price": 0.160382187,
  "grid_min_ratio": 0.0405,
  "auto_chain": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3", "a7-4069-glm-5.3"],
  "group_ratio": {
    "a7-bbgt-2846-glm-5.3": 0.0405,
    "a7-kkl-3731-glm-5.3": 0.0911,
    "a7-4069-glm-5.3": 0.1214
  },
  "enable_groups": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3"]
}

auto_chain es el orden en el que el enrutado los prueba, del más barato al más caro. group_ratio da el multiplicador de cada proveedor, y de ahí sale el precio:

text
input  $/1M = model_ratio * 2 * group_ratio
output $/1M = input * completion_ratio
cached $/1M = input * cache_ratio

glm-5.3 on a7-bbgt-2846: 0.63 * 2 * 0.0405 = $0.05103 / 1M in
                          0.05103 * 3.1429  = $0.16038 / 1M out

Estos nombres de grupo son los mismos a los que se fija una clave, consulte Fijación de grupos

La lista compatible con OpenAI es lo que llaman la mayoría de los clientes cuando pulsa conectar. Necesita una clave de API.

bash
curl https://api.unorouter.com/v1/models \
  -H "Authorization: Bearer $UNOROUTER_API_KEY"

Devuelve solo lo que esa clave puede usar realmente, así que una clave del plan gratuito ve menos modelos que una con saldo. Cada entrada incluye además context_length y max_output_tokens, que OpenAI por sí solo no proporciona.

La ruta es /v1/models. Si quita el /v1 llegará a una página web en vez de a la API, lo que los clientes notifican como un error de análisis de JSON por un doctype inesperado.

Una sola llamada devuelve su cuenta, incluido lo que le queda por gastar.

bash
curl https://api.unorouter.com/api/user/self \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"
json
{
  "success": true,
  "message": "",
  "data": {
    "id": 12345,
    "username": "you",
    "group": "default",
    "quota": 265000,
    "used_quota": 4231900,
    "request_count": 1884,
    "aff_code": "ABC123"
  }
}

Los importes están en unidades de cuota, no en dólares. 500.000 unidades equivalen a un dólar estadounidense, así que el saldo anterior es de 0,53 USD. Divida entre 500.000 para mostrar dinero.

quota es lo que todavía puede gastar. used_quota y request_count son totales acumulados de por vida que solo suben, así que used_quota no es la diferencia entre nada y su saldo.

Liste sus claves y después revele una por su id.

bash
curl "https://api.unorouter.com/api/token/?p=1&page_size=20" \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"

curl -X POST https://api.unorouter.com/api/token/42/key \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"

El listado enmascara el valor de todas las claves, por eso revelar una es una llamada aparte. Esa llamada tiene límite de frecuencia y queda anotada en su registro de auditoría.

Crear una clave devuelve success, pero no la clave en sí. Créala, lístalas para encontrar su id y luego revélala. Actualizar una clave sí devuelve el objeto actualizado, pero envía el objeto completo: solo cross_group_retry, group_mapping y auto_groups sobreviven a una omisión, y cualquier otro campo que omitas se reescribe vacío.

Su propio historial de peticiones está paginado y se puede filtrar.

bash
curl -G https://api.unorouter.com/api/log/self \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN" \
  -d p=1 \
  -d page_size=100 \
  -d type=2 \
  -d start_timestamp=1789344000 \
  -d model_name=glm-5.3
ParámetroSignificado
type1 recarga, 2 consumo, 3 gestión, 5 error, 6 reembolso, 7 inicio de sesión. Omítalo para verlo todo.
start_timestamp, end_timestampSegundos Unix. Los dos no pueden abarcar más de diez años.
model_name, token_name, groupAcotar a un modelo, una clave o un grupo de proveedores.
request_id, upstream_request_idEncontrar una petición concreta, por nuestro id o por el del proveedor.

Añada p y page_size para paginar, con un tamaño de página máximo de 100. Un endpoint hermano, /api/log/self/stat, devuelve solo los totales para los mismos filtros: gasto, peticiones por minuto y tokens por minuto.

Para leer el saldo restante de una clave sin token de acceso, autentíquese con la propia clave:

bash
curl https://api.unorouter.com/api/usage/token/ \
  -H "Authorization: Bearer $UNOROUTER_API_KEY"
json
{
  "object": "token_usage",
  "name": "SillyTavern",
  "total_granted": 500000,
  "total_used": 231900,
  "total_available": 268100,
  "unlimited_quota": false,
  "model_limits_enabled": false,
  "expires_at": 0
}

Los endpoints de cuenta envuelven su contenido. Los paginados lo envuelven dos veces.

json
{ "success": true, "message": "", "data": { ... } }

{ "success": true, "message": "", "data": {
    "page": 1, "page_size": 20, "total": 137, "items": [ ... ]
} }

Los endpoints públicos del catálogo son la excepción y devuelven su objeto directamente, sin envoltorio.

La mayoría de los fallos siguen respondiendo HTTP 200 con success a false y un mensaje que explica el motivo. Compruebe ese campo en lugar del código de estado.

La autenticación es la excepción y responde con un estado real: 401 con AUTH_UNAUTHORIZED si la credencial no es válida, AUTH_TOKEN_EXPIRED si ha caducado, AUTH_SESSION_REVOKED tras un cierre de sesión, y 403 AUTH_INSUFFICIENT_PRIVILEGE cuando la cuenta no puede llamar a esa ruta.