Документация
БЫСТРЫЙ СТАРТ

Первая генерация

От API-ключа до готового видео. Пройдите весь путь на одном примере.

Открыть .md
Открыть в AI

Разобраться с AI-ассистентом

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

Cursor и Claude Code откроются с готовым текстом, если он помещается в ссылку. ChatGPT и Antigravity: вставьте скопированный контекст вручную.

Задать вопрос
Seedance 2.5от BytePlus · текст → видео
4 секунды720p16:9

Apergrex использует FrankLab API для генерации и обработки контента из ваших приложений. Ниже — первый полный сценарий с Seedance 2.5 от BytePlus. Подключение к API объясняет общий порядок работы; генерация видео, изображения, текст и аудио и утилиты и монтаж описывают операции модулей Make как REST-запросы. Биллинг, ключи и вебхуки собраны в справочнике.

Базовый URL

Text
https://apergrex.ru/franklab/api

Тот же API доступен на https://franklab.ru/franklab/api.

Получите API-ключ

  1. Войдите в кабинет apergrex.ru и откройте Настройки → API.
  2. Нажмите «Создать ключ» — получите значение вида fl_live_….
  3. Ключ показывается один раз — сохраните его сразу. Храните как пароль: ключ даёт доступ к балансу и операциям партнёра.

Список ключей доступен и программно (GET /v1/billing/api-keys, см. Справочник API → api-keys); выпуск и отзыв ключей — только из сессии кабинета, чтобы сам ключ не мог плодить новые.

Первая генерация: видео из текста

Создадим видео Seedance 2.5 от BytePlus · 4 секунды · 720p · 16:9, без загрузки файлов. Нужны Bash, cURL, jq и API-ключ с доступом к балансу. Выполняйте шаги по очереди: при ошибке остановитесь и прочитайте ответ, прежде чем переходить дальше.

В примере используются публичные маршруты Make MOON. Псевдоним moon_pro выбирает Seedance 2.5; внутренний идентификатор модели провайдера остаётся на сервере. Запрос estimate только оценивает стоимость и не запускает задачу. Сумма во Франках зависит от текущего тарифа и не фиксирует окончательную цену.

1. Подготовьте ключ

Введите ключ в терминале: ввод скрыт и не попадает в историю команд. Не вставляйте его в браузерный JavaScript или публичный репозиторий.

bash
read -rsp 'API key: ' FRANKLAB_KEY; echo
export FRANKLAB_KEY
export FRANKLAB_BASE_URL='https://apergrex.ru/franklab/api'
export FRANKLAB_IDEMPOTENCY_KEY="apergrex-seedance-$(date +%s)-$$"

2. Проверьте доступный баланс

bash
curl --fail-with-body --max-time 30 \
  -H "X-API-Key: ${FRANKLAB_KEY:?Set your API key}" \
  "$FRANKLAB_BASE_URL/v1/billing/balance" \
  -o balance.json
jq '{available, reserved}' balance.json

available — сумма, доступная для новых операций, во Франках. reserved — уже зарезервированные средства. При недостаточном балансе пополните его в кабинете и повторите проверку.

3. Получите оценку стоимости

bash
curl --fail-with-body --max-time 30 -X POST \
  -H "X-API-Key: ${FRANKLAB_KEY:?Set your API key}" \
  -H 'Content-Type: application/json' \
  --data-binary @- \
  "$FRANKLAB_BASE_URL/make/moon/estimate" \
  -o estimate.json <<JSON
{"operation":"text_to_video","moonModel":"moon_pro","prompt":"A silver running shoe on a white pedestal, slow camera orbit in soft studio light, no logos or text.","duration":4,"resolution":"720p","ratio":"16:9","generate_audio":false,"idempotency_key":"${FRANKLAB_IDEMPOTENCY_KEY}"}
JSON
jq '.data | {estimated_cost_franks, cost_currency, cost_unit, cost_status}' estimate.json

