Desenvolvedores

A API da Opencran

Todos os modelos do catálogo, a partir do seu próprio código. Uma chave, um saldo, os mesmos preços do estúdio.

1 · Autenticação

Crie uma chave em Configurações, Chaves de API. Envie-a em cada requisição como token Bearer. As chaves começam com oc_live_ e funcionam apenas na Opencran; mantenha-as no seu servidor, nunca em um navegador ou aplicativo.

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

2 · Escolha um modelo

Escolha um modelo para ver uma requisição pronta montada com os campos dele. Os campos obrigatórios já estão preenchidos e cada configuração opcional usa o padrão do modelo.

Modelo selecionadoopencran/fast-image/text-to-image
Página do modelo →
Campos
NomeTipoObrigatórioPadrão
prompttextsim-
aspect_ratio1:1 | 2:1 | 1:2 | 3:1 | 1:3 | 21:9 | ...não1:1

3 · Inicie uma geração

Uma única chamada calcula o preço das suas entradas exatas e debita do seu saldo. A resposta volta na hora com o status queued e a geração roda em segundo plano. Envie um cabeçalho Idempotency-Key para que uma requisição repetida nunca cobre duas vezes.

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"
  }
}'

Confira o preço antes (opcional)

As mesmas entradas, com o preço calculado sem iniciar nada. A resposta vem em centavos.

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 · Consulte e baixe

Consulte a geração a cada poucos segundos até o status ser succeeded, failed ou refunded. Em caso de sucesso, baixe o arquivo de contentUrl com a mesma chave. Um modelo de texto retorna a resposta em 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/meSua chave e seu saldo
GET/modelsTodos os modelos
GET/models/detail?id=MODEL_IDUm modelo e seus campos
POST/quotePreço para entradas exatas
POST/generationsIniciar uma geração
GET/generationsSuas gerações recentes
GET/generations/IDStatus de uma geração
GET/generations/ID/contentO arquivo de resultado
DELETE/generations/IDExcluir uma geração

Preços e saldo

As gerações pela API usam o mesmo saldo do estúdio e custam o mesmo. Todos os valores na API estão em centavos de euro: costCents é o que uma geração cobrou e balanceCents é o que resta.

Erros e limites

Os erros chegam como JSON com um código e uma mensagem. 401: chave ausente, incorreta ou revogada. 400: um campo é inválido (os detalhes o indicam). 402: saldo insuficiente. 429: requisições demais, reduza o ritmo. Uma geração com falha é reembolsada automaticamente. Os limites exatos serão publicados quando as chaves forem lançadas. 403 com uma página HTML: o pedido foi bloqueado antes de chegar à API, geralmente por causa do User-Agent. O padrão do Python-urllib é bloqueado, envie o seu, por exemplo User-Agent: my-app/1.0.