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.

EndpointAutenticaciónQué devuelve
GET /v1/modelsClave: Authorization: Bearer sk-… o x-api-key: sk-…Los modelos que sirve el grupo de esta clave
GET /v1/usageClave: solo Authorization: Bearer sk-…Cuánto puede gastar aún esta clave y su cuota
GET /api/v1/models/pricingNingunaEl 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"
}
CampoTipoSignificado
data[].idstringEl ID de modelo que se envía en las solicitudes. Es el único campo en el que conviene confiar
data[].capabilitiesstring[]Por ejemplo chat, reasoning, image_generation
data[].image_onlybooleantrue en modelos de imagen; ausente en los demás
data[].context_window, context_length, max_input_tokensinteger, tokensEl mismo valor con tres nombres por compatibilidad con clientes; ausente si no está publicado
data[].max_output_tokensinteger, tokensAusente si no está publicado
data[].createdinteger, segundos UnixHora de esta respuesta, no fecha de lanzamiento
data[].display_name, created_atstringSolo 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
  }
}
CampoTipoSignificado
balancenumberLo 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
remainingnumberMismo valor que balance
is_activebooleantrue cuando balance es mayor que 0
unitstringSiempre "USD". No indica la moneda; vea la nota siguiente
quota.remainingnumberMismo valor que balance
quota.api_key_remainingnumberCuota que le queda a esta clave; igual al saldo de la cuenta si la clave no tiene cuota
quota.totalnumberCuota de la clave; 0 significa sin cuota de clave
quota.usednumberTotal cobrado a esta clave hasta ahora
quota.unlimitedbooleantrue 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:

CasoEstadoCuerpo
Sin clave, o clave que no empieza por sk-401{"is_active": false, "balance": 0, "message": "missing or invalid api key"}
Clave desconocida o desactivada401"message": "invalid api key"
Clave caducada200"is_active": false, "message": "api key expired"
Miembro del equipo desactivado200"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/pricing

No 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"
        }
      ]
    }
  ]
}
CampoTipoSignificado
codeinteger0 si todo va bien
data[].platformstringLa 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[].idstringID de modelo que se envía
models[].namestringNombre visible
models[].vendorstringFabricante del modelo, por ejemplo openai, google; puede faltar
models[].seriesstringFamilia con la que la consola agrupa versiones; puede faltar
models[].categorystringchat, image, video, audio o embedding
models[].capabilitiesstring[]Por ejemplo chat, reasoning, image_generation, image_edit, video_generation, tts
models[].context_windowinteger, tokensAusente si no está publicado
models[].price_unitstringUnidad 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, outputnumber, USD por price_unitcached_input falta cuando no aplica la caché. Los modelos de voz usan solo input
models[].long_contextobjectPresente 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[].imageobjectPrecio por imagen según el tramo de resolución, por ejemplo {"1k": …, "2k": …, "4k": …}
models[].video_tokensobjectPrecio 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

EncabezadoSe envía enSignificado
x-request-idTodas las respuestasID de esta solicitud. Inclúyalo al informar de un problema
Retry-After429 por el límite de concurrencia; 429 y 503 cuando se conoce el tiempo de esperaSegundos que esperar antes de reintentar
Retry-After-Ms429 por el límite de concurrencia y otros 429 con espera conocidaLa 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.

En esta página