Ошибки API Wan 3.0: каждый отказ с точным ответом

duration out of range [2, 30], aspect_ratio 21:9 not supported, model_not_found. Реальные тела ошибок видео-эндпоинта Wan 3.0 и что каждое из них значит.

Ошибки API Wan 3.0: каждый отказ с точным ответом

Каждая ошибка ниже — это буквальное тело ответа видео-эндпоинта Wan 3.0, снятое 4 сентября 2026 года. Никаких пересказов, никаких выдуманных текстов ошибок. Если ваш запрос падает, сопоставьте поле code с этим списком.

model_not_found         → строки модели не существует
unsupported_parameter   → значение вне диапазона или недопустимо
invalid_request         → отсутствует обязательное поле
invalid_api_key         → ключ неверный, отсутствует или отозван

Ошибки с реальными телами ответа

duration вне диапазона

{"error":{"code":"unsupported_parameter","message":"duration 45 out of range [2, 30]"}}

Wan 3.0 принимает целое число от 2 до 30 секунд. Всё, что вне этих границ, падает — в обе стороны. Запрос на 1 секунду возвращает ту же форму:

{"error":{"code":"unsupported_parameter","message":"duration 1 out of range [2, 30]"}}

Это самая вероятная ошибка после апгрейда, и причин у неё две, разнонаправленных:

  • Если вы пришли с Wan 2.7 или 2.6, ваш код, скорее всего, зажимает значение до 15 секунд, потому что это был их потолок. Ошибки не будет, вас просто тихо ограничит половиной того диапазона, который даёт Wan 3.0. Что ещё изменилось, разобрано в сравнении Wan 3.0 и Wan 2.7.
  • Если вы пришли с Seedance 2.5, ваш код, скорее всего, требует минимум 4 секунды, потому что это нижняя граница Seedance. На Wan 3.0 это без всякой причины делает недоступными клипы в 2 и 3 секунды.

Одно правило легко упустить: при передаче входного видео для продолжения справочник API Alibaba указывает, что длительность входа плюс длительность вывода вместе не могут превышать 30 секунд. Эти 30 — общий бюджет, а не квота вывода поверх вашего входа.

aspect_ratio не поддерживается

{"error":{"code":"unsupported_parameter","message":"aspect_ratio \"21:9\" not supported; allowed: [16:9 4:3 1:1 3:4 9:16 adaptive]"}}

У Wan 3.0 нет 21:9. Ошибка любезно печатает весь допустимый набор, и его стоит прочитать внимательно, потому что он отличается от соседей в обе стороны:

Соотношение сторонWan 3.0Wan 2.7Seedance 2.5
21:9
16:9
4:3
1:1
3:4
9:16
adaptive

То есть конвейер, который маршрутизирует между Wan 3.0 и Seedance 2.5, не может использовать общее жёстко заданное 21:9. Либо рендерите 16:9 на Wan и обрезаете, теряя вертикальное разрешение, либо отправляете кинематографические задачи в Seedance. В обратную сторону: 4:3 и 3:4 работают на Wan 3.0, но не на Wan 2.7, так что путь отката ломается там, где путь апгрейда не ломается.

resolution не поддерживается

{"error":{"code":"unsupported_parameter","message":"resolution \"4k\" not supported; allowed: [480p 720p 1080p]"}}

Только 480p, 720p и 1080p. В этом поколении нет 4K, и Seedance 2.5 тоже упирается в 1080p. Если требование 4K реально, никакая правка параметров ни на одной из моделей его не удовлетворит. Единственная модель в каталоге, которая указывает 4K, — более старый флагман bytedance/seedance-2.0 за $0.07 в секунду, он разобран в сравнении Seedance 2.0 и Wan.

Учтите, что при пропущенном resolution Wan 3.0 по умолчанию берёт 1080p, а Seedance 2.5 — 720p. Это различие не выбрасывает ошибку, что и делает его опасным в параллельном тесте. При сравнении фиксируйте разрешение на обеих.

model_not_found

{"error":{"code":"model_not_found","message":"model not found"}}

Такой строки в каталоге нет. Допустимые строки Wan 3.0 на Ofox:

  • alibaba/wan-3.0
  • alibaba/wan-3.0-prime
  • датированные алиасы wan-3.0-20260824 и wan-3.0-prime-20260824

Ловушка в том, что собственная строка модели у Alibaba другая. В Alibaba Cloud Model Studio это wan3.0-video и wan3.0-video-prime, без дефиса после wan и с суффиксом -video. Копирование имени модели прямо из документации Alibaba в вызов шлюза даёт ровно эту ошибку. Если сомневаетесь, проверьте GET /v1/models: это источник истины о том, что можно вызвать.

invalid_request

{"error":{"code":"invalid_request","message":"prompt is required"}}

