Справочник API

Видео

POST/v1/videos
GET/v1/videos/{task_id}
GET/v1/videos/{task_id}/content

Асинхронная генерация видео (Seedance, Kling, Veo, Wan, Grok Imagine …). /v1/videos принимает данные для генерации видео по тексту и по изображению в одном запросе формата OpenAI. Возвращает task_id для опроса — или зарегистрируйте вебхук при отправке.

#Параметры запроса

  • modelstringобязательно

    ID видеомодели со страницы моделей, например doubao-seedance-2.5.

  • promptstringобязательно

    Описание сцены; для image2video задаёт движение.

  • imagestringнеобязательно

    Только для image2video: изображение первого кадра в виде URL или base64.

  • imagesarrayнеобязательно

    Референсные кадры для провайдеров, которые принимают несколько изображений в одной задаче.

  • durationnumberнеобязательно

    Длительность ролика в секундах — влияет на ценовой уровень; допустимые значения указаны в карточке модели.

  • secondsnumberнеобязательно

    Псевдоним длительности ролика в некоторых семействах моделей; предпочтительное поле — duration.

  • resolutionstringнеобязательно

    Уровень разрешения результата, например 720p или 1080p, если модель его поддерживает.

  • sizestringнеобязательно

    Соотношение сторон или размер для семейств моделей, которые задают размер как ширина x высота.

  • webhook_urlstringнеобязательно

    HTTPS-URL, который вызывается, когда задача переходит в конечное состояние, — формат обратного вызова описан в руководстве по видео.

  • webhook_secretstringнеобязательно

    Если задан, каждая доставка содержит X-Xiaoxiang-Signature: sha256=hex(HMAC-SHA256(body, secret)).

Параметры провайдера передаются как есть

Семейства моделей принимают дополнительные параметры провайдера (aspect_ratio, cfg_scale, negative_prompt …), которые передаются без изменений и описаны в карточке модели; неизвестные поля отклоняет провайдер, а не шлюз.

За неудачные задачи средства возвращаются автоматически

За видеозадачи средства списываются при отправке и полностью возвращаются, если задача завершилась со статусом failed, — в журнале операций возврат связан с исходным списанием.

#Отмена выполняющейся задачи

DELETE/v1/videos/:task_id

Останавливает задачу, которая ещё не перешла в конечное состояние. При успехе зарезервированная квота возвращается, задача записывается как failed с причиной "cancelled by user", а зарегистрированный вебхук срабатывает как task.failed.

Большинство провайдеров не поддерживает отмену

Отмена передаётся вышестоящему провайдеру, и поддерживают её лишь некоторые. Остальные отвечают 501 task_cancel_not_supported. В интерфейсе считайте отмену попыткой без гарантий: продолжайте опрос и не обещайте пользователю возврат средств, пока вызов не вернёт 200.
curl -X DELETE https://www.aisplice.store/v1/videos/task_xxx \
  -H "Authorization: Bearer sk-YOUR_KEY"
cancelled.json
{
  "id": "task_xxx",
  "task_id": "task_xxx",
  "status": "cancelled"
}

Обратите внимание: "cancelled" встречается только в этом ответе. При следующем опросе задача будет в статусе failed — именно в это состояние она переведена.

  • 404 task_not_existНеизвестный ID задачи, или она принадлежит другому аккаунту.
  • 409 task_not_cancellableЗадача уже завершена — останавливать нечего.
  • 501 task_cancel_not_supportedУ этого провайдера нет API отмены.

Полная таблица кодов ошибок →

#Ремикс существующего видео

POST/v1/videos/:video_id/remix

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

curl https://www.aisplice.store/v1/videos/task_xxx/remix \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: remix-of-task_xxx" \
  -d '{"prompt": "Same shot, at night"}'
remix.json
{
  "task_id": "task_yyy",
  "status": "queued",
  "remixed_from_video_id": "task_xxx"
}

Ремикс — новая платная задача

Он стоит столько же, сколько оригинал, проходит тот же жизненный цикл и возвращает собственный task_id. Опрашивайте новый ID — исходная задача не меняется.
  • 400 invalid_requestДля ремикса prompt обязателен.
  • 400 task_not_existID исходного видео неизвестен или принадлежит другому аккаунту.
  • 400 task_channel_disableКанал, создавший исходное видео, больше не активен.

Полная таблица кодов ошибок →

#Связанные ошибки

  • 404 not_foundНеизвестный путь, неизвестное имя модели или просроченный / чужой task_id.
  • 422 unprocessable_entityПровайдер отклонил значения параметров, переданные шлюзом (например, неподдерживаемый размер или длительность).
  • 401Bearer-токен недействителен или отсутствует. На этом пути error.code нет — ориентируйтесь на статус.
  • 402 insufficient_user_quotaБаланса кошелька не хватает на предварительно резервируемую сумму.
  • 429Ограничение частоты для ключа. Тело пустое; дождитесь Retry-After. Если же в ответе 429 есть insufficient_user_quota, это дневной лимит расходов.
  • 503 model_not_foundНеизвестная модель, или сейчас её не обслуживает ни один исправный канал.

Полная таблица кодов ошибок →

#Пример запроса

# submit
curl https://www.aisplice.store/v1/videos \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "doubao-seedance-2.5", "prompt": "A drone shot of a lighthouse at dawn"}'

# poll every 5s
curl https://www.aisplice.store/v1/videos/$TASK_ID -H "Authorization: Bearer sk-YOUR_KEY"

# download when completed
curl -L https://www.aisplice.store/v1/videos/$TASK_ID/content -o out.mp4 -H "Authorization: Bearer sk-YOUR_KEY"

#Ответ

response.json
// POST — submit accepted
{"task_id": "task_xxx", "status": "queued"}

// GET /v1/videos/{task_id}
{
  "task_id": "task_xxx",
  "status": "in_progress",      // queued | in_progress | completed | failed
  "progress": "45%"
}

// terminal state
{
  "task_id": "task_xxx",
  "status": "completed",
  "metadata": {"url": "https://…"}
}

Проблема не решена?

Пришлите нам ID запроса или текст ошибки, и мы разберёмся.