Остановитесь, если запрос оценки завершился ошибкой, .data.estimated_cost_franks отсутствует или не является числом либо available отсутствует, не является числом или меньше оценки. Не отправляйте задачу без успешной оценки и достаточного баланса. Оценка не создаёт задачу и не резервирует средства. Она не фиксирует цену: итог может зависеть от текущего тарифа и использования задачи. cost_unit в ответе задаёт единицу расчёта; не выводите из этого примера стоимость одной секунды.

При 401/403 проверьте ключ, при 429 дождитесь разрешённого повтора. Правила описаны в разделе ошибок.

4. Запустите один раз

Следующая команда создаёт платную задачу и может зарезервировать средства. Выполните её один раз, после проверки оценки и баланса. Параметры и ключ идемпотентности совпадают с запросом оценки.

bash
curl --fail-with-body --max-time 120 -X POST \
  -H "X-API-Key: ${FRANKLAB_KEY:?Set your API key}" \
  -H 'Content-Type: application/json' \
  --data-binary @- \
  "$FRANKLAB_BASE_URL/make/moon/videos" \
  -o submit.json <<JSON
{"operation":"text_to_video","moonModel":"moon_pro","prompt":"A silver running shoe on a white pedestal, slow camera orbit in soft studio light, no logos or text.","duration":4,"resolution":"720p","ratio":"16:9","generate_audio":false,"idempotency_key":"${FRANKLAB_IDEMPOTENCY_KEY}"}
JSON
jq '.data | {taskId, status, final_cost_franks, cost_unit, cost_status}' submit.json

После успешного ответа сохраните data.taskId (или data.task_id):

bash
FRANKLAB_TASK_ID=$(jq -er '(.data.taskId // .data.task_id) | select(type == "string" and length > 0)' submit.json)
export FRANKLAB_TASK_ID

При тайм-ауте, 5xx или ответе без ID задачи результат запуска неизвестен. Не повторяйте POST с новым ключом идемпотентности: задача могла быть принята. Сначала сверьте историю задач в кабинете; если ID не найден, обратитесь в поддержку, указав время, модель и ответ без ключа. Если согласован повтор, используйте тот же ключ идемпотентности и те же параметры запроса.

5. Проверяйте статус той же задачи

bash
curl --fail-with-body --max-time 30 \
  -H "X-API-Key: ${FRANKLAB_KEY:?Set your API key}" \
  "$FRANKLAB_BASE_URL/make/moon/status/${FRANKLAB_TASK_ID:?Set the returned task ID}" \
  -o status.json
jq '.data | {taskId, status, final_cost_franks, cost_unit, result, videoUrl, video_url, error_message, error}' status.json

Повторяйте только этот GET примерно раз в 5 секунд, максимум 60 проверок за один цикл. Это ограничение клиента, а не обещанное время генерации. При 429 увеличьте паузу согласно ответу; при 401/403/404 остановитесь и разберите причину. Исчерпание цикла не отменяет задачу: сохраните ID и позже продолжите GET с ним.

data.statusЧто делать
queued, processingЗадача ещё выполняется; продолжать ограниченный опрос.
completedПолучить ссылку из data.videoUrl или data.video_url (также доступна в data.result.video_url).
failedПрекратить опрос, прочитать data.error_message или data.error, сверить баланс и транзакции.
Другое значениеСохранить ответ и ID, уточнить состояние; не создавать новую задачу автоматически.

6. Получите видео и проверьте расчёт

bash
jq -er '.data | select(.status == "completed") | (.videoUrl // .video_url // .result.video_url) | select(type == "string" and startswith("https://"))' status.json

Откройте возвращённую HTTPS-ссылку или сохраните файл в своём хранилище. Если задача завершилась без ссылки, сохраните ответ и обратитесь в поддержку; повторный запуск не исправляет выдачу результата. Срок доступности ссылки не гарантируется этим руководством.

final_cost_franks — итоговая стоимость после завершения расчёта; null не означает, что генерация была бесплатной. Сверьте итог с балансом и транзакциями. Не выводите итоговую стоимость из первоначальной оценки.

Дальше

/docs.md
Не нашли ответ?Связаться с поддержкой