API de cuenta y catálogo
GET /v1/models, GET /v1/usage y el endpoint público GET /api/v1/models/pricing: autenticación, respuestas de ejemplo, tipos y unidades de los campos, y los encabezados de respuesta que envía HopBase.
Tres endpoints de solo lectura indican a su código qué modelos puede llamar una clave, cuánto puede gastar todavía y cuánto cuesta cada modelo a precio de lista. Ninguno se factura y ninguno exige saldo positivo.
| Endpoint | Autenticación | Qué devuelve |
|---|---|---|
GET /v1/models | Clave: Authorization: Bearer sk-… o x-api-key: sk-… | Los modelos que sirve el grupo de esta clave |
GET /v1/usage | Clave: solo Authorization: Bearer sk-… | Cuánto puede gastar aún esta clave y su cuota |
GET /api/v1/models/pricing | Ninguna | El catálogo público de modelos con precios de lista |
Listar modelos
curl https://api.hop-base.com/v1/models \
-H "Authorization: Bearer sk-your-key"La lista contiene solo los modelos del grupo al que está vinculada la clave y llega completa en una sola respuesta (sin paginación). Las claves de grupos compatibles con OpenAI reciben una lista con formato OpenAI:
{
"object": "list",
"data": [
{
"id": "gpt-6-astra",
"object": "model",
"created": 1790222400,
"owned_by": "hopbase",
"capabilities": ["chat", "reasoning"],
"context_window": 1050000,
"context_length": 1050000,
"max_input_tokens": 1050000,
"max_output_tokens": 128000
}
]
}Las claves de grupos Claude reciben el formato de Anthropic:
{
"object": "list",
"data": [
{
"id": "claude-opus-5-5",
"object": "model",
"type": "model",
"display_name": "Claude Opus 5.5",
"created_at": "2026-09-22T00:00:00Z"
}
],
"has_more": false,
"first_id": "claude-opus-5-5",
"last_id": "claude-haiku-4-5-20251001"
}| Campo | Tipo | Significado |
|---|---|---|
data[].id | string | El ID de modelo que se envía en las solicitudes. Es el único campo en el que conviene confiar |
data[].capabilities | string[] | Por ejemplo chat, reasoning, image_generation |
data[].image_only | boolean | true en modelos de imagen; ausente en los demás |
data[].context_window, context_length, max_input_tokens | integer, tokens | El mismo valor con tres nombres por compatibilidad con clientes; ausente si no está publicado |
data[].max_output_tokens | integer, tokens | Ausente si no está publicado |
data[].created | integer, segundos Unix | Hora de esta respuesta, no fecha de lanzamiento |
data[].display_name, created_at | string | Solo grupos Claude; created_at es la fecha de lanzamiento del modelo (RFC 3339) |
has_more, first_id y last_id existen solo por compatibilidad con los SDK: la lista nunca se pagina, así que no pagine con ellos. Algunos modelos pueden no traer campos distintos de id; trate los campos desconocidos como opcionales.
Saldo y cuota
curl https://api.hop-base.com/v1/usage \
-H "Authorization: Bearer sk-your-key"{
"is_active": true,
"balance": 125.4,
"remaining": 125.4,
"unit": "USD",
"quota": {
"remaining": 125.4,
"api_key_remaining": 125.4,
"total": 0,
"used": 3.12,
"unlimited": true
}
}| Campo | Tipo | Significado |
|---|---|---|
balance | number | Lo que esta clave puede gastar ahora mismo. Clave sin cuota propia: el saldo de la cuenta. Clave con cuota: la cuota que le queda. Las claves de miembros de equipo y departamentos se limitan además a la cuota restante del periodo del miembro y del departamento |
remaining | number | Mismo valor que balance |
is_active | boolean | true cuando balance es mayor que 0 |
unit | string | Siempre "USD". No indica la moneda; vea la nota siguiente |
quota.remaining | number | Mismo valor que balance |
quota.api_key_remaining | number | Cuota que le queda a esta clave; igual al saldo de la cuenta si la clave no tiene cuota |
quota.total | number | Cuota de la clave; 0 significa sin cuota de clave |
quota.used | number | Total cobrado a esta clave hasta ahora |
quota.unlimited | boolean | true cuando la clave no tiene cuota propia |
Los importes están en la moneda de su saldo
Todos los importes están en la moneda en la que se lleva el saldo de su cuenta: los mismos números que muestra la consola en su saldo y en Consumo. No deduzca la moneda de unit.
Una clave con cuota propia sigue descontando del saldo de la cuenta: si la cuenta se queda sin saldo antes, las solicitudes devuelven 402 aunque aquí balance muestre cuota disponible.
Este endpoint no usa el cuerpo de error estándar. Los fallos tienen este aspecto:
| Caso | Estado | Cuerpo |
|---|---|---|
Sin clave, o clave que no empieza por sk- | 401 | {"is_active": false, "balance": 0, "message": "missing or invalid api key"} |
| Clave desconocida o desactivada | 401 | "message": "invalid api key" |
| Clave caducada | 200 | "is_active": false, "message": "api key expired" |
| Miembro del equipo desactivado | 200 | "is_active": false, "message": "member disabled" |
Decida según is_active, no solo según el estado HTTP. Para el detalle de cada cargo, abra Consumo en la consola.
Catálogo público de modelos
curl https://api.hop-base.com/api/v1/models/pricingNo requiere clave. La respuesta admite solicitudes de origen cruzado desde cualquier sitio y puede almacenarse en caché hasta 5 minutos (Cache-Control: public, max-age=300). Los precios son los de lista en USD antes de la tarifa de su grupo; lo que usted paga realmente por cada modelo aparece en el catálogo de modelos con la sesión iniciada.
{
"code": 0,
"message": "ok",
"data": [
{
"platform": "openai",
"models": [
{
"id": "gpt-6-astra",
"name": "GPT-6 Astra",
"context_window": 1050000,
"capabilities": ["chat", "reasoning"],
"vendor": "openai",
"category": "chat",
"input": 10,
"cached_input": 1,
"output": 50,
"long_context": {
"threshold": 272000,
"input_multiplier": 2,
"cached_multiplier": 2,
"output_multiplier": 1.5
},
"price_unit": "token"
}
]
},
{
"platform": "minimax",
"models": [
{
"id": "speech-2.8-hd",
"name": "MiniMax Speech 2.8 HD",
"capabilities": ["tts"],
"vendor": "minimax",
"series": "minimax-speech",
"category": "audio",
"input": 100,
"output": 0,
"price_unit": "character"
}
]
}
]
}| Campo | Tipo | Significado |
|---|---|---|
code | integer | 0 si todo va bien |
data[].platform | string | La familia de integración por la que se sirve el modelo (por ejemplo openai, claude, gemini, kling). No es el fabricante del modelo; para eso vea vendor |
models[].id | string | ID de modelo que se envía |
models[].name | string | Nombre visible |
models[].vendor | string | Fabricante del modelo, por ejemplo openai, google; puede faltar |
models[].series | string | Familia con la que la consola agrupa versiones; puede faltar |
models[].category | string | chat, image, video, audio o embedding |
models[].capabilities | string[] | Por ejemplo chat, reasoning, image_generation, image_edit, video_generation, tts |
models[].context_window | integer, tokens | Ausente si no está publicado |
models[].price_unit | string | Unidad de todos los precios de la entrada: token = por 1M de tokens, second = por segundo de video, image = por imagen, character = por 1M de caracteres facturables |
models[].input, cached_input, output | number, USD por price_unit | cached_input falta cuando no aplica la caché. Los modelos de voz usan solo input |
models[].long_context | object | Presente cuando hay tramo de contexto largo: por encima de threshold tokens de entrada, toda la solicitud se factura con input_multiplier / cached_multiplier / output_multiplier |
models[].image | object | Precio por imagen según el tramo de resolución, por ejemplo {"1k": …, "2k": …, "4k": …} |
models[].video_tokens | object | Precio de video por tramo (resolución, audio, medios de referencia). La unidad sigue a price_unit: por 1M de tokens de video con token, por segundo con second. El nombre de la clave es histórico |
Un modelo puede aparecer bajo más de un platform cuando se ofrece en más de un grupo. Pueden añadirse campos nuevos; ignore los que no reconozca.
Encabezados de respuesta
| Encabezado | Se envía en | Significado |
|---|---|---|
x-request-id | Todas las respuestas | ID de esta solicitud. Inclúyalo al informar de un problema |
Retry-After | 429 por el límite de concurrencia; 429 y 503 cuando se conoce el tiempo de espera | Segundos que esperar antes de reintentar |
Retry-After-Ms | 429 por el límite de concurrencia y otros 429 con espera conocida | La misma espera en milisegundos |
HopBase no envía encabezados con su límite de concurrencia, las solicitudes en curso ni el saldo restante. Use GET /v1/usage para el saldo y consulte Concurrencia, tiempos de espera y facturación para los límites. Algunas respuestas de modelos traen sus propios encabezados de límite de tasa (x-ratelimit-*, anthropic-ratelimit-*); no describen los límites de su cuenta ni de su clave, así que no regule el tráfico con ellos.
Base URLs y protocolos
Elija la URL compatible con OpenAI o Anthropic de HopBase para cada modelo y cliente.
Concurrencia, tiempos de espera y facturación
Límites de concurrencia de HopBase, comportamiento de los tiempos de espera por endpoint y valores recomendados en el cliente, límite de tamaño de la petición y cuándo se factura exactamente.