Документация API

Генерация видео

Генерация коротких видео через поддерживаемые видео-модели.

Скачать инструкцию для агента .md

Маршрут видео принимает любую доступную видео-модель из каталога. Формат запроса общий: текст, картинка на входе, видео на входе и дополнительные параметры передаются в один и тот же путь. Конкретные значения длительности, разрешения, звука и качества зависят от выбранной модели.

Запрос может идти долгоГенерация синхронная: соединение держится открытым, пока модель готовит ролик. Для клиентов и тестов ставьте запас по времени, например 10-15 минут.
Точный id моделиВ поле model передавайте точный id из каталога или /v1/models. Если модель скрыта или недоступна для ключа, запрос вернет ошибку доступа или временной недоступности.

Маршрут

txt
POST https://api.aigate.shop/v1/video/generationsAuthorization: Bearer sk-your-api-keyContent-Type: application/json

Также принимается совместимый путь POST /v1/videos. Для новых подключений используйте /v1/video/generations: после завершения генерации в ответе приходит массив videos со ссылкой на готовый файл.

Видео по тексту

Запрос
curl --max-time 900 https://api.aigate.shop/v1/video/generations \  -H "Authorization: Bearer sk-your-api-key" \  -H "Content-Type: application/json" \  -d '{    "model": "provider/video-model-id",    "prompt": "A cinematic shot of a glass sphere floating over a neon city",    "duration": 5,    "resolution": "720p",    "aspect_ratio": "16:9",    "audio": false,    "n": 1  }'

Kling

Для моделей Kling используйте тот же маршрут /v1/video/generations. Standard/Pro можно передавать через tier, mode или quality. Для motion-control передайте картинку персонажа и видео движения: input_video, character_orientation и keep_original_sound передаются как параметры модели.

Пример Kling
curl --max-time 900 https://api.aigate.shop/v1/video/generations \  -H "Authorization: Bearer sk-your-api-key" \  -H "Content-Type: application/json" \  -d '{    "model": "klingai/kling-v3.0-t2v",    "prompt": "A realistic cinematic product shot, slow dolly camera movement, natural light",    "duration": 5,    "resolution": "720p",    "aspect_ratio": "16:9",    "audio": false,    "quality": "std",    "negative_prompt": "text, watermark, blurry, distorted hands",    "seed": 42,    "n": 1,    "provider_options": {      "cfg_scale": 0.65    }  }'
Kling motion-control
curl --max-time 900 https://api.aigate.shop/v1/video/generations \  -H "Authorization: Bearer sk-your-api-key" \  -H "Content-Type: application/json" \  -d '{    "model": "klingai/kling-v3.0-motion-control",    "prompt": {      "text": "Make the character follow the reference motion.",      "image": "https://example.com/character.png"    },    "input_video": "https://example.com/reference-motion.mp4",    "tier": "pro",    "character_orientation": "image",    "keep_original_sound": false,    "camera_control": "simple",    "cfg_scale": 0.65  }'

Видео по картинке

Исходную картинку можно передать двумя способами. Удобный вариант - объект prompt с text и image. Если клиенту проще держать prompt строкой, используйте input_image, input_image_url, image_url, image или input_image_b64.

prompt.text + prompt.image
curl --max-time 900 https://api.aigate.shop/v1/video/generations \  -H "Authorization: Bearer sk-your-api-key" \  -H "Content-Type: application/json" \  -d '{    "model": "provider/video-model-id",    "prompt": {      "text": "Animate this frame: slow camera push-in, soft light, smooth motion",      "image": "https://picsum.photos/seed/aigate-video-frame/1024/768"    },    "duration": 5,    "resolution": "720p",    "aspect_ratio": "16:9",    "audio": false,    "n": 1  }'
prompt строкой + input_image
curl --max-time 900 https://api.aigate.shop/v1/video/generations \  -H "Authorization: Bearer sk-your-api-key" \  -H "Content-Type: application/json" \  -d '{    "model": "provider/video-model-id",    "prompt": "Turn the reference image into a short looping product shot",    "input_image": "https://picsum.photos/seed/aigate-video-product/1024/1024",    "duration": 5,    "resolution": "720p",    "aspect_ratio": "1:1",    "audio": false  }'

Видео на входе

Для моделей, которые умеют менять или продолжать видео, передавайте один исходный ролик через input_video. Если нужно дать несколько видео-референсов, используйте reference_videos. Если модель не поддерживает видео на входе, API вернет ошибку по параметрам.

Запрос с input_video
curl --max-time 900 https://api.aigate.shop/v1/video/generations \  -H "Authorization: Bearer sk-your-api-key" \  -H "Content-Type: application/json" \  -d '{    "model": "provider/video-model-id",    "prompt": "Make the camera movement smoother and keep the same subject",    "input_video": "https://example.com/source.mp4",    "duration": 5,    "resolution": "720p",    "aspect_ratio": "16:9",    "provider_options": {      "style": "cinematic"    }  }'

Несколько референсов и аудио

Если модель поддерживает несколько референсов, используйте reference_images, reference_videos или reference_urls. Для видео-референса передавайте input_video, когда нужен один клип, или reference_videos, когда клипов несколько. Для внешней аудиодорожки используйте input_audio, input_audio_b64 или audio_url. Поддержка зависит от выбранной модели: если режим не поддерживается, API вернет ошибку параметров.

