Что указать в заявке
Задачу, объём в месяц и ссылку на продукт. Без ключей, клиентских файлов и персональных данных в описании задачи. Подберём модели и обсудим лимиты, оплату и хранение результатов.
Две разные цены
B2B-цены предварительные: конфигурацию, доступность и условия фиксируем в предложении. Они не меняют тариф кабинета автоматически. Кабинет показывает тариф пилота; перед запуском проверяйте цену в ответе расчёта. Самостоятельная регистрация не включает платные методы.
Модели и ориентиры B2BСхема интеграции
- Получите отдельный допуск и платный ключ. Храните секрет только на сервере.
- Запросите цену через
/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://prelusion.ru/api/developer/v1. Платные методы сейчас закрыты для общего доступа. Примеры ниже предназначены для расчёта после допуска, не запускают генерации.
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, ждите сверки и не создавайте новую задачу.
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-кредиты — единицы баланса, не токены нейросети. Изображение оплачивается за результат, видео — за секунду; текст оплачивается раздельно за входные и выходные токены. Резерв не равен списанию. Заявка не создаёт аккаунт, ключ, платёж или счёт. Платный контур не открывается автоматически: условия, документы и оплату согласуем до подключения.