Desarrolladores

Guía para desarrolladores. SDK de OpenAI y Anthropic, curl y Claude Code.

Situra habla los formatos de OpenAI y de Anthropic. Apunta tu SDK, tu framework o tu agente de código a la URL de Situra, usa una clave situ_ y listo.

Guía rápida. De cero a la primera petición.

  1. Crea una cuenta

    En la consola de Situra, con tu correo profesional. Las claves de pruebas (situ_test_) funcionan desde el primer momento, antes de verificar la organización.

  2. Crea un proyecto

    Elige su nivel de residencia —ES, EU o Global— y el modo de registro. La residencia se aplica a todas las claves del proyecto.

    ESEUGlobal

  3. Genera una clave

    Con caducidad y, si quieres, una lista de modelos. El secreto se muestra una vez: guárdalo en tu gestor de secretos.

  4. Cambia la URL base

    En tu SDK o agente. El resto del código no cambia.

Los nombres de modelo de los ejemplos son ilustrativos. GET /v1/models devuelve los modelos que tu proyecto puede usar, según su nivel.

Frameworks como LangChain, LlamaIndex, Vercel AI SDK o LiteLLM se conectan con su cliente compatible con OpenAI, indicando esta URL base y la clave. No mantenemos integraciones específicas para cada uno.

app.py
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.situra.ai/v1",
    api_key=os.environ["SITURA_API_KEY"],  # situ_live_…
)

response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[{"role": "user", "content": "Resume este expediente en tres frases."}],
)
print(response.choices[0].message.content)

Playground de la consola. Prueba modelos antes de escribir código.

El playground de la consola envía peticiones reales a través de la pasarela con una de tus claves y muestra la residencia, la ruta, la latencia y el coste de cada respuesta.

Playground de la consola de Situra Playground de la consola de Situra
Consola real con datos de demostración.

Agentes de código. Claude Code y otros agentes, con la misma gobernanza.

Los agentes de código envían mucho contexto: código fuente, rutas, a veces secretos. Pasarlos por Situra aplica la residencia del proyecto, los presupuestos y el registro de metadatos igual que a cualquier otra aplicación. Las herramientas que aceptan una URL base compatible con OpenAI funcionan del mismo modo.

  • Una clave por equipo o por desarrollador, con caducidad
  • Presupuesto mensual con corte automático
  • Residencia UE o ES para el código fuente
  • Uso por clave en la consola
~/.zshrc
export ANTHROPIC_BASE_URL="https://api.situra.ai"
export ANTHROPIC_AUTH_TOKEN="situ_live_…"   # clave del proyecto «agentes»
export ANTHROPIC_MODEL="claude-sonnet-4-6"
export ANTHROPIC_DEFAULT_OPUS_MODEL="claude-opus-4-6"
export ANTHROPIC_DEFAULT_SONNET_MODEL="claude-sonnet-4-6"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="claude-haiku-4-5"

Formato Anthropic con curl

El endpoint /v1/messages acepta la clave en x-api-key, como la API de Anthropic.

Terminal
curl https://api.situra.ai/v1/messages \
  -H "x-api-key: $SITURA_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 256,
    "messages": [{"role": "user", "content": "Hola"}]
  }'

Claves de pruebas. Integra en CI antes de estar verificado.

Las claves situ_test_ las sirve un sandbox integrado en la pasarela: respuestas deterministas, recuentos de tokens realistas y coste cero. Funcionan incluso mientras tu organización está pendiente de verificación, así que puedes conectar tus pruebas desde el primer día.

Terminal
export SITURA_API_KEY="situ_test_…"

# El mismo código de antes. Con una clave de pruebas:
# - responde el sandbox integrado, de forma determinista
# - con recuentos de tokens realistas
# - coste 0 y registros marcados como sandbox
python app.py

Superficie de la API. Endpoints, cabeceras y errores.

Endpoints
Endpoints
POST/v1/chat/completionsOpenAI
POST/v1/embeddingsOpenAI
GET/v1/modelsOpenAI
POST/v1/messagesAnthropic
POST/v1/messages/count_tokensAnthropic
GET/.well-known/situra-attestation-keysJWKS
Cabeceras de respuesta
Cabeceras de respuesta
x-request-idIdentificador de la petición, el mismo que verás en la consola
x-situra-residencyNivel de la ruta que sirvió la petición: igual o más estricto que el del proyecto. Solo en respuestas servidas por una ruta (no en 502 ni 503)
x-situra-route-regionRegión de esa ruta, con la misma condición
x-situra-attemptsNúmero de rutas intentadas
x-situra-attestationAtestación firmada (JWT EdDSA) de dónde se procesó la petición; se verifica con las claves de /.well-known/situra-attestation-keys
x-ratelimit-limit-requests / -remaining-requestsLímite de peticiones por minuto (el más estricto entre el de la clave y el de la organización) y lo que queda
x-ratelimit-limit-tokens / -remaining-tokensLímite de tokens por minuto de la organización y lo que queda
retry-afterSegundos que esperar antes de reintentar (429 y algunos 503)

Códigos de estado

Códigos de estado
HTTPCódigo (error.code)Significado
401missing_api_key, invalid_api_key, expired_api_keyFalta la clave, no es válida, ha caducado o está revocada
402insufficient_balance, credit_limit_reached, budget_exceededSaldo insuficiente (prepago), límite de crédito alcanzado (facturación mensual), o presupuesto agotado con corte automático
403organization_pending_verificationLa organización está pendiente de verificación: hasta entonces solo funcionan las claves de pruebas (situ_test_)
403model_not_allowed, organization_suspended, regional_ingress_requiredModelo no permitido para la clave o el proyecto, organización suspendida, o petición de un proyecto ES que no entró por el endpoint regional de España
429rate_limit_exceeded, too_many_concurrent_requestsLímite de peticiones o de concurrencia; incluye retry-after
503no_routeNinguna ruta permitida para el nivel del proyecto. No es transitorio: reintentar no ayuda
502 / 504upstream_error, upstream_timeoutFallo del proveedor tras agotar las alternativas permitidas

Los errores llegan en el dialecto de quien llama: formato OpenAI en /v1/chat/… y /v1/embeddings, con el código en error.code; formato Anthropic en /v1/messages, con el tipo en error.type.

/v1/chat/completions · 503
{
  "error": {
    "message": "No route available.",
    "type": "service_unavailable",
    "code": "no_route",
    "param": null
  }
}
/v1/messages · 401
{
  "type": "error",
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key."
  }
}

Más sobre enrutado y alternativas

Beta privada · Q4 2026

Buscamos entre tres y cinco organizaciones para la beta.

Administraciones públicas españolas y organizaciones reguladas que quieran usar modelos de IA con la residencia de datos bajo control. El acompañamiento incluye la categorización ENS, el DPA y la integración.