Перейти к основному контенту

Руководство по миграции

Переносите сценарий, а не весь каталог.

Две платформы могут предлагать одну и ту же задачу и всё равно расходиться в именах полей, значениях по умолчанию, конечных состояниях, смысле ошибок и в том, что считается единицей тарификации. Миграция, начатая со смены базового адреса, находит всё это в бою.

Задача

Та же задача, другой контракт

Чисто переносится только модель. Не переносится всё вокруг: какие поля обязательны, какие значения по умолчанию, как попадает внутрь опорное изображение, когда резервируются деньги и что ваш код должен делать с незнакомым состоянием.

01

Имена полей и значения по умолчанию почти никогда не совпадают

Выписывайте сопоставление по каждому эндпоинту, а не выводите его. Ввод проверяется по опубликованной схеме с закрытым additionalProperties, поэтому несопоставленное поле — это 400 на первом же боевом запросе, а не предупреждение в журнале.

02

Деньги резервируются при приёме, а не по завершении

createTask резервирует оценку и возвращает её в cost с settled: false. Если нынешний поставщик списывает только при успехе, ваша сверка должна понимать резервы до переноса трафика.

03

Словарь ошибок закрыт и невелик

Девять значений покрывают любой отказ, включая content_rejected: отказ — это конечная задача, а не исключение. Сопоставьте существующие ветки ошибок с этими девятью до переключения, а не после.

Подход

Прогоните один эндпоинт в тени, сравните числа и переключайтесь

Возьмите один сценарий, запишите его нынешние входы, выходы, отказы и удельную стоимость и повторите те же условия здесь. Сравните оценку из jobs/quote с тем, что платите сегодня, держите оба пути живыми за флагом и повышайте долю, только пока числа сходятся.

Сначала оценка: та же проверка и то же решение о приёме, что и при создании, но без резерва и без запуска генерации.

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

Контракт

Что стоит зафиксировать сразу

Альтернатива fal: перенос изображений и видео — Что стоит зафиксировать сразу
Поле или заголовокЗначение или предел
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

Проведите по горизонтали, чтобы увидеть все столбцы.

Интеграция

От первого вызова до продакшена

  1. 01Выберите один эндпоинт и соберите десять представительных запросов, их результаты и текущую стоимость.
  2. 02Сопоставьте каждое поле с input_schema целевого эндпоинта и сохраните сопоставление с версией.
  3. 03Оцените каждое сопоставленное тело и сравните estimatedCost, quantity и unit с сегодняшним счётом.
  4. 04Тень, затем канарейка, затем рост доли — и старый путь остаётся вызываемым на каждом шаге.

Применимость

Когда этот путь подходит

Выбирайте, если

  • Нужны один баланс, один набор лимитов и один контракт задачи для изображений, видео и текста.
  • Узкое место — политика контента или доступность отдельных моделей, а не качество модели.

Ищите другое, если

  • Нужно переключить всё за один день. Различия контрактов проявляются по эндпоинтам и проявляются поздно.
  • Интеграция вызывает модель с клиента. Здесь ключи принадлежат серверу.

Проверки

Что вы можете проверить сами

Оценка — это настоящий холостой прогон

POST /api/v1/jobs/quote выполняет ту же проверку и то же решение о приёме, что и создание, возвращает estimatedCost, maxCharge, quantity и unit и ничего не резервирует. Подписанная оценка действует пять минут.

Изменившаяся цена падает, а не удивляет

Отправляйте quoteId и expectedCost вместе с созданием. Если цена изменилась, приём вернёт бизнес-код 40901 до любого резервирования.

Опубликованные имена вызовов не двигаются

Опубликованное имя остаётся действительным, а переименование сохраняет 308 и псевдоним. Ваша таблица сопоставления не протухает молча между релизами.

Перед запуском

Поведение платформы, которое стоит подтвердить

  • Версионируйте сопоставление полей и держите по одному успешному и одному неуспешному примеру на эндпоинт.
  • Убедитесь, что каждый целевой эндпоинт вызываем и имеет цену, до маршрутизации хотя бы одного запроса.
  • Отрепетируйте откат под реальным трафиком, а не на тестовой ветке.
  • Сверяйте резервы и списания целый расчётный цикл, прежде чем переводить последнюю долю.

Частые вопросы

О чём спрашивают на этой странице

Для медиа — нет. Контракт задачи, имена полей, автомат состояний и семантика тарификации требуют сопоставления. Ближе всего текст: OpenAI-совместимой поверхности обычно хватает базового адреса и значения model.

Дальше

Сопоставить один сценарий и оценить его

Переносите по одному сценарию: сопоставьте поля, приведите состояния и ошибки, сравните счёт и переключайтесь с проверенным откатом.

Источник: fal model APIs ↗

Другие руководства