Начните самостоятельно
API-кабинет открывается после регистрации и подтверждения email. Выберите ключ и окружение: Sandbox проверяет интеграцию без модели, рабочий API использует доступные аккаунту модели. Для помощи с нестандартной интеграцией можно обратиться в поддержку.
Node.js: проверка ключа · Python: чтение каталога · Подключение MCP · Контроль расходов
Единые цены
На сайте и в кабинете действует одна версия каталога. перед запуском проверяйте цену в ответе расчёта. Доступность платных методов зависит от условий аккаунта, модели и баланса.
Модели и ориентиры B2BСхема интеграции
- Создайте рабочий ключ в API-кабинете и проверьте доступ аккаунта. Храните секрет только на сервере.
- Запросите цену через
/images/quotesлибо/videos/quotes. Расчёт не запускает генерацию. - Проверьте цену и срок расчёта. После согласия подтвердите через
/images/generationsлибо/videos/generationsсquoteId,confirm: trueи сохранённымidempotencyKey. - HTTP 202 означает очередь. Опросите
/jobs/IDдля фото либо/videos/jobs/IDдля видео. - Скачайте результат по приватному
result.urlс тем же ключом. ПроверяйтеexpiresAt; результаты хранятся 7 дней.
Base URL: https://api.prelusion.ru/api/developer/v1. Зарегистрируйтесь, подтвердите email и создайте ключ в API-кабинете. Доступ к конкретной модели зависит от условий аккаунта. Примеры расчёта сами не запускают генерации.
Nano Banana 2.1
curl https://prelusion.ru/api/developer/v1/images/quotes \
-H "Authorization: Bearer $PRELUSION_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "prelusion/nano-banana-2-1",
"prompt": "Стеклянная ваза на сером фоне",
"quality": "1K",
"aspectRatio": "1:1"
}'Seedance 2.0
curl https://prelusion.ru/api/developer/v1/videos/quotes \
-H "Authorization: Bearer $PRELUSION_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "prelusion/seedance-2-0",
"prompt": "Камера плавно приближается к стеклянной вазе",
"duration": 5,
"resolution": "480p",
"aspectRatio": "16:9"
}'Seedance 2.5
curl https://prelusion.ru/api/developer/v1/videos/quotes \
-H "Authorization: Bearer $PRELUSION_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "prelusion/seedance-2-5",
"prompt": "Камера плавно приближается к стеклянной вазе",
"duration": 5,
"resolution": "480p",
"aspectRatio": "16:9"
}'Ошибки и безопасные повторы
| HTTP | Что делать |
|---|---|
| 400 / 413 | Проверьте параметры и размер запроса. |
| 401 / 403 | Проверьте ключ, окружение и допуск. |
| 402 | Недостаточно доступного баланса для резерва. |
| 409 | Расчёт истёк либо ключ повтора уже использован с другими параметрами. |
| 429 | Соблюдайте Retry-After; новый API-ключ не увеличивает лимит аккаунта. |
| 503 | Проверьте статус исходной задачи; не создавайте новый платный запуск вслепую. |
Повтор подтверждения выполняется с теми же quoteId и idempotencyKey. Если статус reconciling, ждите сверки и не создавайте новую задачу.
Текстовый API: GPT, Claude и Gemini
После предоставления допуска текстовый обработчик принимает сообщения без файлов и изображений. Наличие модели в общем каталоге не означает, что её обработчик уже включён для аккаунта.
- Вызовите
POST /api/developer/v1/text/quotesс моделью, сообщениями и пределом ответа. В ответеrub— максимальный резерв, а не фактическое списание. - Подтвердите резерв через
POST /api/developer/v1/text/generations:quoteId,confirm: trueи уникальныйidempotencyKey. Ответ 202 означает очередь. - Проверяйте
GET /api/developer/v1/text/jobs/{id}. Получите текст по приватной ссылкеresult.urlс тем же ключом API.
{
"model": "prelusion/gpt-5-6-sol",
"messages": [
{
"role": "user",
"content": "Придумай три названия для приложения"
}
],
"maxOutputTokens": 2048
}Списание рассчитывается отдельно по фактическим входным и выходным токенам, по версии тарифа из расчёта. Неиспользованный резерв освобождается. finishReason: length означает, что ответ обрезан пределом длины; это не полный ответ. Состояние reconciling требует проверки: не создавайте повторный платный запрос с новым ключом. Потоковый режим и вызовы инструментов в этом обработчике пока не поддерживаются.
Webhook завершения задач
Опциональная доставка на HTTPS-адрес из настроек проекта. По умолчанию внешняя отправка выключена; её включение согласуется отдельно. До включения используйте опрос статуса. Подготовка адреса не открывает платный доступ.
POST JSON. Типы: job.succeeded, job.failed, job.cancelled; бесплатная проверка — webhook.test. Поля: id, type, createdAt, data. Для задачи data содержит id, model, status, chargedRub, chargedCredits, statusUrl. В тесте data равно {"test":true}.
Промпт, файл и данные аккаунта не входят в событие. За результатом обращайтесь к statusUrl с API-ключом, затем скачивайте приватный result.url. Не считайте уведомление о завершении гарантией доступности файла после срока хранения.
Подпись: X-Prelusion-Signature: t=UNIX_SECONDS,v1=HEX. HMAC-SHA256 от timestamp + '.' + rawBody, ключ — отдельный секрет webhook, не API-ключ. Проверяйте исходные байты, отклоняйте отклонение времени более 5 минут в любую сторону. Синхронизируйте часы сервера. Пример проверки на Python:
import hashlib, hmac, time
def verify_webhook(secret, signature, raw_body):
fields = dict(part.split("=", 1) for part in signature.split(","))
timestamp = fields["t"]
if abs(time.time() - int(timestamp)) > 300:
raise ValueError("Expired signature")
signed = timestamp.encode("ascii") + b"." + raw_body
expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
if not hmac.compare_digest(expected, fields["v1"]):
raise ValueError("Invalid signature")
# Parse JSON only after verification. Deduplicate event ID in your database.
return TrueНеверный формат заголовка тоже отклоняйте (ошибка 400/401). После проверки подписи сохраняйте event ID и принятую задачу транзакционно, затем отвечайте 2xx. Заголовок X-Prelusion-Event-Id совпадает с id тела. Повтор с тем же id не должен повторять вашу бизнес-операцию.
Доставка допускает дубли: стабильный event ID, новая подпись при каждой попытке. До 8 попыток за 72 часа; паузы 1, 5, 15 минут, 1, 3, 6 и 12 часов. После ответа 2xx повторы прекращаются. Ошибки, таймауты и 3xx вызывают повтор; перенаправления не выполняются. Журнал хранится 30 дней после создания события. Финансовый итог и генерация от доставки не зависят.
Только публичный HTTPS, порт 443, без логина, пароля, query и fragment. DNS проверяется перед каждой попыткой. Смена адреса, секрета или переключателя отменяет старую очередь, но уже отправленный запрос отозвать нельзя. Новая настройка не пересылает старые завершённые задачи. Пропущенное событие восстанавливайте опросом статуса, не повторным запуском генерации.
Баланс по API
GET /api/developer/v1/balance с заголовком Authorization: Bearer $PRELUSION_API_KEY возвращает currency, balanceRub, reservedRub, availableRub и checkedAt. Запрос бесплатный: не запускает модель и не создаёт резерв. Используйте действующий платный ключ своего аккаунта, не Sandbox-ключ. Проверка остаётся доступна при остановке новых генераций.
Для нового запроса ориентируйтесь на availableRub, а не на весь баланс. Ответ — снимок на указанное время, не гарантия будущего резерва: параллельные задачи могут изменить сумму. Не опрашивайте чаще раза в минуту; при 429 соблюдайте Retry-After.
Баланс и оплата
API-кредиты — единицы баланса, не токены нейросети. Изображение оплачивается за результат, видео — за секунду; текст оплачивается раздельно за входные и выходные токены. Резерв не равен списанию. Заявка не создаёт аккаунт, ключ, платёж или счёт. Перед платным запросом проверьте условия аккаунта, доступный баланс и сумму расчёта.