docs.theus.pe/docs/api-v1 theus.peInicio docs

API para desarrolladores (/v1)

El gateway de Theus expone una API compatible con el estándar OpenAI en https://theus.pe/v1. Con una sola API key de Theus accedes a todo el catálogo de modelos y a TITAN, sin gestionar keys de ningún proveedor.

Base y autenticación

Base URL:  https://theus.pe/v1

Crea tu API key desde el dashboard de tu cuenta en theus.pe. El gateway acepta la key de dos formas equivalentes:

# Bearer (recomendado, estilo OpenAI)
Authorization: Bearer theus_mlp_...

# o como header propio
x-api-key: theus_mlp_...
Las keys se validan por hash (nunca se almacenan en texto plano) y tienen ámbito de inferencia. Una key revocada o expirada responde 401.

POST /v1/chat/completions

Inferencia de chat, compatible OpenAI. Usa cualquier id del catálogo como model — incluido titan, el orquestador. La respuesta nunca expone el modelo upstream: model devuelve el id Theus que pediste.

curl https://theus.pe/v1/chat/completions \
  -H "Authorization: Bearer $THEUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "titan",
    "messages": [
      {"role": "system", "content": "Eres un asistente de código conciso."},
      {"role": "user", "content": "Escribe una función en Python que valide un RUC peruano."}
    ],
    "max_tokens": 800,
    "stream": false
  }'

Respuesta (formato chat.completion estándar):

{
  "id": "chatcmpl-…",
  "object": "chat.completion",
  "model": "titan",
  "choices": [
    {"index": 0, "message": {"role": "assistant", "content": "…"}, "finish_reason": "stop"}
  ],
  "usage": {"prompt_tokens": …, "completion_tokens": …, "total_tokens": …}
}

Streaming (SSE)

Con "stream": true la respuesta llega como text/event-stream: chunks chat.completion.chunk con deltas, un chunk final con usage y el terminador data: [DONE]. El gateway pide usage al upstream automáticamente (stream_options.include_usage) para facturar con datos reales; el chunk final extra con choices vacíos es estándar e inocuo.

curl -N https://theus.pe/v1/chat/completions \
  -H "Authorization: Bearer $THEUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "titan", "messages": [{"role": "user", "content": "Hola"}], "stream": true}'

data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"delta":{"content":"…"}}], …}
…
data: [DONE]
El gateway también traduce incompatibilidades comunes por ti: si un modelo de razonamiento upstream exige max_completion_tokens en lugar de max_tokens, el reintento es automático. Puedes seguir enviando max_tokens clásico.

POST /v1/embeddings

Embeddings compatibles OpenAI, con el alias del catálogo theus-embed (la memoria semántica del CLI). input acepta un string no vacío o una lista. Passthrough de parámetros estándar: encoding_format, dimensions, user.

curl https://theus.pe/v1/embeddings \
  -H "Authorization: Bearer $THEUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "theus-embed",
    "input": ["función que valida el token de sesión", "handler de pagos"]
  }'

La respuesta es el objeto list de embeddings estándar, con model enmascarado al id Theus. El consumo entra al mismo ledger de tokens que el chat.

POST /v1/images/generations

Generación de imágenes, compatible OpenAI, con el modelo del catálogo gpt-image-1 (plan Studio AI o superior). La imagen vuelve en la respuesta como b64_json (base64); el gateway no devuelve URLs upstream.

curl https://theus.pe/v1/images/generations \
  -H "Authorization: Bearer $THEUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-1",
    "prompt": "logo minimalista de una forja, fondo oscuro, trazo dorado",
    "size": "1024x1024"
  }'

Respuesta:

{
  "created": 1767…,
  "data": [
    {"b64_json": "iVBORw0KGgo…"}
  ],
  "usage": {…}
}
Cobro en Theus Tokens: la imagen se descuenta del mismo saldo de tu plan usando el usage real que reporta el upstream para esa generación. Desde el CLI basta pedir «genera una imagen de…»: el agente llama a este endpoint y guarda el archivo en theus-media/ dentro de tu proyecto.

