Desarrolladores

La API de Opencran

Todos los modelos del catálogo, desde tu propio código. Una clave, un saldo, los mismos precios que en el estudio.

1 · Autenticación

Crea una clave en Ajustes, Claves de API. Envíala en cada solicitud como token Bearer. Las claves empiezan por oc_live_ y solo funcionan en Opencran; guárdalas en tu servidor, nunca en un navegador ni en una app.

curl
curl https://opencran.com/api/v1/api/catalog/me \
  -H 'Authorization: Bearer oc_live_...'

2 · Elige un modelo

Elige un modelo para ver una solicitud lista creada con sus propios campos. Los campos obligatorios ya están rellenados y cada ajuste opcional usa el valor predeterminado del modelo.

Modelo seleccionadoopencran/fast-image/text-to-image
Página del modelo →
Campos
NombreTipoObligatorioPredeterminado
prompttextsí-
aspect_ratio1:1 | 2:1 | 1:2 | 3:1 | 1:3 | 21:9 | ...no1:1

3 · Inicia una generación

Una sola llamada calcula el precio de tus entradas exactas y lo cobra de tu saldo. La respuesta llega al instante con el estado queued y la generación se ejecuta en segundo plano. Envía una cabecera Idempotency-Key para que una solicitud repetida nunca cobre dos veces.

curl
curl -X POST https://opencran.com/api/v1/api/catalog/generations \
  -H 'Authorization: Bearer oc_live_...' \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "modelId": "opencran/fast-image/text-to-image",
  "inputs": {
    "prompt": "a lighthouse on a cliff at dusk, soft light"
  }
}'

Consulta primero el precio (opcional)

Las mismas entradas, con precio calculado sin iniciar nada. La respuesta está en céntimos.

curl
curl -X POST https://opencran.com/api/v1/api/catalog/quote \
  -H 'Authorization: Bearer oc_live_...' \
  -H 'Content-Type: application/json' \
  -d '{"modelId":"opencran/fast-image/text-to-image","inputs":{"prompt":"a lighthouse on a cliff at dusk, soft light"}}'

4 · Consulta y descarga

Pide la generación cada pocos segundos hasta que el estado sea succeeded, failed o refunded. Si tiene éxito, descarga el archivo desde contentUrl con la misma clave. Un modelo de texto devuelve su respuesta en textOutput.

curl
curl https://opencran.com/api/v1/api/catalog/generations/GENERATION_ID \
  -H 'Authorization: Bearer oc_live_...'
curl
curl https://opencran.com/api/v1/api/catalog/generations/GENERATION_ID/content \
  -H 'Authorization: Bearer oc_live_...' \
  -o result.png

Endpoints

URL base: https://opencran.com/api/v1/api/catalog

GET/meTu clave y tu saldo
GET/modelsTodos los modelos
GET/models/detail?id=MODEL_IDUn modelo y sus campos
POST/quotePrecio para entradas exactas
POST/generationsIniciar una generación
GET/generationsTus generaciones recientes
GET/generations/IDEstado de una generación
GET/generations/ID/contentEl archivo resultante
DELETE/generations/IDEliminar una generación

Precios y saldo

Las generaciones por API usan el mismo saldo que el estudio y cuestan lo mismo. Todos los importes de la API están en céntimos de euro: costCents es lo que cobró una generación y balanceCents lo que queda.

Errores y límites

Los errores llegan como JSON con un código y un mensaje. 401: clave ausente, incorrecta o revocada. 400: un campo no es válido (los detalles lo indican). 402: saldo insuficiente. 429: demasiadas solicitudes, reduce el ritmo. Una generación fallida se reembolsa automáticamente. Los límites exactos se publicarán cuando lleguen las claves. 403 con una página HTML: la solicitud se detuvo antes de llegar a la API, normalmente por el User-Agent. El predeterminado de Python-urllib está bloqueado, envía el tuyo, por ejemplo User-Agent: my-app/1.0.