API Ducklygen
Все модели каталога прямо из вашего кода. Один ключ, один баланс, те же цены, что и в студии.
1 · Авторизация
Создайте ключ в разделе Настройки, API-ключи. Передавайте его в каждом запросе как Bearer-токен. Ключи начинаются с dk_live_ и работают только на Ducklygen; храните их на своём сервере, а не в браузере или приложении.
curl https://ducklygen.com/api/v1/api/catalog/me \
-H "Authorization: Bearer $DUCKLYGEN_API_KEY"3 · Запустите генерацию
Один вызов рассчитывает цену именно ваших входных данных и списывает её с баланса. Ответ приходит сразу со статусом queued, а генерация идёт в фоне. Передавайте заголовок Idempotency-Key, чтобы повторный запрос никогда не списал деньги дважды.
curl -X POST https://ducklygen.com/api/v1/api/catalog/generations \
-H "Authorization: Bearer $DUCKLYGEN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"modelId": "image-model-id",
"inputs": {
"prompt": "rubber duck floating on teal water, soft light"
}
}'Сначала узнайте цену (необязательно)
Те же входные данные, оценённые без запуска генерации. Ответ в центах.
curl -X POST https://ducklygen.com/api/v1/api/catalog/quote \
-H "Authorization: Bearer $DUCKLYGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"modelId":"image-model-id","inputs":{"prompt":"rubber duck floating on teal water, soft light"}}'4 · Опрос и загрузка
Запрашивайте генерацию каждые несколько секунд, пока статус не станет succeeded, failed или refunded. При успехе скачайте файл по contentUrl тем же ключом. Текстовая модель вместо этого возвращает ответ в textOutput.
curl https://ducklygen.com/api/v1/api/catalog/generations/ID \
-H "Authorization: Bearer $DUCKLYGEN_API_KEY"
curl https://ducklygen.com/api/v1/api/catalog/generations/ID/content \
-H "Authorization: Bearer $DUCKLYGEN_API_KEY" \
-o result.pngЭндпоинты
Базовый URLhttps://ducklygen.com/api/v1/api/catalog
/meВаш ключ и баланс/modelsВсе модели/models/detail?id=MODEL_IDОдна модель и её поля/quoteЦена для конкретных входных данных/generationsЗапустить генерацию/generationsВаши последние генерации/generations/IDСтатус одной генерации/generations/ID/contentФайл результата/generations/IDУдалить генерациюОшибки и лимиты
Ошибки возвращаются в JSON с кодом и сообщением. 401: ключ не передан, неверен или отозван. 400: недопустимое поле (оно указано в деталях). 402: недостаточно средств на балансе. 409 API_KEY_DAILY_CAP: достигнут дневной лимит этого ключа. 429: слишком много запросов, снизьте частоту. Неудачная генерация возвращается на баланс автоматически.
Цены и баланс
Генерации через API используют тот же баланс, что и студия, и стоят столько же. Все суммы в API указаны в евроцентах: costCents показывает, сколько списано за генерацию, balanceCents показывает остаток.