Разработчикам

API Opencran

Все модели каталога прямо из вашего кода. Один ключ, один баланс, те же цены, что и в студии.

1 · Авторизация

Создайте ключ в разделе Настройки, API-ключи. Передавайте его в каждом запросе как Bearer-токен. Ключи начинаются с oc_live_ и работают только на Opencran; храните их на своём сервере, а не в браузере или приложении.

curl
curl https://opencran.com/api/v1/api/catalog/me \
  -H 'Authorization: Bearer oc_live_...'

2 · Выберите модель

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

Выбранная модельopencran/fast-image/text-to-image
Страница модели →
Поля
ИмяТипОбязательноеПо умолчанию
prompttextда-
aspect_ratio1:1 | 2:1 | 1:2 | 3:1 | 1:3 | 21:9 | ...нет1:1

3 · Запустите генерацию

Один вызов рассчитывает цену именно ваших входных данных и списывает её с баланса. Ответ приходит сразу со статусом queued, а генерация идёт в фоне. Передавайте заголовок Idempotency-Key, чтобы повторный запрос никогда не списал деньги дважды.

curl
curl -X POST https://opencran.com/api/v1/api/catalog/generations \
  -H 'Authorization: Bearer oc_live_...' \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "modelId": "opencran/fast-image/text-to-image",
  "inputs": {
    "prompt": "a lighthouse on a cliff at dusk, soft light"
  }
}'

Сначала узнайте цену (необязательно)

Те же входные данные, оценённые без запуска генерации. Ответ в центах.

curl
curl -X POST https://opencran.com/api/v1/api/catalog/quote \
  -H 'Authorization: Bearer oc_live_...' \
  -H 'Content-Type: application/json' \
  -d '{"modelId":"opencran/fast-image/text-to-image","inputs":{"prompt":"a lighthouse on a cliff at dusk, soft light"}}'

4 · Опрос и загрузка

Запрашивайте генерацию каждые несколько секунд, пока статус не станет succeeded, failed или refunded. При успехе скачайте файл по contentUrl тем же ключом. Текстовая модель вместо этого возвращает ответ в textOutput.

curl
curl https://opencran.com/api/v1/api/catalog/generations/GENERATION_ID \
  -H 'Authorization: Bearer oc_live_...'
curl
curl https://opencran.com/api/v1/api/catalog/generations/GENERATION_ID/content \
  -H 'Authorization: Bearer oc_live_...' \
  -o result.png

Эндпоинты

Базовый URL: https://opencran.com/api/v1/api/catalog

GET/meВаш ключ и баланс
GET/modelsВсе модели
GET/models/detail?id=MODEL_IDОдна модель и её поля
POST/quoteЦена для конкретных входных данных
POST/generationsЗапустить генерацию
GET/generationsВаши последние генерации
GET/generations/IDСтатус одной генерации
GET/generations/ID/contentФайл результата
DELETE/generations/IDУдалить генерацию

Цены и баланс

Генерации через API используют тот же баланс, что и студия, и стоят столько же. Все суммы в API указаны в евроцентах: costCents показывает, сколько списано за генерацию, balanceCents показывает остаток.

Ошибки и лимиты

Ошибки приходят в JSON с кодом и сообщением. 401: ключ не передан, неверен или отозван. 400: поле некорректно (в деталях указано какое). 402: недостаточно средств на балансе. 429: слишком много запросов, снизьте темп. Неудавшийся рендер возвращается автоматически. Точные лимиты опубликуем к запуску ключей. 403 с HTML-страницей: запрос остановлен до API, обычно из-за User-Agent. Стандартный Python-urllib блокируется, укажите свой, например User-Agent: my-app/1.0.