Грифель

API: задачи Грифеля из ваших программ

По ключу запускаются «Карточка товара», «Фото на чистом фоне» и «Просто картинка» — из вашей программы, таблицы или сервиса автоматизации. Ключ выдаётся на платном тарифе; запуски идут за те же ⚡ и по тем же ценам, что на сайте.

Как начать

  1. Выпишите ключ в разделе «API» на странице «Аккаунт». Действующих ключей — до 5; сам ключ показывается один раз, у нас хранится только его отпечаток.
  2. Передавайте его в каждом запросе заголовком Authorization: Bearer grf_…
  3. Запустите задачу и опрашивайте её состояние раз в несколько секунд, пока не станет done или failed.

Адреса

Корень — https://grifel24.ru/api/v1. Ответы — JSON, кроме самого файла.

ЗапросЧто делает
GET /api/v1/balanceБаланс ⚡ и тариф
GET /api/v1/tasksКакие задачи открыты, их поля, варианты и уровни
POST /api/v1/uploadsЗагрузить исходную картинку (multipart, поле file) — в ответ идентификатор
POST /api/v1/runsЗапустить задачу: ⚡ списаны, работа в очереди
GET /api/v1/runs/{id}Состояние запуска; у готового — файлы
GET /api/v1/files/{id}Скачать файл результата

Пример: карточка из снимка

Загрузить снимок, запустить задачу, дождаться, скачать.

# 1. Снимок товара
curl -X POST https://grifel24.ru/api/v1/uploads \
  -H "Authorization: Bearer $GRIFEL_KEY" \
  -F "file=@termos.jpg"
# → {"id":"<upload>","width":1200,"height":1600,"bytes":345120}

# 2. Запуск
curl -X POST https://grifel24.ru/api/v1/runs \
  -H "Authorization: Bearer $GRIFEL_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1001" \
  -d '{"task":"marketplace","params":{"photo":"<upload>","product":"Термос стальной 500 мл"}}'
# → {"runs":[{"id":"<run>","status":"waiting","url":"https://grifel24.ru/api/v1/runs/<run>"}],"spentZap":12,"photos":1,"variants":1}

# 3. Состояние — раз в несколько секунд
curl https://grifel24.ru/api/v1/runs/<run> -H "Authorization: Bearer $GRIFEL_KEY"
# → {"id":"<run>","status":"done","spentZap":12,"files":[{"id":"<file>","url":"https://grifel24.ru/api/v1/files/<file>","mimeType":"image/png","width":1536,"height":2048}]}

# 4. Файл
curl -L https://grifel24.ru/api/v1/files/<file> -H "Authorization: Bearer $GRIFEL_KEY" -o kartochka.png

Числа в примере условные, кроме цены: 12 ⚡ — столько сейчас стоит карточка по фото с настройками по умолчанию. Точная сумма каждого запуска — в поле spentZap ответа.

Задачи и их поля

Сейчас по ключу открыты 3 задачи. Поля — те же, что в форме на сайте; полный перечень с вариантами отдаёт GET /api/v1/tasks. Поля задачи передаются внутри «params», файл — идентификатором загрузки.

Карточка товара — marketplace

Уровни: GENERATE_2K — 2K, от 10 ⚡; GENERATE_4K — 4K, от 33 ⚡; GENERATE_1K — 1K, от 6 ⚡. По умолчанию — GENERATE_2K.

ПолеЧто этоЗначения
photoИзображениеидентификатор загрузки
keepПредмет с фото«», model
referenceПример для подражанияидентификатор загрузки
product *Что на изображениистрока
captionНадписи на карточкестрока
platformФорма кадраwb, ozon, 9:16

Фото на чистом фоне — white-bg

Уровни: GENERATE_2K — 2K, от 10 ⚡; GENERATE_4K — 4K, от 33 ⚡; GENERATE_1K — 1K, от 6 ⚡. По умолчанию — GENERATE_2K.

ПолеЧто этоЗначения
photo *Изображениеидентификатор загрузки
referenceПример для подражанияидентификатор загрузки
productЧто на изображениистрока
backgroundФонwhite, web, transparent, soft, example, interior, wood, stone, nature
keepПредмет с фото«», photo
formatФорма кадраsame, 1:1, 3:4, 4:3, 16:9, 9:16

Просто картинка — free

Уровни: GENERATE_2K — 2K, от 10 ⚡; GENERATE_4K — 4K, от 33 ⚡; GENERATE_1K — 1K, от 6 ⚡. По умолчанию — GENERATE_2K.

ПолеЧто этоЗначения
photoИсходное фотоидентификатор загрузки
referenceПример для подражанияидентификатор загрузки
idea *Что нарисоватьстрока
captionНадписи на картинкестрока
formatПропорции1:1, 3:4, 4:3, 16:9, 9:16

* — обязательное. Помимо полей задачи запрос принимает quality, model, variants, outputFormat и notes (уточнения к генерации).

Деньги

Ошибки

Вид один: {"error":{"code":"…","message":"…"}} — code для программы, message по-русски для человека.

КодcodeЧто значит
400unknown_task, unknown_field, refused…Запрос составлен неверно или задача отказала. ⚡ не списаны
401invalid_keyКлюч не принят: неверный, отозванный или выписан до смены пароля
402insufficient_fundsНе хватает ⚡. Ничего не списано
403plan_required, email_not_verifiedТариф стал пробным или почта не подтверждена
404not_foundНет такого запуска или файла — или он чужой
409request_in_progressЗапрос с этим ключом идемпотентности ещё выполняется
429rate_limitedСлишком часто; в заголовке Retry-After — через сколько секунд повторить
503service_paused, service_unavailableСервис на паузе или очередь недоступна. ⚡ возвращены

Пределы

Запусков — до 60 в час, загрузок — до 60 в час: столько же, сколько на сайте, и считаются они вместе с ним. Всех запросов по ключу — до 6000 в час: хватает, чтобы опрашивать состояние десятка работ раз в несколько секунд. Сверх предела — ответ 429 с заголовком Retry-After.

Чего в API нет

Ключ — это пароль

Ключ тратит ваши ⚡, но в кабинет не пускает: оплата, пароль и удаление аккаунта по ключу недоступны. Отозвать ключ можно в «Аккаунте»; «Выйти на всех устройствах» и смена пароля отзывают все ключи разом. Ключей у одного аккаунта — до 5: удобно держать свой на каждую интеграцию и отзывать по одному.

Вопросы и то, чего не хватает, — в поддержку: API первый шаг, и следующий мы выбираем по просьбам.