Open AIavDocsInicio
Guarda las claves de API en variables de entorno del servidor o en un gestor de secretos. Nunca las incluyas en paquetes del navegador, en Git, en registros ni en capturas de pantalla.

Inicio rápido con los SDK oficiales

Los SDK oficiales encapsulan todo el flujo (crear → consultar → descargar) con claves de idempotencia automáticas y errores tipados. El SDK de Node no tiene dependencias; el de Python solo depende de httpx. De momento se distribuyen como repositorios de GitHub; su publicación en npm y PyPI se anunciará por separado.

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")

Integración en cuatro pasos

  1. Usa la variable de entorno OPENAIAV_API_KEY del servidor para llamar a https://api.openaiav.com/v1/models y leer las claves de modelo, los precios y los reference_modes actuales.
  2. Envía prompt, referenceMode y referenceImages con POST a /v1/generations. Las imágenes de referencia son URL HTTPS públicas y no requieren registro previo. Si todo va bien, se devuelve HTTP 201.
  3. Guarda el id devuelto y consulta el mismo GET /v1/generations/{id} tras poll_after_ms. Sigue esperando en processing, result_pending y submission_unknown; no crees otra tarea.
  4. Cuando el estado sea succeeded, descarga con GET /v1/generations/{id}/content. Una respuesta completa es HTTP 200 y un único rango de bytes, 206.

Autenticación e idempotencia

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)"

Envía Authorization: Bearer oav_... en cada solicitud y guarda la clave en el servidor. La creación requiere generation:create; el sondeo y la descarga requieren generation:read. Genera una Idempotency-Key nueva (un UUID) para cada intención de creación, de modo que cada ejecución de un ejemplo obtenga una clave nueva; reutilízala solo al reintentar esa misma creación si el resultado de red es incierto y nunca uses una misma clave con cuerpos distintos.

Encabezados de la solicitud

ParámetroTipoObligatorioDescripción
AuthorizationstringObligatorioCada solicitud a /v1 usa Bearer oav_...; guarda la clave en tu servidor.
Idempotency-KeystringObligatorio al crear tareasGenera un valor nuevo (por ejemplo, un UUID) para cada intención de creación y reutilízalo solo al reintentar esa misma creación; con el mismo valor y el mismo cuerpo no se crea ni se cobra nada dos veces.
Content-TypestringObligatorio en POSTLa creación de generaciones usa application/json.

Endpoints

MétodoRutaÉxitoPermisoDescripción
GET/v1/models200Cualquier clave de API válidaLee los modelos disponibles a la venta, sus precios, resoluciones, duraciones y reference_modes. Comprueba las funciones en el catálogo antes de enviar.
POST/v1/generation-quotes201generation:createPrevisualiza el precio actual sin fijarlo. La creación vuelve a calcularlo y cobra exactamente el reserved_usd de su respuesta como importe fijo; una tarea fallida se reembolsa por completo. Se sigue aceptando quoteId y expires_at solo indica cuándo actualizar.
POST/v1/generations201generation:createCrea una tarea asíncrona; envía las imágenes de referencia y referenceMode en la misma solicitud JSON.
GET/v1/generations/{id}200generation:readConsulta la misma tarea según poll_after_ms hasta que llegue a un estado final.
GET/v1/generations/{id}/content200 / 206generation:readDescarga el resultado cuando la tarea se completa; una solicitud con un único rango de bytes devuelve 206.

Paso 1: consultar las funciones del modelo

No fijes en el código las funciones de los modelos. Envía solo los modos que aparezcan en reference_modes y oculta o bloquea las combinaciones incompatibles antes de enviar. El ejemplo mínimo muestra una solicitud de 4 segundos, 480p y sin audio con seedance-2.5-oa.

curl --fail-with-body 'https://api.openaiav.com/v1/models' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY"

Ejemplo mínimo de vídeo público

El ejemplo incluye todo el flujo: crear → consultar la misma tarea → descargar. first_frame usa una imagen de referencia y adaptive; generateAudio=false evita pedir audio. Los códigos de éxito son 201, 200 y 200/206; si algo falla, revisa primero el HTTP y después 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 de la solicitud

