Гайды
POST /videos принимает model, prompt и поддержанные моделью параметры. duration — целое число секунд; resolution, aspect_ratio или size определяют размер. generate_audio — логическое значение.
frame_images задаёт опорные кадры: type=image_url, image_url.url, frame_type=first_frame или last_frame. input_references может содержать image_url, video_url или audio_url. Совместимость сочетаний определяется моделью.
Seedance 2.5 использует один формат входа для RouterAI и Kie.ai: input_references и frame_images. Прежние reference_image_urls, reference_video_urls, reference_audio_urls, first_frame_url и last_frame_url преобразуются при приёме запроса. Не смешивайте старое и общее представление одного поля. Опорные кадры и референсы не совмещаются. Для Kie.ai последний кадр требует первого. Параметры сохраняются при переключении поставщика: adaptive, 1080p и другие параметры, доступные только отдельному маршруту, не заменяются автоматически.
Для редактирования видео в Seedance 2.5 передайте duration=-1, aspect_ratio=adaptive и хотя бы один video_url в input_references без frame_images. Исходное видео должно длиться 4–30 секунд; результат сохраняет длительность и пропорции видео, выбранного моделью для редактирования. Этот режим доступен через совместимые маршруты RouterAI и Kie.ai. Параметры задаёт клиент; сервис не определяет режим по промпту и не заменяет их автоматически. Для исправленного повторного запуска используйте новый Idempotency-Key.
Получите HTTP 202 и собственный ID. GET /requests/{id} показывает состояние и результат. Опрос не создаёт новой генерации; повторный POST с тем же Idempotency-Key возвращает тот же запрос.
Файлы готовы после состояния completed. Получайте их через адрес Formula AI с Bearer. Не завершённая финансовая сверка отображается отдельно как billing.status=pending.
Полная реальная приёмка видео ещё не завершена. Уровень проверки доступен в каталоге моделей; включение маршрута по указанию владельца не означает реального завершения генерации.
cURL · POST /videos
curl "https://formula-ai.ru/api/v1/videos" \
-H "Authorization: Bearer $AI_SERVICE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: example-videos-1" \
--data-binary "{
\"model\": \"$AI_SERVICE_MODEL\",
\"prompt\": \"A paper boat floating on a quiet pond\"
}"
cURL · GET /requests/REQUEST_ID
curl "https://formula-ai.ru/api/v1/requests/REQUEST_ID" \
-H "Authorization: Bearer $AI_SERVICE_API_KEY"
PHP · POST /videos
<?php
$key = getenv("AI_SERVICE_API_KEY");
$url = "https://formula-ai.ru/api/v1/videos";
$handle = curl_init($url);
curl_setopt_array($handle, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode(["model" => getenv("AI_SERVICE_MODEL"), "prompt" => "A red circle on a white background"], JSON_THROW_ON_ERROR),
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . $key, "Content-Type: application/json", "Idempotency-Key: php-videos-1"],
]);
if (getenv("AI_SERVICE_CA")) {
curl_setopt($handle, CURLOPT_CAINFO, getenv("AI_SERVICE_CA"));
}
$body = curl_exec($handle);
if ($body === false) {
throw new RuntimeException(curl_error($handle));
}
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
echo json_encode(["status" => $status, "result" => $result], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
PHP · GET /requests/
<?php
$key = getenv("AI_SERVICE_API_KEY");
$url = "https://formula-ai.ru/api/v1/requests/";
$url .= rawurlencode(getenv("AI_SERVICE_REQUEST_ID"));
$handle = curl_init($url);
curl_setopt_array($handle, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . $key],
]);
if (getenv("AI_SERVICE_CA")) {
curl_setopt($handle, CURLOPT_CAINFO, getenv("AI_SERVICE_CA"));
}
$body = curl_exec($handle);
if ($body === false) {
throw new RuntimeException(curl_error($handle));
}
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
echo json_encode(["status" => $status, "result" => $result], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
Примеры cURL используют Bash. Задайте AI_SERVICE_API_KEY и AI_SERVICE_MODEL; модель выберите из /models. В PHP для опроса/файла задайте AI_SERVICE_REQUEST_ID/AI_SERVICE_MEDIA_ID, для правки — AI_SERVICE_SOURCE_URL. Для локального сертификата используйте доверенный CA через --cacert, для PHP — AI_SERVICE_CA. Проверку TLS сохраняйте включённой.