Início rápido com os SDKs oficiais
Os SDKs oficiais cobrem todo o fluxo (criar → consultar → baixar), com chaves de idempotência automáticas e erros tipados. O SDK para Node não tem dependências; o de Python depende só de httpx. Por enquanto eles são distribuídos como repositórios no GitHub; a publicação no npm e no PyPI será anunciada separadamente.
Node
npm install github:openaiav/sdk-node # npm release to be announced
import { OpenAiav } from '@openaiav/sdk'
const client = new OpenAiav({ apiKey: process.env.OPENAIAV_API_KEY })
const task = await client.generations.createAndWait({
model: 'seedance-2.5-oa', prompt: 'She walks into the sunlight.',
resolution: '480p', aspectRatio: 'adaptive', durationSeconds: 4,
generateAudio: false
})
await client.generations.downloadToFile(task.id, './out.mp4')Python
pip install git+https://github.com/openaiav/sdk-python # PyPI release to be announced
from openaiav import OpenAiav
client = OpenAiav(os.environ["OPENAIAV_API_KEY"])
task = client.generations.create_and_wait({
"model": "seedance-2.5-oa", "prompt": "She walks into the sunlight.",
"resolution": "480p", "aspectRatio": "adaptive", "durationSeconds": 4,
"generateAudio": False,
})
client.generations.download_to_file(task["id"], "./out.mp4")Integração em quatro passos
- Use a variável de ambiente
OPENAIAV_API_KEYdo servidor para chamar https://api.openaiav.com/v1/models e ler as chaves de modelo, os preços e os reference_modes atuais. - Envie prompt, referenceMode e referenceImages via POST para /v1/generations. As imagens de referência são URLs HTTPS públicas e não precisam de pré-cadastro. Em caso de sucesso, a resposta é HTTP 201.
- Guarde o id retornado e consulte o mesmo GET /v1/generations/{id} após poll_after_ms. Continue aguardando em processing, result_pending e submission_unknown; não crie outra tarefa.
- Quando o status for succeeded, baixe com GET /v1/generations/{id}/content. Uma resposta completa é HTTP 200, e um único intervalo de bytes é 206.
Autenticação e idempotência
export OPENAIAV_API_KEY='oav_...'
# One Idempotency-Key per create intent: every run of this script makes a new one.
# Reuse it only when retrying this same create. No uuidgen? IDEMPOTENCY_KEY=$(python3 -c 'import uuid;print(uuid.uuid4())')
IDEMPOTENCY_KEY=$(uuidgen | tr 'A-Z' 'a-z')
echo "Idempotency-Key: $IDEMPOTENCY_KEY (reuse this value only when retrying this same create)"Envie Authorization: Bearer oav_... em toda requisição e mantenha a chave no servidor. A criação exige generation:create; o polling e o download exigem generation:read. Gere uma Idempotency-Key nova (um UUID) para cada intenção de criação, para que cada execução de um exemplo receba uma chave nova; reutilize-a apenas ao repetir essa mesma criação depois de um resultado de rede incerto e nunca use a mesma chave com corpos diferentes.
Cabeçalhos da requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Authorization | string | Obrigatório | Toda requisição a /v1 usa Bearer oav_...; guarde a chave no seu servidor. |
| Idempotency-Key | string | Obrigatório ao criar tarefas | Gere um valor novo (por exemplo, um UUID) para cada intenção de criação e reutilize-o apenas ao repetir essa mesma criação; com o mesmo valor e o mesmo corpo, nada é criado nem cobrado duas vezes. |
| Content-Type | string | Obrigatório no POST | A criação de gerações usa application/json. |
Endpoints
| Método | Caminho | Sucesso | Permissão | Descrição |
|---|---|---|---|---|
| GET | /v1/models | 200 | Qualquer chave de API válida | Lê os modelos disponíveis para venda, preços, resoluções, durações e reference_modes. Confira os recursos no catálogo antes de enviar. |
| POST | /v1/generation-quotes | 201 | generation:create | Mostra o preço atual sem garanti-lo. A criação calcula o preço novamente e cobra exatamente o reserved_usd da resposta como valor fixo; uma tarefa com falha é totalmente reembolsada. quoteId continua aceito, e expires_at apenas sugere quando atualizar. |
| POST | /v1/generations | 201 | generation:create | Cria uma tarefa assíncrona; envie as imagens de referência e o referenceMode na mesma requisição JSON. |
| GET | /v1/generations/{id} | 200 | generation:read | Consulta a mesma tarefa conforme poll_after_ms até ela chegar a um estado final. |
| GET | /v1/generations/{id}/content | 200 / 206 | generation:read | Baixa o resultado depois da conclusão; uma requisição com um único intervalo de bytes retorna 206. |
Passo 1: ler os recursos do modelo
Não fixe no código os recursos dos modelos. Envie apenas os modos listados em reference_modes e oculte ou bloqueie combinações incompatíveis antes do envio. O exemplo mínimo mostra uma requisição de 4 segundos, 480p e sem áudio com seedance-2.5-oa.
curl --fail-with-body 'https://api.openaiav.com/v1/models' \
--header "Authorization: Bearer $OPENAIAV_API_KEY"Exemplo mínimo de vídeo público
O exemplo traz o fluxo completo: criar → consultar a mesma tarefa → baixar. first_frame usa uma imagem de referência e adaptive; generateAudio=false evita pedir áudio. Os códigos de sucesso são 201, 200 e 200/206; em caso de falha, veja primeiro o HTTP e depois o error.code.
# Keep OPENAIAV_API_KEY in an environment variable; do not paste secrets into shell history.
# One Idempotency-Key per create intent: every run of this script makes a new one.
# Reuse it only when retrying this same create. No uuidgen? IDEMPOTENCY_KEY=$(python3 -c 'import uuid;print(uuid.uuid4())')
IDEMPOTENCY_KEY=$(uuidgen | tr 'A-Z' 'a-z')
echo "Idempotency-Key: $IDEMPOTENCY_KEY (reuse this value only when retrying this same create)"
# 1. Create — success: HTTP 201. On failure, the response body contains error.code.
# Lost response (timeout or dropped connection)? Re-run this same command in this shell:
# the unchanged $IDEMPOTENCY_KEY returns the original task instead of creating a second one.
curl --fail-with-body --request POST 'https://api.openaiav.com/v1/generations' \
--header "Authorization: Bearer $OPENAIAV_API_KEY" \
--header "Idempotency-Key: $IDEMPOTENCY_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "seedance-2.5-oa",
"prompt": "A young woman finishes a letter and walks from a stone cottage into the morning sunlight",
"resolution": "480p",
"aspectRatio": "adaptive",
"durationSeconds": 4,
"referenceMode": "first_frame",
"referenceImages": [
"https://developers.openaiav.com/samples/seedance-letter-reference.webp"
],
"generateAudio": false,
"outputFormat": "mp4"
}'
# 2. Save the returned id as TASK_ID. Poll the same id — success: HTTP 200.
curl --fail-with-body 'https://api.openaiav.com/v1/generations/TASK_ID' \
--header "Authorization: Bearer $OPENAIAV_API_KEY"
# Repeat step 2 after poll_after_ms until status is succeeded or failed.
# Never recreate a task whose status is submission_unknown.
# 3. After succeeded, download — success: HTTP 200 (or 206 with Range).
curl --fail-with-body --location 'https://api.openaiav.com/v1/generations/TASK_ID/content' \
--header "Authorization: Bearer $OPENAIAV_API_KEY" \
--output 'result.mp4'Parâmetros da requisição
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| model | string | Obrigatório | Use o valor model de GET /v1/models; o exemplo mínimo de vídeo usa seedance-2.5-oa. |
| prompt | string | Obrigatório | De 1 a 4000 caracteres. A referência Omni pode citar as imagens na ordem do array como @Image1, @Image2 e assim por diante. |
| resolution | string | Opcional | Precisa constar em resolutions do modelo escolhido; o exemplo mínimo de vídeo usa 480p. |
| aspectRatio | string | Opcional | Deve constar em aspect_ratios do modelo selecionado; use adaptive quando o modelo exigir isso em requisições com quadro inicial. Em modelos de imagem que listam image_size_options, envie resolution e aspectRatio como um par dessa lista: nem toda proporção existe em todas as resoluções. |
| durationSeconds | integer | Opcional | A duração do vídeo deve ser indicada com durationSeconds como inteiro dentro de duration_seconds do catálogo; se omitida, usa-se o mínimo do modelo. O exemplo mínimo usa 4 segundos. |
| referenceMode | first_frame | omni_reference | Obrigatório com imagens de referência para vídeo | Use apenas com modelos de vídeo Seedance que listem o modo explicitamente em reference_modes. Cada requisição pode escolher só um modo. |
| referenceImages | string[] | Informe junto com referenceMode | URLs públicas de imagens HTTPS. first_frame exige exatamente uma imagem; confira o limite de omni_reference em reference_images_max. |
| inputImages | string[] | Opcional | Imagens de entrada (imagens de referência) para gerar imagem a partir de imagem, só em modelos de imagem. Cada item é uma URL de imagem HTTPS pública ou uma data URL no formato data:image/png;base64,…, data:image/jpeg;base64,… ou data:image/webp;base64,…. Confira os limites de cada modelo em GET /v1/models: input_images_max, input_image_max_bytes (por imagem, por URL ou data URL) e input_image_mime_types. Imagens de referência podem aumentar a cobrança. Não as combine com um modo de referência de vídeo. |
| generateAudio | boolean | Opcional | O padrão é true em modelos de vídeo com áudio. O exemplo mais barato envia false explicitamente; o catálogo atual não tem cobrança adicional separada de áudio, e GET /v1/models sempre prevalece na cobrança. |
| outputFormat | mp4 | mov | Opcional | Escolha apenas entre os output_formats do catálogo; o exemplo mínimo usa mp4. |
Modos de referência
first_frame
first_frame: a imagem de referência vira o quadro inicial e define a composição. Envie exatamente um item em referenceImages; aspectRatio vem de aspect_ratios do modelo e fica fixo em adaptive quando o catálogo oferece essa opção (o resultado acompanha a imagem de referência).
first_last_frame: envie exatamente 2 referenceImages. A ordem do array é quadro inicial e depois quadro final, e o modelo gera o que fica entre eles. As duas imagens não precisam ter as mesmas dimensões. Os modos de quadro não podem ser combinados com omni_reference.
{
"model": "seedance-2.5-oa",
"prompt": "A young woman finishes a letter and walks from a stone cottage into the morning sunlight",
"resolution": "480p",
"aspectRatio": "adaptive",
"durationSeconds": 4,
"referenceMode": "first_frame",
"referenceImages": [
"https://developers.openaiav.com/samples/seedance-letter-reference.webp"
],
"generateAudio": false,
"outputFormat": "mp4"
}omni_reference
omni_reference: a mídia de referência mantém a consistência do assunto, do estilo e do cenário sem virar o quadro inicial. Além de referenceImages, modelos compatíveis também aceitam referenceVideos e referenceAudios; os limites por tipo estão na tabela abaixo, e qualquer tipo que o catálogo não declare retorna 400 no envio. Os prompts citam os itens pela ordem dentro de cada tipo: @Image1, @Video1, @Audio1.
{
"model": "seedance-2.5-oa",
"prompt": "Keep the identity and outfit from @Image1; a young woman walks from a stone cottage into the morning sunlight",
"resolution": "480p",
"aspectRatio": "16:9",
"durationSeconds": 4,
"referenceMode": "omni_reference",
"referenceImages": [
"https://developers.openaiav.com/samples/seedance-letter-reference.webp"
],
"generateAudio": false,
"outputFormat": "mp4"
}Compatibilidade atual
Uma única integração para todos os modelos de vídeo: mesmo endpoint, mesmos campos. Trocar de modelo significa mudar só o model. Todas as diferenças são declaradas pelo catálogo, e a tabela abaixo é esse catálogo: para cada modelo, quais modos de referência ele aceita e quanto de cada tipo de mídia. Tudo o que o catálogo não declarar é recusado explicitamente no envio, nunca ignorado em silêncio.
Detalhes do quadro inicial e encadeamento pelo quadro final
Detalhes do quadro inicial: first_frame e omni_reference são mutuamente exclusivos, então cada requisição escolhe só um. Com a referência Omni, você pode direcionar uma imagem de referência para a abertura pelo prompt, mas, quando o quadro inicial precisar ser fiel, envie essa imagem no modo first_frame. No Seedance 2.5, tarefas com quadro inicial fixam a proporção em adaptive (o resultado acompanha o quadro inicial). Encadear pelo quadro final: passe returnLastFrame: true na criação e, se a tarefa for concluída, ela também retorna last_frame_url (um PNG sem marca d’água no tamanho do vídeo, guardado por 24 horas). Use essa URL diretamente como referenceImages do first_frame da próxima requisição para encadear várias cenas, sem nenhum pré-cadastro.
Preço de vídeos de referência
- Vídeos de referência com duração mensurável são cobrados a preço fixo, que você pode ver antes em uma prévia. Se a duração não puder ser medida, a prévia é recusada sem cobrança.
- Chame
POST /v1/generation-quotespara ver o preço atual. Vídeos por URL são medidos e precificados novamente na criação; oreserved_usdda resposta é o valor real.quoteIdnão fixa o preço, eexpires_atapenas sugere quando atualizar. - O catálogo define duração por vídeo e total, quantidade e mínimo faturável. Cada vídeo de referência deve ter entre 2 e 15 segundos na série Seedance 2.0 e entre 2 e 30 segundos nos demais modelos compatíveis. Uma duração medida fora dos limites retorna 422
REFERENCE_DURATION_OUT_OF_RANGEsem cobrança. - Use um link direto HTTPS público para MP4/MOV. Arquivos com tamanho conhecido acima de 200 MiB retornam
REFERENCE_VIDEO_TOO_LARGE; se o tamanho não for informado, o orçamento ainda pode ser gerado. URLs privadas retornamREFERENCE_URL_NOT_PUBLICe sondas ocupadas 429REFERENCE_PROBE_BUSY. O limite de upload no console é 32 MiB. - Cada tarefa é cobrada pelo preço do seu orçamento,
reserved_usd, na criação; no sucesso, essa é a cobrança final, e na falha ela é totalmente reembolsada. Oprice_usdde uma prévia equivale ao que a criação cobraria naquele momento; informe a duração de saída, não -1. - URLs públicas de vídeo são verificadas na prévia e novamente na criação, depois enviadas diretamente sem armazenamento ou registro. Mantenha o conteúdo estável. Uploads usam outra rota; restrições para rostos reais continuam valendo.
Preços dos modelos de imagem
- Os modelos de imagem são cobrados por imagem conforme
resolutioneaspectRatio(image_pricing.rates). Nos modelosgpt-image-*enano-banana-*, os preços listados valem para um prompt curto sem imagens de referência. - Nesses modelos, imagens de referência e prompts mais longos aumentam a cobrança. Antes de criar uma tarefa, chame
POST /v1/generation-quotescom o mesmo corpo:price_usdé a cobrança dessa requisição pelos preços atuais. Tarefas com falha são totalmente reembolsadas.
Polling e download
Somente succeeded e failed são estados finais. submission_unknown indica que a aceitação está sendo confirmada e result_pending em finalização: guarde o ID da tarefa original, continue consultando e nunca repita a criação. Após a conclusão, use o caminho autenticado /content em vez de depender de endereços fora do Open AIav. Os resultados ficam guardados por 24 horas (a resposta de detalhe traz output_expires_at; downloads expirados retornam 410 OUTPUT_EXPIRED, então salve a tempo).
| Status | Final | Ação |
|---|---|---|
| processing | Não | Aceita; consulte novamente após poll_after_ms. |
| result_pending | Não | O resultado está sendo finalizado. Guarde o ID e continue consultando a mesma tarefa; não a recrie. |
| submission_unknown | Não | A aceitação está sendo confirmada; não repita a criação. Guarde o ID da tarefa original e continue consultando. |
| succeeded | Sim | Concluída; baixe o resultado com /content. |
| failed | Sim | Falhou em definitivo e o valor foi totalmente reembolsado; confira error_code. |
Migração de endpoints desativados
/v1/assets, /v1/assets/content, /v1/assets/{id}, /v1/asset-groups e /v1/asset-groups/{id} foram desativados; uma chave válida com o scope antigo correspondente recebe HTTP 410 / ENDPOINT_RETIRED. Novas integrações não devem chamar esses caminhos; coloque referenceMode e referenceImages na mesma requisição de geração.Referência de códigos de erro
Referência completa: status HTTP, código, significado, ação recomendada e classe de erro do SDK. Esta tabela usa a mesma fonte de dados do mapeamento de erros do SDK; códigos novos desconhecidos são tratados pelo SDK conforme o status HTTP.
| HTTP | Código | Significado | Ação recomendada | SDK |
|---|---|---|---|---|
| 401 | UNAUTHENTICATED | Chave de API ausente ou não reconhecida. | Envie Authorization: Bearer oav_…; mantenha a chave no servidor. | AuthenticationError |
| 401 | INVALID_API_KEY | A chave de API é inválida ou foi revogada. | Confira a chave no console; faça a rotação para obter uma nova, se necessário. | AuthenticationError |
| 403 | INSUFFICIENT_SCOPE | A chave não tem a permissão (scope) exigida por esta operação. | A criação exige generation:create; o polling e o download exigem generation:read. | PermissionError |
| 429 | RATE_LIMITED | As requisições excederam o limite da chave. | Aguarde conforme Retry-After / retryAfterSeconds antes de tentar de novo; o SDK faz isso automaticamente. | RateLimitError |
| 400 | IDEMPOTENCY_KEY_REQUIRED | A criação exige o cabeçalho Idempotency-Key. | Gere uma chave única para cada nova requisição e reutilize-a nas novas tentativas. O SDK gera uma automaticamente. | InvalidRequestError |
| 409 | IDEMPOTENCY_KEY_CONFLICT | A mesma chave de idempotência foi usada com outro corpo. | Use uma chave nova para parâmetros diferentes; mantenha chave e corpo idênticos nas novas tentativas. | InvalidRequestError |
| 400 | MODEL_NOT_FOUND | ID de modelo desconhecido. | Use os IDs de GET /v1/models (ex.: seedance-2.5-oa). | InvalidRequestError |
| 503 | MODEL_NOT_AVAILABLE | O modelo não pode ser chamado no momento. | Nada foi cobrado. Confira o status do modelo em GET /v1/models e tente de novo mais tarde. | ServerError |
| 400 | INVALID_PROMPT | O prompt está vazio ou é longo demais. | Os prompts precisam ter de 1 a 4000 caracteres. | InvalidRequestError |
| 400 | INVALID_DURATION | durationSeconds está fora do intervalo do modelo. | Informe a duração do vídeo como um inteiro durationSeconds dentro do intervalo do catálogo. | InvalidRequestError |
| 400 | INVALID_RESOLUTION | O modelo não aceita esta resolução. | Escolha um valor de resolutions no catálogo. | InvalidRequestError |
| 400 | INVALID_ASPECT_RATIO | O modelo não aceita esta proporção. | Escolha entre as aspect_ratios do catálogo; first_frame costuma fixar adaptive. | InvalidRequestError |
| 400 | INVALID_REFERENCE_IMAGES | referenceImages precisa ser um array de URLs HTTPS públicas. | Informe URLs de imagem https:// que possam ser lidas durante toda a tarefa. | InvalidRequestError |
| 400 | INVALID_REFERENCE_IMAGE | Um item das imagens de referência não é uma URL válida. | A mensagem traz o índice (referenceImages[i]); corrija esse item. | InvalidRequestError |
| 400 | REFERENCE_IMAGE_URL_NOT_HTTPS | Uma URL de imagem de referência não é HTTPS pública. | URLs http, de rede privada e data são recusadas; publique a imagem via HTTPS. | InvalidRequestError |
| 400 | REFERENCE_MODE_REQUIRES_IMAGES | referenceMode foi definido sem imagens de referência. | Informe referenceMode e referenceImages juntos. | InvalidRequestError |
| 400 | REFERENCE_MODE_NOT_SUPPORTED | O modelo não aceita o modo de referência solicitado. | Escolha first_frame / omni_reference conforme os reference_modes do catálogo. | InvalidRequestError |
| 400 | FIRST_FRAME_REQUIRES_ONE_IMAGE | first_frame aceita exatamente uma imagem de referência. | Envie exatamente uma imagem; para várias, use omni_reference. | InvalidRequestError |
| 400 | TOO_MANY_REFERENCES | A quantidade de imagens de referência passa do limite do catálogo. | Veja reference_images_max no catálogo. | InvalidRequestError |
| 400 | INVALID_INPUT_IMAGES | inputImages precisa ser um array. | Cada item é uma URL HTTPS ou um base64 data:image/*. | InvalidRequestError |
| 400 | INVALID_INPUT_IMAGE | Um item das imagens de entrada está malformado. | Cada item precisa ser uma URL HTTPS ou um base64 data:image/*; a mensagem traz o índice. | InvalidRequestError |
| 400 | INPUT_IMAGE_URL_NOT_HTTPS | Uma URL de imagem de entrada não usa HTTPS. | Use uma URL https:// ou uma data URL como data:image/png;base64,…. | InvalidRequestError |
| 400 | INPUT_IMAGE_TOO_LARGE | Uma imagem incorporada excede 10 MiB. | Comprima para menos de 10 MiB. Modelos que listam input_image_max_bytes aplicam o mesmo limite a URLs HTTPS: uma imagem grande demais faz a tarefa falhar com REFERENCE_INPUT_INVALID, com reembolso total. | InvalidRequestError |
| 400 | IMAGE_INPUT_NOT_SUPPORTED | O modelo não aceita imagens de entrada. | Somente modelos de imagem com input_images_max>0 aceitam inputImages. | InvalidRequestError |
| 400 | TOO_MANY_INPUT_IMAGES | Imagens de entrada demais. | Veja input_images_max no catálogo. | InvalidRequestError |
| 422 | REFERENCE_DURATION_OUT_OF_RANGE | A duração medida do vídeo de referência excede os limites do modelo. | Confira no catálogo os limites por vídeo, de duração total e de quantidade e consulte a prévia do preço novamente; não houve cobrança. | InvalidRequestError |
| 422 | REFERENCE_DURATION_UNVERIFIED | Não foi possível medir a duração do vídeo de referência. | Use um MP4/MOV comum, de preferência faststart, em um servidor que aceite solicitações Range. | InvalidRequestError |
| 422 | REFERENCE_URL_NOT_PUBLIC | A URL do vídeo de referência não é um endereço HTTPS público. | Use uma URL HTTPS pública de arquivo na porta 443, acessível sem login. | InvalidRequestError |
| 422 | CONTENT_TYPE_MISMATCH | A URL do vídeo de referência não retorna o formato de vídeo exigido. | Confira se a URL retorna os bytes de um MP4/MOV, e não uma página da web ou imagem. | InvalidRequestError |
| 422 | REFERENCE_VIDEO_TOO_LARGE | O vídeo de referência excede o limite de tamanho. | URLs públicas têm limite de 200 MiB e uploads no console, de 32 MiB. Comprima ou corte o arquivo e consulte a prévia do preço novamente. | InvalidRequestError |
| 429 | REFERENCE_PROBE_BUSY | Há vídeos de referência demais sendo medidos ao mesmo tempo. | Tente novamente após retry_after_seconds; não houve cobrança. | RateLimitError |
| 400 | INSUFFICIENT_BALANCE | O saldo não é suficiente para esta tarefa. | Recarregue ou resgate um código na carteira e tente novamente. | InvalidRequestError |
| 400 | LEGACY_ASSET_REFERENCE_RETIRED | As referências por ID de recurso foram desativadas. | Envie referenceMode + referenceImages (HTTPS público) na mesma requisição. | InvalidRequestError |
| 404 | NOT_FOUND | A tarefa não existe ou pertence a outra conta. | Confirme se o ID da tarefa e a chave pertencem à mesma conta. | InvalidRequestError |
| 409 | OUTPUT_NOT_READY | O resultado ainda não está pronto. | Continue consultando a tarefa conforme poll_after_ms até um estado final. | InvalidRequestError |
| 410 | OUTPUT_EXPIRED | O prazo de download (24 h após a conclusão) terminou. | Salve os resultados a tempo; depois que expiram, é preciso gerar de novo. Use output_expires_at para mostrar uma contagem regressiva. | OutputExpiredError |
Códigos de falha de tarefas de imagem
Quando uma tarefa de imagem termina com status=failed, leia error_code e confira na tabela abaixo. Tarefas com falha são totalmente reembolsadas. Os SDKs lançam GenerationFailedError com o mesmo código.
| Código | Significado |
|---|---|
| CONTENT_POLICY_REJECTED | O conteúdo não passou na revisão. Ajuste-o antes de enviar de novo. |
| REFERENCE_INPUT_INVALID | Confira o formato e o tamanho da referência e os requisitos do modelo. |
| REFERENCE_SOURCE_UNREACHABLE | Não é possível ler a URL de referência. Verifique se ela expirou ou envie o arquivo de novo. |
| REFERENCE_SERVICE_UNAVAILABLE | O processamento de referências está indisponível. Fale com o suporte informando o ID da tarefa; não é preciso trocar a imagem. |
| GENERATION_INPUT_INVALID | Os parâmetros de geração não atendem aos requisitos deste modelo. |
| GENERATION_RATE_LIMITED | O serviço de geração está com limite de requisições temporário. Tente novamente mais tarde. |
| GENERATION_REJECTED | A requisição de geração foi recusada. Fale com o suporte informando o ID da tarefa para saber o motivo. |
| GENERATION_SERVICE_UNAVAILABLE | O serviço de geração está temporariamente indisponível. |
| GENERATION_FAILED | Não foi possível concluir a tarefa. Fale com o suporte informando o ID. |
Códigos retornados apenas no console
| HTTP | Código | Significado | Ação recomendada |
|---|---|---|---|
| 400 | REFERENCE_UPLOAD_NOT_FOUND | A referência de envio não existe, expirou ou pertence a outra conta. | Envie o arquivo de novo no Playground e execute outra vez (os envios valem por pouco tempo). |
| 429 | UPLOAD_QUOTA_EXCEEDED | Envios não utilizados demais. | Execute uma tarefa que use seus envios ou aguarde até que expirem. |
| 429 | WEBHOOK_ENDPOINT_LIMIT | Limite de endpoints de webhook atingido. | Exclua ou desative um endpoint que você não usa. |
| 400 | INVALID_WEBHOOK_URL | A URL de callback não é um endereço HTTPS acessível publicamente. | Use um endereço HTTPS público; hosts privados e de loopback são recusados. |