ParámetroTipoObligatorioDescripción
modelstringObligatorioUsa el valor model de GET /v1/models; el ejemplo mínimo de vídeo usa seedance-2.5-oa.
promptstringObligatorioDe 1 a 4000 caracteres. La referencia omni puede aludir a las imágenes en el orden del array como @Image1, @Image2, etc.
resolutionstringOpcionalDebe figurar en las resolutions del modelo elegido; el ejemplo mínimo de vídeo usa 480p.
aspectRatiostringOpcionalDebe figurar en las aspect_ratios del modelo seleccionado; usa adaptive cuando el modelo lo exija para solicitudes de primer fotograma. En los modelos de imagen que incluyen image_size_options, envía resolution y aspectRatio como un par de esa lista: no todas las relaciones de aspecto existen en todas las resoluciones.
durationSecondsintegerOpcionalLa duración del vídeo debe indicarse con durationSeconds como entero dentro de duration_seconds del catálogo; si se omite, se usa el mínimo del modelo. El ejemplo mínimo usa 4 segundos.
referenceModefirst_frame | omni_referenceObligatorio con imágenes de referencia para vídeoÚsalo solo con modelos de vídeo Seedance que incluyan el modo de forma explícita en reference_modes. Cada solicitud solo puede elegir un modo.
referenceImagesstring[]Indícalo junto con referenceModeURL públicas de imágenes HTTPS. first_frame requiere exactamente una imagen; consulta el límite de omni_reference en reference_images_max.
inputImagesstring[]OpcionalImágenes de entrada (imágenes de referencia) para imagen a imagen, solo en modelos de imagen. Cada elemento es una URL de imagen HTTPS pública o una data URL con la forma data:image/png;base64,…, data:image/jpeg;base64,… o data:image/webp;base64,…. Consulta los límites de cada modelo en GET /v1/models: input_images_max, input_image_max_bytes (por imagen, por URL o data URL) y input_image_mime_types. Las imágenes de referencia pueden aumentar el cobro. No las combines con un modo de referencia de vídeo.
generateAudiobooleanOpcionalPor defecto es true en los modelos de vídeo con audio. El ejemplo más económico envía false de forma explícita; el catálogo actual no incluye ningún recargo de audio aparte, y GET /v1/models siempre manda en la facturación.
outputFormatmp4 | movOpcionalElige solo entre los output_formats del catálogo; el ejemplo mínimo usa mp4.

Modos de referencia

first_frame

first_frame: la imagen de referencia se convierte en el primer fotograma y define la composición. Envía exactamente un elemento en referenceImages; aspectRatio sale de las aspect_ratios del modelo y queda fijado en adaptive cuando el catálogo lo ofrece (el resultado sigue a la imagen de referencia). first_last_frame: envía exactamente 2 referenceImages. El orden del array es primer fotograma y después último fotograma, y el modelo genera lo que hay entre ambos. Las dos imágenes no tienen que tener las mismas dimensiones. Los modos de fotograma no se pueden combinar con 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: los medios de referencia mantienen la coherencia del sujeto, el estilo y la escena sin convertirse en el primer fotograma. Además de referenceImages, los modelos compatibles aceptan referenceVideos y referenceAudios; los límites por tipo están en la tabla de abajo y cualquier tipo que el catálogo no declare devuelve un 400 al enviarse. Los prompts aluden a los elementos por su orden 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"
}

Compatibilidad actual

Una sola integración para todos los modelos de vídeo: el mismo endpoint y los mismos campos. Cambiar de modelo solo implica cambiar model. El catálogo declara todas las diferencias, y la tabla de abajo es ese catálogo: para cada modelo, qué modos de referencia admite y cuántos medios de cada tipo acepta. Todo lo que el catálogo no declare se rechaza de forma explícita al enviarlo; nunca se ignora sin avisar.

El catálogo no se ha cargado. Llama primero a GET /v1/models; no envíes un modo de referencia para un modelo sin reference_modes.

Detalles del primer fotograma y encadenado con el último

Detalles del primer fotograma: first_frame y omni_reference son excluyentes, así que cada solicitud elige uno solo. Con la referencia omni puedes orientar una imagen de referencia hacia el plano inicial mediante el prompt, pero si el primer fotograma debe coincidir exactamente, envía esa imagen en modo first_frame. En Seedance 2.5, las tareas con primer fotograma fijan la relación de aspecto en adaptive (el resultado sigue al primer fotograma). Encadenar con el último fotograma: pasa returnLastFrame: true al crear la tarea y, si se completa, también devuelve last_frame_url (un PNG sin marca de agua del tamaño del vídeo, que se conserva 24 horas). Usa esa URL directamente como referenceImages del first_frame de la siguiente solicitud para encadenar varios planos, sin ningún registro previo.

