Aller au contenu principal

Guide de migration

Migrez un flux, pas un catalogue entier.

Deux plateformes peuvent proposer la même tâche et diverger sur les noms de champs, les valeurs par défaut, les états terminaux, le sens des erreurs et la définition d’une unité facturée. Une migration qui commence par l’URL de base découvre tout cela en production.

L’enjeu

Même tâche, contrat différent

Seul le modèle se porte proprement. Ce qui ne se porte pas, c’est tout le reste : quels champs sont obligatoires, quelles valeurs par défaut s’appliquent, comment une image de référence entre, quand l’argent est réservé, et ce que votre code doit faire d’un état inconnu.

01

Noms de champs et valeurs par défaut coïncident rarement

Écrivez la correspondance point d’accès par point d’accès plutôt que de la déduire. L’entrée est validée contre le schéma publié avec additionalProperties fermé : un champ non mappé est un 400 à la première vraie requête, pas un avertissement dans un journal.

02

L’argent est réservé à l’admission, pas à la fin

createTask réserve l’estimation et la renvoie dans cost avec settled: false. Si votre fournisseur actuel ne facture qu’en cas de succès, votre rapprochement doit comprendre les réservations avant tout déplacement de trafic.

03

Le vocabulaire d’erreur est fermé et court

Neuf valeurs couvrent tous les échecs, content_rejected compris : un refus est une tâche terminale, pas une exception. Mappez vos branches d’erreur existantes sur ces neuf avant la bascule, pas après.

La méthode

Faire tourner un point d’accès en parallèle, comparer, puis basculer

Prenez un seul flux, relevez ses entrées, sorties, échecs et coûts unitaires actuels, et rejouez les mêmes conditions ici. Comparez l’estimation de jobs/quote à ce que vous payez aujourd’hui, gardez les deux chemins actifs derrière un drapeau et n’augmentez la part que tant que les chiffres tiennent.

Estimez d’abord : mêmes contrôles de validation et d’admission que la création, sans réservation ni génération.

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

Contrat

Les points à figer d’emblée

Alternative à fal : migrer image et vidéo — Les points à figer d’emblée
Champ ou en-têteValeur 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

Balayez horizontalement pour voir toutes les colonnes.

Intégration

Du premier appel à la production

  1. 01Choisissez un point d’accès et capturez dix requêtes représentatives, leurs sorties et leur coût actuel.
  2. 02Mappez chaque champ sur l’input_schema du point d’accès cible et versionnez cette correspondance.
  3. 03Estimez chaque corps mappé et comparez estimatedCost, quantity et unit à la facture d’aujourd’hui.
  4. 04Parallèle, puis canari, puis montée en part — l’ancien chemin restant appelable à chaque étape.

Pertinence

Quand cette voie convient

À choisir si

  • Vous voulez un solde, un jeu de plafonds et un contrat de tâche uniques pour l’image, la vidéo et le texte.
  • Votre point de blocage est la politique de contenu ou la disponibilité par modèle, pas la qualité du modèle.

À éviter si

  • Vous voulez tout basculer le même jour. Les différences de contrat apparaissent par point d’accès, et tard.
  • Votre intégration appelle le modèle depuis le client. Ici, les clés appartiennent au serveur.

Vérifications

Ce que vous pouvez contrôler vous-même

L’estimation est un vrai essai à blanc

POST /api/v1/jobs/quote effectue les mêmes contrôles de validation et d’admission que la création, renvoie estimatedCost, maxCharge, quantity et unit, et ne réserve rien. L’estimation signée reste valable cinq minutes.

Un prix qui bouge échoue au lieu de surprendre

Envoyez quoteId et expectedCost avec la création. Si le prix a changé entre-temps, l’admission renvoie le code métier 40901 avant toute réservation.

Les noms d’appel publiés ne bougent pas

Un nom d’appel publié reste valable ; un renommage conserve une 308 et un alias. Votre table de correspondance ne pourrit pas en silence entre deux versions.

Avant la mise en production

Comportements de la plateforme à confirmer

  • Versionnez la correspondance et gardez une fixture de succès et une d’échec par point d’accès.
  • Vérifiez que chaque point d’accès cible est appelable et tarifé avant d’y router la moindre requête.
  • Répétez le retour arrière avec du trafic réel, pas sur une branche de test.
  • Rapprochez réservations et règlements sur un cycle de facturation complet avant de basculer la dernière part.

Questions fréquentes

Ce qu’on nous demande sur cette page

Pas pour les médias. Contrat de tâche, noms de champs, automate d’états et sémantique de facturation demandent une correspondance. Le texte est le cas le plus proche : la surface compatible OpenAI ne demande souvent que l’URL de base et la valeur model.

Et après

Mapper un flux et l’estimer

Déplacez un flux à la fois : correspondance des champs, états et erreurs normalisés, factures comparées, bascule avec un retour arrière éprouvé.

Source: fal model APIs ↗

Guides associés