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 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.
opencran/fast-image/text-to-image| Nome | Tipo | Obrigatório | Padrão |
|---|---|---|---|
| prompt | text | sim | - |
| aspect_ratio | 1:1 | 2:1 | 1:2 | 3:1 | 1:3 | 21:9 | ... | não | 1: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 -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 -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 https://opencran.com/api/v1/api/catalog/generations/GENERATION_ID \
-H 'Authorization: Bearer oc_live_...'curl https://opencran.com/api/v1/api/catalog/generations/GENERATION_ID/content \
-H 'Authorization: Bearer oc_live_...' \
-o result.pngEndpoints
URL base: https://opencran.com/api/v1/api/catalog
| GET | /me | Sua chave e seu saldo |
| GET | /models | Todos os modelos |
| GET | /models/detail?id=MODEL_ID | Um modelo e seus campos |
| POST | /quote | Preço para entradas exatas |
| POST | /generations | Iniciar uma geração |
| GET | /generations | Suas gerações recentes |
| GET | /generations/ID | Status de uma geração |
| GET | /generations/ID/content | O arquivo de resultado |
| DELETE | /generations/ID | Excluir 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.