Precios de vídeos de referencia

  • Los vídeos de referencia con duración medible se facturan a precio fijo, que puedes consultar antes en una vista previa. Si no se puede medir la duración, no se ofrece la vista previa ni se cobra nada.
  • Llama a POST /v1/generation-quotes para ver el precio actual. Los vídeos URL se vuelven a medir y valorar al crear; reserved_usd en la respuesta de creación es el importe real. quoteId no fija el precio y expires_at solo indica cuándo actualizar.
  • El catálogo fija la duración por vídeo y total, la cantidad y el mínimo facturable. Cada vídeo de referencia debe durar entre 2 y 15 segundos en la serie Seedance 2.0 y entre 2 y 30 segundos en los demás modelos compatibles. Una duración medida fuera de los límites devuelve 422 REFERENCE_DURATION_OUT_OF_RANGE sin cargo.
  • Usa un enlace directo HTTPS público a MP4/MOV. Los archivos de tamaño conocido mayores de 200 MiB devuelven REFERENCE_VIDEO_TOO_LARGE; se puede cotizar sin tamaño declarado. Las URL privadas devuelven REFERENCE_URL_NOT_PUBLIC y las mediciones ocupadas 429 REFERENCE_PROBE_BUSY. Las subidas de consola se limitan a 32 MiB.
  • A cada tarea se le cobra el precio de su presupuesto, reserved_usd, al crearla; si termina bien, ese es el cargo final, y si falla se reembolsa por completo. El price_usd de una vista previa equivale a lo que costaría crear la tarea en ese momento; indica la duración de salida, no -1.
  • Las URL públicas de vídeo se comprueban al previsualizar y de nuevo al crear, y luego se pasan directamente al servicio de generación sin almacenamiento ni registro. Mantén estable el contenido. Las subidas siguen otra ruta y siguen vigentes las restricciones sobre rostros reales.

Precios de los modelos de imagen

  • Los modelos de imagen se cobran por imagen según resolution y aspectRatio (image_pricing.rates). En los modelos gpt-image-* y nano-banana-*, los precios indicados corresponden a un prompt corto sin imágenes de referencia.
  • En estos modelos, las imágenes de referencia y los prompts más largos aumentan el cobro. Antes de crear una tarea, llama a POST /v1/generation-quotes con el mismo cuerpo: price_usd es el cobro de esa solicitud a los precios actuales. Las tareas fallidas se reembolsan por completo.

Sondeo y descarga

Solo succeeded y failed son estados finales. submission_unknown indica que la aceptación se está confirmando y result_pending se está finalizando: guarda el ID de la tarea original, sigue consultando y nunca repitas la creación. Tras completarse, usa la ruta autenticada /content en lugar de depender de direcciones ajenas a Open AIav. Los resultados se conservan 24 horas (la respuesta de detalle incluye output_expires_at; las descargas caducadas devuelven 410 OUTPUT_EXPIRED, así que guárdalos a tiempo).

EstadoFinalAcción
processingNoAceptada; vuelve a consultar tras poll_after_ms.
result_pendingNoEl resultado se está finalizando. Conserva el ID y sigue consultando la misma tarea; no la vuelvas a crear.
submission_unknownNoSe está confirmando la aceptación; no repitas la creación. Guarda el ID de la tarea original y sigue consultándolo.
succeededSíCompletada; descarga el resultado con /content.
failedSíHa fallado definitivamente y el importe se ha reembolsado por completo; revisa error_code.

Migración de endpoints retirados

Los antiguos endpoints /v1/assets, /v1/assets/content, /v1/assets/{id}, /v1/asset-groups y /v1/asset-groups/{id} se han retirado; una clave válida con el scope antiguo correspondiente recibe HTTP 410 / ENDPOINT_RETIRED. Las nuevas integraciones no deben llamar a estas rutas; incluye referenceMode y referenceImages en la misma solicitud de generación.

Referencia de códigos de error

Referencia completa: estado HTTP, código, significado, acción recomendada y clase de error del SDK. Esta tabla comparte la fuente de datos con la correspondencia de errores del SDK; los códigos nuevos que no conozca el SDK se tratan según su estado HTTP.