POST /v1/videos

Texto a video (clips cortos) con el modelo del catálogo sora-2 (plan Studio AI o superior). La generación es asíncrona: crear el clip devuelve un job con id y status, que luego consultas y descargas.

curl https://theus.pe/v1/videos \
  -H "Authorization: Bearer $THEUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sora-2",
    "prompt": "un colibrí en cámara lenta sobre flores andinas",
    "seconds": "8"
  }'

Respuesta (job de video):

{
  "id": "video_…",
  "object": "video",
  "model": "sora-2",
  "status": "queued",
  "progress": 0,
  "seconds": "8"
}

GET /v1/videos/{id} — estado del job

curl https://theus.pe/v1/videos/video_… \
  -H "Authorization: Bearer $THEUS_API_KEY"

Devuelve el mismo objeto video con status (queuedin_progresscompleted | failed) y progress. Sondea hasta completed.

GET /v1/videos/{id}/content — descargar el clip

curl -o clip.mp4 https://theus.pe/v1/videos/video_…/content \
  -H "Authorization: Bearer $THEUS_API_KEY"
Cobro en Theus Tokens: el video se cobra con una estimación por segundos al crear el job (el upstream no reporta usage por token en video); consultar el estado y descargar el contenido no consumen cuota adicional. Desde el CLI, el agente crea el job, espera y guarda el .mp4 en theus-media/.

GET /v1/models

Catálogo servible en formato lista OpenAI. Solo aparecen los modelos que hoy resuelven a un proveedor operativo; cada entrada añade name, modality, tier y status.

curl https://theus.pe/v1/models \
  -H "Authorization: Bearer $THEUS_API_KEY"

POST /v1/responses

Compatibilidad básica con el API Responses: acepta input como texto o lista de mensajes {role, content}, más max_output_tokens, temperature y top_p, y responde un objeto response con output_text. El streaming de Responses no está implementado (501): para streaming usa /v1/chat/completions con stream: true.

Errores

Los errores del gateway usan el formato OpenAI:

{
  "error": {
    "message": "Alcanzaste el limite de solicitudes por minuto del plan Pro Code. Reintenta en 12 segundos.",
    "type": "theus_error",
    "param": null,
    "code": "rate_limit_exceeded"
  }
}
HTTPcodeQué significa
401unauthorizedAPI key Theus inválida o ausente.
403insufficient_scopeLa credencial no tiene el ámbito de inferencia (p. ej. un token de solo perfil).
404model_not_foundEl modelo pedido no está disponible; el mensaje incluye los modelos servibles hoy.
429rate_limit_exceededSuperaste las solicitudes por minuto de tu plan. Respeta el header Retry-After.
429quota_exceededAgotaste los tokens incluidos en tu plan para el periodo; el mensaje indica la fecha de renovación y Retry-After los segundos hasta entonces.
501streaming_not_supportedStreaming pedido en /v1/responses; usa /v1/chat/completions.
502upstream_errorEl proveedor upstream falló; reintenta o cambia de modelo. Los fallos no consumen cuota de tokens.
503model_gateway_not_configuredEl gateway autentica pero no hay ningún proveedor upstream disponible (condición de operación, no de tu cuenta).

Rate limits y cuotas

Cada plan define solicitudes por minuto (por API key) y tokens incluidos por periodo. Ambos límites responden 429 con header Retry-After.

PlanSolicitudes/minTokens incluidos
Free550 mil
Pro Code601.5 M
Studio AI1205 M
Max Agent24015 M
El uso se contabiliza con el usage real del upstream cuando existe; si el proveedor no lo reporta, el gateway aplica una estimación conservadora por caracteres. Puedes consultar tu consumo del periodo en el dashboard de tu cuenta.
Theus — agente de código local-first y multimodelo · Hecho en Perú