Ir al contenido principal

Guía de migración

Migra un flujo, no un catálogo entero.

Dos plataformas pueden ofrecer la misma tarea y no coincidir en nombres de campo, valores por defecto, estados terminales, significado de los errores y qué es una unidad facturada. Una migración que empieza por la URL base descubre todo eso en producción.

El reto

Misma tarea, contrato distinto

Lo único que se porta limpio es el modelo. Lo que no se porta es todo lo que hay alrededor: qué campos son obligatorios, qué valores por defecto rigen, cómo entra una imagen de referencia, cuándo se reserva el dinero y qué debe hacer tu código con un estado que nunca ha visto.

01

Nombres de campo y valores por defecto rara vez cuadran

Escribe el mapeo endpoint por endpoint en lugar de deducirlo. La entrada se valida contra el esquema publicado con additionalProperties cerrado, así que un campo sin mapear es un 400 en la primera petición real, no un aviso en un registro.

02

El dinero se reserva en la admisión, no al terminar

createTask reserva la estimación y la devuelve en cost con settled: false. Si tu proveedor actual solo cobra al tener éxito, tu conciliación debe entender las reservas antes de mover tráfico.

03

El vocabulario de errores es cerrado y corto

Nueve valores cubren todos los fallos, content_rejected incluido: un rechazo es una tarea terminal, no una excepción. Mapea tus ramas de error existentes a esos nueve antes del cambio, no después.

El enfoque

Pon un endpoint en sombra, compara los números y luego muévete

Toma un solo flujo, registra sus entradas, salidas, fallos y coste unitario actuales y ejecuta las mismas condiciones aquí. Compara la estimación de jobs/quote con lo que pagas hoy, mantén ambos caminos vivos tras una bandera y sube el porcentaje solo mientras los números aguanten.

Estima primero: pasa la misma validación y admisión que la creación, sin reservar fondos ni empezar a generar.

POST /api/v1/jobs/quote

{
  "model": "<publisher>/<model>/text-to-video",
  "input": {
    "prompt": "A slow aerial drift over a misty pine forest at sunrise",
    "duration_seconds": 5,
    "resolution": "1080p"
  }
}

200 OK — nothing reserved, nothing started

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_quote",
  "data": {
    "quoteId": "qte_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "<publisher>/<model>/text-to-video",
    "estimatedCost": "0.750000",
    "maxCharge": "0.750000",
    "currency": "USD",
    "quantity": "5",
    "unit": "second",
    "expiresAt": "2026-09-12T12:05:00Z"
  }
}

Contrato

Lo que conviene fijar desde el principio

Alternativa a fal: migrar imagen y vídeo — Lo que conviene fijar desde el principio
Campo o cabeceraValor o límite
POST /api/v1/jobs/quoteno hold · signed quote valid 5 min
quoteId + expectedCost40901 when the price moved
40240201 balance · 40202 spend cap
published call nameimmutable · renames keep a 308

Desliza horizontalmente para ver todas las columnas.

Integración

De la primera llamada a producción

  1. 01Elige un endpoint y captura diez peticiones representativas, sus salidas y su coste actual.
  2. 02Mapea cada campo al input_schema del endpoint de destino y guarda ese mapeo con una versión.
  3. 03Estima cada cuerpo mapeado y compara estimatedCost, quantity y unit con la factura de hoy.
  4. 04Sombra, luego canario, luego subida de porcentaje, con el camino antiguo invocable en cada paso.

Encaje

Cuándo este camino es el adecuado

Elígelo si

  • Quieres un saldo, un juego de topes y un contrato de tarea únicos para imagen, vídeo y texto.
  • Tu cuello de botella es la política de contenido o la disponibilidad por modelo, no la calidad del modelo.

Busca otra vía si

  • Necesitas un cambio total en un día. Las diferencias de contrato aparecen por endpoint, y aparecen tarde.
  • Tu integración llama al modelo desde el cliente. Aquí las claves son del servidor.

Comprobaciones

Lo que puedes verificar tú mismo

La estimación es un ensayo real

POST /api/v1/jobs/quote ejecuta la misma validación y admisión que la creación, devuelve estimatedCost, maxCharge, quantity y unit, y no reserva nada. La estimación firmada vale cinco minutos.

Un precio que cambia falla en lugar de sorprender

Envía quoteId y expectedCost con la creación. Si el precio cambió entre medias, la admisión devuelve el código de negocio 40901 antes de reservar nada.

Los nombres de llamada publicados no se mueven

Un nombre publicado sigue siendo válido; un cambio de nombre conserva un 308 y un alias. Tu tabla de mapeo no se pudre en silencio entre versiones.

Antes del lanzamiento

Comportamientos de la plataforma que conviene confirmar

  • Versiona el mapeo de campos y guarda una prueba de éxito y otra de fallo por endpoint.
  • Comprueba que cada endpoint de destino es invocable y tiene precio antes de enrutar una sola petición.
  • Ensaya la vuelta atrás con tráfico encima, no en una rama de pruebas.
  • Concilia reservas y liquidaciones durante un ciclo de facturación completo antes de mover el último porcentaje.

Preguntas frecuentes

Lo que más se pregunta en esta página

Para medios no. Contrato de tarea, nombres de campo, autómata de estados y semántica de cobro requieren mapeo. El texto es lo más parecido: la superficie compatible con OpenAI suele necesitar solo la URL base y el valor model.

Siguiente paso

Mapear un flujo y estimarlo

Mueve un flujo cada vez: mapea campos, normaliza estados y errores, compara la factura y cambia con una vuelta atrás que hayas probado.

Fuente: fal model APIs ↗

Guías relacionadas