Pular para o conteúdo principal

Guia de migração

Migre um fluxo, não um catálogo inteiro.

Duas plataformas podem oferecer a mesma tarefa e ainda assim divergir em nomes de campo, valores padrão, estados terminais, significado dos erros e no que conta como unidade cobrada. Uma migração que começa pela URL base descobre tudo isso em produção.

O desafio

Mesma tarefa, contrato diferente

O que porta limpo é só o modelo. O que não porta é tudo em volta: quais campos são obrigatórios, quais são os padrões, como uma imagem de referência entra, quando o dinheiro é reservado e o que o seu código deve fazer com um estado que nunca viu.

01

Nomes de campo e padrões raramente batem

Escreva o mapeamento endpoint por endpoint em vez de deduzir. A entrada é validada contra o esquema publicado com additionalProperties fechado, então um campo não mapeado é 400 na primeira requisição real, não um aviso em log.

02

O dinheiro é reservado na admissão, não na conclusão

createTask reserva a estimativa e a devolve em cost com settled: false. Se o seu fornecedor atual só cobra no sucesso, a conciliação precisa entender reservas antes de mover tráfego.

03

O vocabulário de erros é fechado e curto

Nove valores cobrem toda falha, content_rejected incluído: uma recusa é tarefa terminal, não exceção. Mapeie seus ramos de erro para esses nove antes da virada, não depois.

A abordagem

Rode um endpoint em sombra, compare os números e depois mude

Pegue um único fluxo, registre entradas, saídas, falhas e custo unitário atuais e rode as mesmas condições aqui. Compare a estimativa de jobs/quote com o que você paga hoje, mantenha os dois caminhos vivos atrás de uma flag e só aumente a fatia enquanto os números se sustentarem.

Estime primeiro: passa pela mesma validação e admissão da criação, sem reservar fundos nem começar a gerar.

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

O que vale fixar logo de início

Alternativa ao fal: migrar imagem e vídeo — O que vale fixar logo de início
Campo ou cabeçalhoValor ou limite
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

Deslize horizontalmente para ver todas as colunas.

Integração

Da primeira chamada até produção

  1. 01Escolha um endpoint e capture dez requisições representativas, suas saídas e o custo atual.
  2. 02Mapeie cada campo para o input_schema do endpoint de destino e guarde o mapeamento com versão.
  3. 03Estime cada corpo mapeado e compare estimatedCost, quantity e unit com a fatura de hoje.
  4. 04Sombra, depois canário, depois aumento da fatia — com o caminho antigo chamável em cada etapa.

Adequação

Quando este caminho é o certo

Escolha se

  • Você quer um saldo, um conjunto de tetos e um contrato de tarefa únicos para imagem, vídeo e texto.
  • Seu gargalo é política de conteúdo ou disponibilidade por modelo, não a qualidade do modelo.

Procure outro caminho se

  • Você precisa virar tudo no mesmo dia. Diferenças de contrato aparecem por endpoint, e aparecem tarde.
  • Sua integração chama o modelo pelo cliente. Aqui as chaves pertencem ao servidor.

Evidências

O que você mesmo pode verificar

Estimar é um ensaio de verdade

POST /api/v1/jobs/quote roda a mesma validação e admissão da criação, devolve estimatedCost, maxCharge, quantity e unit e não reserva nada. A estimativa assinada vale cinco minutos.

Preço que mudou falha em vez de surpreender

Envie quoteId e expectedCost na criação. Se o preço mudou no meio, a admissão devolve o código de negócio 40901 antes de reservar qualquer valor.

Nomes de chamada publicados não se mexem

Um nome publicado continua válido; uma renomeação mantém 308 e apelido. Sua tabela de mapeamento não apodrece em silêncio entre versões.

Antes de lançar

Comportamentos da plataforma a confirmar

  • Versione o mapeamento de campos e mantenha uma fixture de sucesso e uma de falha por endpoint.
  • Confirme que todo endpoint de destino é chamável e tem preço antes de rotear uma única requisição.
  • Ensaie o retorno com tráfego real, não num branch de teste.
  • Concilie reservas e liquidações por um ciclo de faturamento inteiro antes de mover a última fatia.

Perguntas frequentes

O que mais perguntam nesta página

Para mídia, não. Contrato de tarefa, nomes de campo, autômato de estados e semântica de cobrança precisam de mapeamento. Texto é o caso mais próximo: a superfície compatível com OpenAI costuma exigir só URL base e valor model.

A seguir

Mapear um fluxo e estimá-lo

Mova um fluxo por vez: mapeie campos, normalize estados e erros, compare a fatura e vire o tráfego com um retorno que você testou.

Fonte: fal model APIs ↗

Guias relacionados