Open AIavDocsInício
Guarde as chaves de API em variáveis de ambiente do servidor ou em um gerenciador de segredos. Nunca as coloque em pacotes do navegador, no Git, em logs ou em capturas de tela.

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

  1. Use a variável de ambiente OPENAIAV_API_KEY do servidor para chamar https://api.openaiav.com/v1/models e ler as chaves de modelo, os preços e os reference_modes atuais.
  2. 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.
  3. 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.
  4. 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âmetroTipoObrigatórioDescrição
AuthorizationstringObrigatórioToda requisição a /v1 usa Bearer oav_...; guarde a chave no seu servidor.
Idempotency-KeystringObrigatório ao criar tarefasGere 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-TypestringObrigatório no POSTA criação de gerações usa application/json.

Endpoints

MétodoCaminhoSucessoPermissãoDescrição
GET/v1/models200Qualquer chave de API válidaLê 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-quotes201generation:createMostra 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/generations201generation:createCria uma tarefa assíncrona; envie as imagens de referência e o referenceMode na mesma requisição JSON.
GET/v1/generations/{id}200generation:readConsulta a mesma tarefa conforme poll_after_ms até ela chegar a um estado final.
GET/v1/generations/{id}/content200 / 206generation:readBaixa 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âmetroTipoObrigatórioDescrição
modelstringObrigatórioUse o valor model de GET /v1/models; o exemplo mínimo de vídeo usa seedance-2.5-oa.
promptstringObrigatórioDe 1 a 4000 caracteres. A referência Omni pode citar as imagens na ordem do array como @Image1, @Image2 e assim por diante.
resolutionstringOpcionalPrecisa constar em resolutions do modelo escolhido; o exemplo mínimo de vídeo usa 480p.
aspectRatiostringOpcionalDeve 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.
durationSecondsintegerOpcionalA 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.
referenceModefirst_frame | omni_referenceObrigatório com imagens de referência para vídeoUse apenas com modelos de vídeo Seedance que listem o modo explicitamente em reference_modes. Cada requisição pode escolher só um modo.
referenceImagesstring[]Informe junto com referenceModeURLs públicas de imagens HTTPS. first_frame exige exatamente uma imagem; confira o limite de omni_reference em reference_images_max.
inputImagesstring[]OpcionalImagens 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.
generateAudiobooleanOpcionalO 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.
outputFormatmp4 | movOpcionalEscolha 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.

O catálogo não foi carregado. Chame primeiro GET /v1/models; não envie um modo de referência para um modelo sem reference_modes.

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-quotes para ver o preço atual. Vídeos por URL são medidos e precificados novamente na criação; o reserved_usd da resposta é o valor real. quoteId não fixa o preço, e expires_at apenas 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_RANGE sem 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 retornam REFERENCE_URL_NOT_PUBLIC e sondas ocupadas 429 REFERENCE_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. O price_usd de 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 resolution e aspectRatio (image_pricing.rates). Nos modelos gpt-image-* e nano-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-quotes com 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).

StatusFinalAção
processingNãoAceita; consulte novamente após poll_after_ms.
result_pendingNãoO resultado está sendo finalizado. Guarde o ID e continue consultando a mesma tarefa; não a recrie.
submission_unknownNãoA aceitação está sendo confirmada; não repita a criação. Guarde o ID da tarefa original e continue consultando.
succeededSimConcluída; baixe o resultado com /content.
failedSimFalhou em definitivo e o valor foi totalmente reembolsado; confira error_code.

Migração de endpoints desativados

Os antigos endpoints /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.