Отсутствует обязательное поле. В отличие от unsupported_parameter, который означает, что вы отправили существующее, но недопустимое значение. Различие важно, когда вы пишете логику повторов: ни то, ни другое не стоит повторять без изменений, но чинится это по-разному. Отсутствующее поле — баг в вашем сборщике запросов; значение вне диапазона — обычно пробел в конфигурации или в проверке пользовательского ввода.

invalid_api_key

{"error":{"code":"invalid_api_key","message":"invalid API key"}}

Ключ неверный, отсутствует, отозван или от другого аккаунта. Проверьте, что заголовок Authorization выглядит как Bearer <key> и что ключ подгружается из окружения, а не оказывается молча пустым. Пустая переменная даёт именно эту ошибку, а не ошибку об отсутствующем заголовке, из-за чего люди ищут не там.

Что ошибкой не является

Генерация видео асинхронна. Успешное создание возвращает задачу, и вы либо опрашиваете её, либо передаёте callback_url и получаете уведомление о завершении. Статус pending или in-progress — не сбой, и оповещения по нему создают шум, который хоронит настоящие сбои. Внимания заслуживают только финальные состояния сбоя и коды выше. Поведение ожидания и разумный интервал опроса разобраны в руководстве по опросу видео-API.

Запрос, который проходит

После того как вы нашли свою ошибку выше, вот форма, которая проходит все проверки этой модели:

curl -X POST https://api.ofox.io/v1/videos \
  -H "Authorization: Bearer $OFOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "alibaba/wan-3.0",
    "prompt": "A paper boat drifting down a rain gutter, close on the water line",
    "duration": 5,
    "resolution": "1080p",
    "aspect_ratio": "16:9"
  }'

Каждое поле здесь внутри допустимого диапазона: строка модели существует, 5 лежит в [2, 30], 1080p входит в допустимый набор разрешений, а 16:9 — в допустимый набор соотношений сторон. Замените одно из них на что-то вне этих границ, и получите соответствующую ошибку выше — быстрый способ убедиться, что ваша обработка ошибок работает, до того как она понадобится.

Сколько модель стоит после успешного запроса и как единая посекундная ставка соотносится с ценами Alibaba по градациям разрешения, смотрите в руководстве по ценам и доступу Wan 3.0.

Источники

Каждое тело ошибки в этой статье снято с живых запросов к эндпоинту Ofox /v1/videos 4 сентября 2026 года. Тексты ошибок на других маршрутах, включая прямые обращения к Alibaba Cloud, используют другую оболочку и другие коды.

Часто задаваемые вопросы

Почему Wan 3.0 возвращает duration out of range?
Потому что запрошенная длина клипа вне диапазона от 2 до 30 секунд. Точный ответ: {"error":{"code":"unsupported_parameter","message":"duration 45 out of range [2, 30]"}}. Это самая частая поломка при апгрейде: код, написанный под Wan 2.7, зажимает значение до 15 секунд, а код, написанный под Seedance, требует минимум 4 секунды, и ни то, ни другое не совпадает с диапазоном Wan 3.0 от 2 до 30.
Почему aspect_ratio 21:9 не проходит на Wan 3.0?
Wan 3.0 его не поддерживает. API возвращает aspect_ratio "21:9" not supported; allowed: [16:9 4:3 1:1 3:4 9:16 adaptive]. Seedance 2.5 действительно указывает 21:9, поэтому конвейер, переключающийся между двумя моделями, не может использовать общее жёстко заданное значение 21:9. Используйте 16:9 на Wan и обрезайте либо направляйте кинематографический вывод в Seedance.
Что означает model_not_found на эндпоинте Wan 3.0?
Строки модели нет в каталоге. Ответ: {"error":{"code":"model_not_found","message":"model not found"}}. Допустимые строки на Ofox — alibaba/wan-3.0 и alibaba/wan-3.0-prime, а также датированные алиасы wan-3.0-20260824 и wan-3.0-prime-20260824. Обратите внимание на дефис: собственная строка Alibaba — wan3.0-video, и это не то, что ожидает этот шлюз.
Почему Wan 3.0 отклоняет моё разрешение?
Принимаются только 480p, 720p и 1080p. Запрос 4k вернёт resolution "4k" not supported; allowed: [480p 720p 1080p]. Ни Wan 3.0, ни Seedance 2.5 не указывают 4K, поэтому прямой замены для него в этом поколении нет.
В чём разница между invalid_request и unsupported_parameter?
invalid_request означает, что отсутствует что-то обязательное, например {"error":{"code":"invalid_request","message":"prompt is required"}}. unsupported_parameter означает, что вы отправили значение, которое модель не примет, вроде длительности 45 секунд или соотношения 21:9. Первое — отсутствующее поле, второе — поле вне диапазона, и чинятся они по-разному.
Означает ли 202 или статус pending, что что-то сломалось?
Нет. Генерация видео асинхронна: успешное создание возвращает задачу, которую вы затем опрашиваете, а статус pending просто значит, что рендер ещё не завершён. Считайте нефинальный статус нормой, а не ошибкой, и оповещайте только по финальным состояниям сбоя или по кодам ошибок, описанным здесь.