Референсы Seedance
curl --max-time 900 https://api.aigate.shop/v1/video/generations \  -H "Authorization: Bearer sk-your-api-key" \  -H "Content-Type: application/json" \  -d '{    "model": "bytedance/seedance-2.0-fast",    "prompt": "Use the image references for characters, the video reference for motion, and sync the result to the audio.",    "reference_images": [      "https://example.com/character.png",      "https://example.com/background.png"    ],    "reference_videos": [      "https://example.com/motion.mp4"    ],    "input_audio": "https://example.com/music.mp3",    "duration": 5,    "resolution": "480p",    "aspect_ratio": "16:9",    "n": 1  }'
Seedance audioSeedance 2.0 Fast принимает внешнюю аудиодорожку через input_audio или audio_url вместе с reference_images или input_video. По текущему каналу аудио должно быть от 1 до 15 секунд: файлы длиннее 15 секунд провайдер отклоняет ошибкой параметров. Для картинки + аудио используйте reference_images: input_image может считаться first-frame режимом и конфликтовать с reference media.

Ответ

Готовое видео
{  "created": 1780047578,  "model": "provider/video-model-id",  "duration": 5,  "videos": [    {      "url": "https://api.aigate.shop/v1/videos/task_qZj21ARTSQzsyHoh82QBs7oPwnKvCOIu/content",      "mime_type": "video/mp4"    }  ]}
Ссылка временнаяЧитайте видео из videos[0].url. Это публичная временная ссылка AIGate, она живет 20 минут. AIGate не хранит ролики у себя постоянно, а отдает файл потоком.

Сохранить файл

ts
import { writeFile } from "node:fs/promises";const videoUrl = response.videos[0].url;const file = await fetch(videoUrl);if (!file.ok) {  throw new Error(await file.text());}writeFile("aigate-video.mp4", Buffer.from(await file.arrayBuffer()));

Поля запроса

ПолеОбяз.Что значит
modelдаТочный id видео-модели из каталога или /v1/models.
promptдаОписание ролика. Можно передать строку или объект { text, image } для картинки на входе.
input_image / image_url / image / input_image_urlнетКартинка на входе: ссылка, data URL или значение, которое поддерживает выбранная модель. Для Seedance image + audio лучше используйте reference_images.
input_image_b64нетКартинка в base64 без отдельной ссылки.
input_videoнетВидео на входе для моделей, которые умеют менять или продолжать ролик.
input_video_b64нетВидео в base64 без отдельной ссылки.
input_audio / audio_urlнетВнешняя аудиодорожка для моделей, которые умеют синхронизировать звук. Для Seedance по текущему каналу используйте аудио 1-15 секунд; длиннее 15 секунд не проходит.
input_audio_b64нетАудио в base64 без отдельной ссылки.
reference_imagesнетОдна или несколько картинок-референсов, если выбранная модель поддерживает такой режим.
reference_videosнетОдин или несколько видео-референсов, если модель принимает видео на входе.
reference_urlsнетУниверсальный список ссылок на референсы для reference-to-video моделей.
last_frame_image / image_tailнетФинальный кадр для моделей first/last-frame.
durationнетДлина ролика в секундах. Пределы зависят от модели.
resolutionнетНапример 480p, 720p, 1080p, 4K или WIDTHxHEIGHT. Поддержка зависит от модели.
aspect_ratioнет16:9, 9:16, 1:1, 4:3, 3:4
nнетКоличество роликов. Если не указано, обычно создается один.
audioнетВключить или выключить звук, если модель это поддерживает.
soundнетСтроковый переключатель звука для моделей, где провайдер использует on/off.
quality / mode / tierнетКачество или режим: draft, std, pro, 4k, single, multi и похожие значения, если модель принимает такой параметр.
camera_control / camera_control_configнетУправление камерой для моделей Kling, которые принимают camera control.
character_orientationнетОриентация персонажа для Kling motion-control: обычно image или video.
keep_original_soundнетСохранить звук из исходного видео для motion-control, если модель поддерживает.
voice_listнетГолоса для Kling voice-control. В prompt используйте маркеры <<<voice_1>>>.
poll_timeout_ms / poll_interval_msнетНастройка ожидания долгой задачи у провайдера.
negative_promptнетЧто не нужно добавлять в ролик.
seedнетЧисло для повторяемой генерации, если модель поддерживает.
userнетВаш идентификатор пользователя на стороне клиента. Нужен только если вы сами ведете такой учет.
provider_options / metadataнетДополнительные параметры конкретной модели. metadata принимается как совместимый вариант.

Ошибки

StatuscodeПричинаЧто делать
401http_401Ключ неверный или не передан.Проверьте Authorization: Bearer sk-...
404not_foundНеверный путь, id задачи или модель не найдена.Проверьте маршрут, id модели и ссылку.
410http_410Ссылка на файл истекла.Сгенерируйте ролик заново или скачайте его в течение 20 минут.
429insufficient_quotaНедостаточно баланса или лимита для запроса.Пополните баланс или уменьшите параметры генерации.
500/502/503api_errorМодель временно не смогла обработать видео.Повторите позже, уменьшите параметры или выберите другую доступную модель.
Истекшая ссылка
{  "error": {    "message": "Video link expired",    "type": "invalid_request_error",    "code": "http_410",    "status": 410  }}