HTTPCódigoSignificadoAção recomendadaSDK
401UNAUTHENTICATEDChave de API ausente ou não reconhecida.Envie Authorization: Bearer oav_…; mantenha a chave no servidor.AuthenticationError
401INVALID_API_KEYA 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
403INSUFFICIENT_SCOPEA 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
429RATE_LIMITEDAs requisições excederam o limite da chave.Aguarde conforme Retry-After / retryAfterSeconds antes de tentar de novo; o SDK faz isso automaticamente.RateLimitError
400IDEMPOTENCY_KEY_REQUIREDA 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
409IDEMPOTENCY_KEY_CONFLICTA 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
400MODEL_NOT_FOUNDID de modelo desconhecido.Use os IDs de GET /v1/models (ex.: seedance-2.5-oa).InvalidRequestError
503MODEL_NOT_AVAILABLEO 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
400INVALID_PROMPTO prompt está vazio ou é longo demais.Os prompts precisam ter de 1 a 4000 caracteres.InvalidRequestError
400INVALID_DURATIONdurationSeconds está fora do intervalo do modelo.Informe a duração do vídeo como um inteiro durationSeconds dentro do intervalo do catálogo.InvalidRequestError
400INVALID_RESOLUTIONO modelo não aceita esta resolução.Escolha um valor de resolutions no catálogo.InvalidRequestError
400INVALID_ASPECT_RATIOO modelo não aceita esta proporção.Escolha entre as aspect_ratios do catálogo; first_frame costuma fixar adaptive.InvalidRequestError
400INVALID_REFERENCE_IMAGESreferenceImages precisa ser um array de URLs HTTPS públicas.Informe URLs de imagem https:// que possam ser lidas durante toda a tarefa.InvalidRequestError
400INVALID_REFERENCE_IMAGEUm item das imagens de referência não é uma URL válida.A mensagem traz o índice (referenceImages[i]); corrija esse item.InvalidRequestError
400REFERENCE_IMAGE_URL_NOT_HTTPSUma 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
400REFERENCE_MODE_REQUIRES_IMAGESreferenceMode foi definido sem imagens de referência.Informe referenceMode e referenceImages juntos.InvalidRequestError
400REFERENCE_MODE_NOT_SUPPORTEDO modelo não aceita o modo de referência solicitado.Escolha first_frame / omni_reference conforme os reference_modes do catálogo.InvalidRequestError
400FIRST_FRAME_REQUIRES_ONE_IMAGEfirst_frame aceita exatamente uma imagem de referência.Envie exatamente uma imagem; para várias, use omni_reference.InvalidRequestError
400TOO_MANY_REFERENCESA quantidade de imagens de referência passa do limite do catálogo.Veja reference_images_max no catálogo.InvalidRequestError
400INVALID_INPUT_IMAGESinputImages precisa ser um array.Cada item é uma URL HTTPS ou um base64 data:image/*.InvalidRequestError
400INVALID_INPUT_IMAGEUm 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
400INPUT_IMAGE_URL_NOT_HTTPSUma URL de imagem de entrada não usa HTTPS.Use uma URL https:// ou uma data URL como data:image/png;base64,….InvalidRequestError
400INPUT_IMAGE_TOO_LARGEUma 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
400IMAGE_INPUT_NOT_SUPPORTEDO modelo não aceita imagens de entrada.Somente modelos de imagem com input_images_max>0 aceitam inputImages.InvalidRequestError
400TOO_MANY_INPUT_IMAGESImagens de entrada demais.Veja input_images_max no catálogo.InvalidRequestError
422REFERENCE_DURATION_OUT_OF_RANGEA 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
422REFERENCE_DURATION_UNVERIFIEDNã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
422REFERENCE_URL_NOT_PUBLICA 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
422CONTENT_TYPE_MISMATCHA 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
422REFERENCE_VIDEO_TOO_LARGEO 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
429REFERENCE_PROBE_BUSYHá vídeos de referência demais sendo medidos ao mesmo tempo.Tente novamente após retry_after_seconds; não houve cobrança.RateLimitError
400INSUFFICIENT_BALANCEO saldo não é suficiente para esta tarefa.Recarregue ou resgate um código na carteira e tente novamente.InvalidRequestError
400LEGACY_ASSET_REFERENCE_RETIREDAs referências por ID de recurso foram desativadas.Envie referenceMode + referenceImages (HTTPS público) na mesma requisição.InvalidRequestError
404NOT_FOUNDA tarefa não existe ou pertence a outra conta.Confirme se o ID da tarefa e a chave pertencem à mesma conta.InvalidRequestError
409OUTPUT_NOT_READYO resultado ainda não está pronto.Continue consultando a tarefa conforme poll_after_ms até um estado final.InvalidRequestError
410OUTPUT_EXPIREDO 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ódigoSignificado
CONTENT_POLICY_REJECTEDO conteúdo não passou na revisão. Ajuste-o antes de enviar de novo.
REFERENCE_INPUT_INVALIDConfira o formato e o tamanho da referência e os requisitos do modelo.
REFERENCE_SOURCE_UNREACHABLENão é possível ler a URL de referência. Verifique se ela expirou ou envie o arquivo de novo.
REFERENCE_SERVICE_UNAVAILABLEO processamento de referências está indisponível. Fale com o suporte informando o ID da tarefa; não é preciso trocar a imagem.
GENERATION_INPUT_INVALIDOs parâmetros de geração não atendem aos requisitos deste modelo.
GENERATION_RATE_LIMITEDO serviço de geração está com limite de requisições temporário. Tente novamente mais tarde.
GENERATION_REJECTEDA requisição de geração foi recusada. Fale com o suporte informando o ID da tarefa para saber o motivo.
GENERATION_SERVICE_UNAVAILABLEO serviço de geração está temporariamente indisponível.
GENERATION_FAILEDNão foi possível concluir a tarefa. Fale com o suporte informando o ID.

Códigos retornados apenas no console

HTTPCódigoSignificadoAção recomendada
400REFERENCE_UPLOAD_NOT_FOUNDA 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).
429UPLOAD_QUOTA_EXCEEDEDEnvios não utilizados demais.Execute uma tarefa que use seus envios ou aguarde até que expirem.
429WEBHOOK_ENDPOINT_LIMITLimite de endpoints de webhook atingido.Exclua ou desative um endpoint que você não usa.
400INVALID_WEBHOOK_URLA 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.