Руководство по интеграции Wan API
Создавайте видео Wan через API: ключи, отправка задач, проверка статуса, загрузка результатов, оплата и обработка ошибок.
Подключение к Wan API
Используйте https://api.wanapi.app как базовый URL API. Создайте ключ в настройках API-ключей и передавайте его как Authorization: Bearer YOUR_API_KEY. Храните ключи на сервере. Playground использует Ваш сеанс на сайте и списывает средства с того же баланса; вставлять ключ в браузере не требуется.
Для доступа нужна активная учётная запись с достаточным балансом. Актуальные тарифы приведены на странице цен. У каждой модели свой эндпоинт и страница модели.
GET /v1/models возвращает модели, доступные Вашему ключу. Выбор более высокого разрешения не меняет модель автоматически.
| Модель | ID модели в URL | Значения разрешения |
|---|---|---|
| Wan 3.0 | wan3.0-video | 480p, 720p, 1080p |
| Wan 3.0 Prime | wan3.0-video-prime | 480p, 720p, 1080p |
| Wan 3.0 Pro | w3.0-video-pro | 1080p, 2k, 4k |
| Wan 3.0 Prime Pro | w3.0-video-prime-pro | 1080p, 2k, 4k |
Поля запроса
Все четыре модели используют эти 14 нативных полей генерации и необязательный параметр nsfw_checker. Укажите промпт или хотя бы один медиафайл. Кадры нельзя сочетать с референсами, file или link; file и link взаимоисключающие.
| Поле | Тип | Условия |
|---|---|---|
prompt | string | До 20,000 символов. |
first_frame | string | Общедоступный HTTP(S) URL изображения на Вашем хостинге. Base64 и data URI отклоняются. |
last_frame | string | Общедоступный HTTP(S) URL изображения на Вашем хостинге. Base64 и data URI отклоняются. |
reference_images | string[] | До 10 изображений в тех же форматах, что и кадр. |
reference_videos | string[] | До 5 общедоступных URL MP4/MOV; 1–15 секунд на ролик и не более 15 секунд референсного видео суммарно. |
reference_audios | string[] | До 5 HTTP(S) URL аудио. |
file | string | Общедоступный URL документа. |
link | string | Общедоступный URL веб-страницы. |
resolution | string | См. таблицу моделей. По умолчанию: 1080p. |
ratio | string | adaptive, 16:9, 4:3, 1:1, 3:4, 9:16. По умолчанию: adaptive. |
duration | integer | 2–30 секунд результата или -1 для автоматической длительности. По умолчанию: 5. |
audio | boolean | Генерация аудио. По умолчанию: true. Отключение не снижает тариф. |
seed | integer | 0–2147483647. Не указывайте для случайной генерации. |
prompt_extend | boolean | Расширение промпта. По умолчанию: true. |
nsfw_checker | boolean | По умолчанию: true для Wan 3.0 и Wan 3.0 Prime, false для вариантов Pro. Значение true не поддерживает входные данные file и link. |
В Playground и API для Wan 3.0 и Wan 3.0 Prime по умолчанию используется nsfw_checker: true. Существующим клиентам добавлять параметр не требуется. Варианты Pro поддерживают только false; по умолчанию используется false. Проверки контента Playground действуют при обоих значениях. Параметр влияет на тариф; проверьте актуальную цену для выбранного значения. Недоступный вариант вызывает ошибку, а не переключение на другой режим.
Используйте стабильные прямые URL медиафайлов, доступные до завершения задачи. Проверка длительности видео использует ограниченное чтение HTTP range; сервер видео должен поддерживать такое чтение и предоставлять читаемые метаданные длительности MP4/MOV. При проверке длительности перенаправления не выполняются. URL частных сетей не поддерживаются. Общая длительность референсного и выходного видео не должна превышать 30 секунд. Playground принимает JSON-тело до 32 MiB; для более крупных входных данных используйте URL.
Фильтрация контента и ошибки проверки
nsfw_checker выбирает уровень проверки контента для Wan 3.0 и Wan 3.0 Prime:
true(по умолчанию, в том числе при отсутствии параметра): строгая фильтрация контента.false: менее строгая фильтрация контента. Для этого режима действует другой посекундный тариф; см. актуальную таблицу цен.
Если отправка явно отклонена проверкой контента или сохранённая задача перешла в failed с ошибкой политики контента, задайте nsfw_checker равным false в новом запросе для менее строгой проверки. Сохраните тот же публичный ID модели и остальные поддерживаемые параметры. Например, добавьте это поле в нативное тело запроса или JSON-тело для /v1/responses:
{
"nsfw_checker": false
}Это фрагмент запроса, а не полный запрос генерации. Менее строгая проверка не гарантирует принятие; проверки контента Playground продолжают действовать. Этот параметр не устраняет ошибки параметров, недостаток средств и другие ошибки, не связанные с проверкой. При тайм-ауте отправки или неопределённом результате сначала получите существующую задачу; не отправляйте автоматически ещё одну платную генерацию.
Варианты Pro поддерживают только false и используют false по умолчанию. Исторические задачи сохраняют исходное значение для получения статуса и расчёта стоимости.
content_filter по-прежнему принимается как устаревший псевдоним nsfw_checker. В новых интеграциях используйте nsfw_checker. Если переданы оба поля, их логические значения должны совпадать; противоречащие значения отклоняются.
Проверка статуса и загрузка видео
Эндпоинт отправки каждой модели возвращает публичный ID задачи. Сохраните его прежде, чем выполнять другие действия.
{
"task_info": {
"id": "task_EXAMPLE",
"status": "pending"
}
}Используйте пример проверки статуса из раздела соответствующей модели. Начните с интервала в пять секунд и увеличивайте задержку после временных ошибок. Храните ID модели вместе с ID задачи; не запрашивайте задачу через эндпоинт другой модели.
Нативные статусы: pending, processing, completed и failed. Ответ завершённой задачи содержит videos — массив с полным подписанным URL Bunny CDN.
{
"task_info": { "id": "task_EXAMPLE", "status": "completed" },
"videos": ["https://reapiflexible.b-cdn.net/flexible/v1/expires/2026-11/20261113T06/wanapi-task_EXAMPLE/video.mp4?token=HS256_SIGNATURE&expires=1794550071"]
}Используйте возвращённый URL напрямую для воспроизведения или загрузки; API-ключ и заголовок Authorization для него не нужны. Файлы хранятся согласно действующей политике хранения. Проверка задачи не создаёт новое видео, не вызывает повторного списания и не продлевает доступность файлов. Сохраняйте нужные файлы в собственное хранилище. Для проверки задач нужен Ваш API-ключ; возвращаются только задачи Вашей учётной записи.
Синхронные и фоновые Responses
Для клиентов Responses API эндпоинт POST /v1/responses принимает ID модели, строку input и те же нативные поля генерации. Используйте input вместо prompt. Нативные медиа-поля, например reference_images, остаются полями верхнего уровня.
{
"model": "wan3.0-video",
"input": "A blue ball rolls across a white table.",
"resolution": "480p",
"duration": 2,
"background": true
}При background: true сохраните ID ответа и опрашивайте GET /v1/responses/{response_id}. Без background HTTP-запрос ожидает завершения. stream: true использует server-sent events во время ожидания. Итоговый ответ ассистента содержит подписанный URL видео; считайте его приватной ссылкой доступа и не публикуйте случайно. Для длительной генерации и прокси с короткими тайм-аутами рекомендуется нативная отправка задач или фоновые Responses.
Разрыв соединения или тайм-аут синхронного запроса не отменяет генерацию. Задача остаётся на сервере. Не отправляйте ту же генерацию повторно автоматически.
Оплата и обработка ошибок
Цена равна тарифу модели для выбранного разрешения, умноженному на оплачиваемые секунды. Учитываются и секунды референсного видео, и секунды результата; текст, изображения и аудио не добавляют видеосекунд. Для фиксированной длительности без референсного видео резервируется стоимость запрошенной длительности результата. При автоматической длительности или наличии референсного видео резервируется до 30 оплачиваемых секунд, затем расчёт производится по фактическому использованию, а неиспользованный резерв возвращается. При ошибке генерации резерв освобождается. Проверка статуса не создаёт новую генерацию и не вызывает повторной оплаты.
- Неверные параметры: исправьте запрос перед повторной отправкой. Неизвестные нативные поля отклоняются.
- Недостаточный баланс: пополните его перед новым платным запросом. Лимит ключа не предоставляет средства учётной записи.
- Ограничение частоты или временные ошибки проверки статуса: повторяйте только запрос статуса, увеличивая интервалы и ограничивая общее время ожидания.
- Тайм-аут отправки, разрыв сети или отсутствие ID задачи: результат может быть неизвестен. Не повторяйте POST автоматически: это может создать вторую платную задачу.
- Ошибка задачи: показывайте состояние ошибки отдельно от недоступности запроса статуса.
- Ошибка загрузки: повторите загрузку результата существующей завершённой задачи, прежде чем запускать новую генерацию.
Запросы генерации не повторяются автоматически и не переключаются на другую модель. Заявленного контракта отмены, вебхуков или ключей идемпотентности нет. Сохраните ID задачи и обратитесь в поддержку, если нужно разобраться с неопределённым результатом отправки.