HTTPCódigoSignificadoAcción recomendadaSDK
401UNAUTHENTICATEDFalta la clave de API o no se reconoce.Envía Authorization: Bearer oav_…; guarda la clave en el servidor.AuthenticationError
401INVALID_API_KEYLa clave de API no es válida o se ha revocado.Comprueba la clave en la consola; rótala para obtener una nueva si hace falta.AuthenticationError
403INSUFFICIENT_SCOPELa clave no tiene el permiso (scope) que necesita esta operación.La creación requiere generation:create; el sondeo y la descarga requieren generation:read.PermissionError
429RATE_LIMITEDLas solicitudes han superado el límite de la clave.Espera según Retry-After / retryAfterSeconds antes de reintentar; el SDK lo hace automáticamente.RateLimitError
400IDEMPOTENCY_KEY_REQUIREDLa creación requiere el encabezado Idempotency-Key.Genera una clave única para cada nueva solicitud y reutilízala en los reintentos. El SDK la genera automáticamente.InvalidRequestError
409IDEMPOTENCY_KEY_CONFLICTSe ha usado la misma clave de idempotencia con otro cuerpo.Usa una clave nueva para parámetros distintos; mantén idénticos la clave y el cuerpo en los reintentos.InvalidRequestError
400MODEL_NOT_FOUNDID de modelo desconocido.Usa los ID de GET /v1/models (p. ej., seedance-2.5-oa).InvalidRequestError
503MODEL_NOT_AVAILABLEEl modelo no se puede llamar en este momento.No se ha cobrado nada. Revisa el status del modelo en GET /v1/models y vuelve a intentarlo más tarde.ServerError
400INVALID_PROMPTEl prompt está vacío o es demasiado largo.Los prompts deben tener entre 1 y 4000 caracteres.InvalidRequestError
400INVALID_DURATIONdurationSeconds está fuera del rango del modelo.Indica la duración del vídeo como un entero durationSeconds dentro del rango del catálogo.InvalidRequestError
400INVALID_RESOLUTIONEl modelo no admite esta resolución.Elige un valor de las resolutions del catálogo.InvalidRequestError
400INVALID_ASPECT_RATIOEl modelo no admite esta relación de aspecto.Elige entre las aspect_ratios del catálogo; first_frame suele fijar adaptive.InvalidRequestError
400INVALID_REFERENCE_IMAGESreferenceImages debe ser un array de URL HTTPS públicas.Indica URL de imágenes https:// que se puedan leer durante toda la tarea.InvalidRequestError
400INVALID_REFERENCE_IMAGEUn elemento de las imágenes de referencia no es una URL válida.El mensaje incluye el índice (referenceImages[i]); corrige ese elemento.InvalidRequestError
400REFERENCE_IMAGE_URL_NOT_HTTPSUna URL de imagen de referencia no es HTTPS pública.Se rechazan las URL http, de red privada y data; publica la imagen por HTTPS.InvalidRequestError
400REFERENCE_MODE_REQUIRES_IMAGESSe ha indicado referenceMode sin imágenes de referencia.Indica referenceMode y referenceImages juntos.InvalidRequestError
400REFERENCE_MODE_NOT_SUPPORTEDEl modelo no admite el modo de referencia solicitado.Elige first_frame / omni_reference según los reference_modes del catálogo.InvalidRequestError
400FIRST_FRAME_REQUIRES_ONE_IMAGEfirst_frame admite exactamente una imagen de referencia.Envía exactamente una imagen; para varias, usa omni_reference.InvalidRequestError
400TOO_MANY_REFERENCESEl número de imágenes de referencia supera el límite del catálogo.Consulta reference_images_max en el catálogo.InvalidRequestError
400INVALID_INPUT_IMAGESinputImages debe ser un array.Cada elemento es una URL HTTPS o un base64 data:image/*.InvalidRequestError
400INVALID_INPUT_IMAGEUn elemento de las imágenes de entrada tiene un formato incorrecto.Cada elemento debe ser una URL HTTPS o un base64 data:image/*; el mensaje incluye el índice.InvalidRequestError
400INPUT_IMAGE_URL_NOT_HTTPSUna URL de imagen de entrada no usa HTTPS.Usa una URL https:// o una data URL como data:image/png;base64,….InvalidRequestError
400INPUT_IMAGE_TOO_LARGEUna imagen incrustada supera los 10 MiB.Comprímela por debajo de 10 MiB. Los modelos que indican input_image_max_bytes aplican el mismo límite a las URL HTTPS: una imagen demasiado grande hace fallar la tarea con REFERENCE_INPUT_INVALID y se reembolsa por completo.InvalidRequestError
400IMAGE_INPUT_NOT_SUPPORTEDEl modelo no admite imágenes de entrada.Solo los modelos de imagen con input_images_max>0 admiten inputImages.InvalidRequestError
400TOO_MANY_INPUT_IMAGESHay demasiadas imágenes de entrada.Consulta input_images_max en el catálogo.InvalidRequestError
422REFERENCE_DURATION_OUT_OF_RANGELa duración medida del vídeo de referencia supera los límites del modelo.Consulta en el catálogo los límites por vídeo, de duración total y de cantidad, y vuelve a consultar el precio; no se realizó ningún cargo.InvalidRequestError
422REFERENCE_DURATION_UNVERIFIEDNo se pudo medir la duración del vídeo de referencia.Usa un MP4/MOV normal, preferiblemente faststart, alojado en un servidor que admita solicitudes Range.InvalidRequestError
422REFERENCE_URL_NOT_PUBLICLa URL del vídeo de referencia no es una dirección HTTPS pública.Usa una URL HTTPS pública de archivo en el puerto 443, accesible sin iniciar sesión.InvalidRequestError
422CONTENT_TYPE_MISMATCHLa URL del vídeo de referencia no devuelve el formato de vídeo requerido.Comprueba que la URL devuelva los bytes de un MP4/MOV, no una página web ni una imagen.InvalidRequestError
422REFERENCE_VIDEO_TOO_LARGEEl vídeo de referencia supera el límite de tamaño.Las URL públicas se limitan a 200 MiB y las subidas de consola a 32 MiB. Comprime o recorta el archivo y vuelve a consultar el precio.InvalidRequestError
429REFERENCE_PROBE_BUSYSe están midiendo demasiados vídeos de referencia a la vez.Vuelve a intentarlo después de retry_after_seconds; no se realizó ningún cargo.RateLimitError
400INSUFFICIENT_BALANCEEl saldo no es suficiente para esta tarea.Recarga o canjea un código en el monedero y vuelve a intentarlo.InvalidRequestError
400LEGACY_ASSET_REFERENCE_RETIREDLas referencias por ID de recurso se han retirado.Envía referenceMode + referenceImages (HTTPS público) en la misma solicitud.InvalidRequestError
404NOT_FOUNDLa tarea no existe o pertenece a otra cuenta.Comprueba que el ID de la tarea y la clave pertenezcan a la misma cuenta.InvalidRequestError
409OUTPUT_NOT_READYEl resultado aún no está listo.Sigue consultando la tarea según poll_after_ms hasta que llegue a un estado final.InvalidRequestError
410OUTPUT_EXPIREDHa terminado el plazo de descarga (24 h tras completarse).Guarda los resultados a tiempo; cuando caducan hay que volver a generarlos. Usa output_expires_at para mostrar una cuenta atrás.OutputExpiredError

Códigos de fallo de tareas de imagen

Cuando una tarea de imagen termina con status=failed, lee error_code y búscalo en la tabla. Las tareas fallidas se reembolsan por completo. Los SDK lanzan GenerationFailedError con el mismo código.

CódigoSignificado
CONTENT_POLICY_REJECTEDEl contenido no ha superado la revisión. Modifícalo antes de volver a enviarlo.
REFERENCE_INPUT_INVALIDRevisa el formato y el tamaño de la referencia y los requisitos del modelo.
REFERENCE_SOURCE_UNREACHABLENo se puede leer la URL de referencia. Comprueba si ha caducado o vuelve a subir el archivo.
REFERENCE_SERVICE_UNAVAILABLEEl procesamiento de referencias no está disponible. Contacta con el soporte indicando el ID de la tarea; no hace falta cambiar la imagen.
GENERATION_INPUT_INVALIDLos parámetros de generación no cumplen los requisitos de este modelo.
GENERATION_RATE_LIMITEDEl servicio de generación tiene un límite de solicitudes temporal. Vuelve a intentarlo más tarde.
GENERATION_REJECTEDSe ha rechazado la solicitud de generación. Contacta con el soporte indicando el ID de la tarea para conocer el motivo.
GENERATION_SERVICE_UNAVAILABLEEl servicio de generación no está disponible temporalmente.
GENERATION_FAILEDLa tarea no se ha podido completar. Contacta con el soporte indicando su ID.

Códigos que solo devuelve la consola

HTTPCódigoSignificadoAcción recomendada
400REFERENCE_UPLOAD_NOT_FOUNDLa referencia de subida no existe, ha caducado o pertenece a otra cuenta.Vuelve a subir el archivo en el Playground y ejecuta de nuevo (las subidas duran poco).
429UPLOAD_QUOTA_EXCEEDEDHay demasiadas subidas sin usar.Ejecuta una tarea que use tus subidas o espera a que caduquen.
429WEBHOOK_ENDPOINT_LIMITSe ha alcanzado el límite de endpoints de webhook.Elimina o desactiva un endpoint que no uses.
400INVALID_WEBHOOK_URLLa URL de devolución de llamada no es una dirección HTTPS accesible públicamente.Usa una dirección HTTPS pública; se rechazan los hosts privados y de bucle local.