Vertex API

Одна картинка за запрос. Генерация долгая, поэтому задача ставится сразу, а ссылка на фото приходит, когда готово.

Base URL: https://s2.x-grk.com
Карта: https://s2.x-grk.com/api/vertex · OpenAPI: https://s2.x-grk.com/api/vertex/openapi.json

Как это работает

HTTP-таймаут на минуты генерации не подходит. Поэтому:

  1. POST /api/vertex/v1/generate отвечает сразу 202 и отдаёт job_id.
  2. Дальше опрашиваете GET /api/vertex/v1/jobs/{id}, пока status не станет done или failed.
  3. При done в ответе будет photo_url — прямая ссылка на PNG.

Можно не крутить цикл самому: ?wait=60 подождёт до 60 секунд на одном запросе и вернёт актуальный статус.

Тот же цикл работает и для редактирования: POST /api/vertex/v1/edit тоже возвращает job_id.

Авторизация

Заголовок Authorization: Bearer vx_… или X-API-Key. Ключ выдаётся в боте скрытой командой и показывается один раз. Одновременно действует только один ключ.

curl https://s2.x-grk.com/api/vertex/v1/me \
  -H "Authorization: Bearer vx_YOUR_KEY"

Создать задачу

POST/api/vertex/v1/generate

ПолеТипПо умолчанию
promptstring—обязательно, до 4000 символов
modelstringfastfast / artist / 0.2plus
ratiostring1:11:1, 16:9, 9:16, 3:2, 2:3, 4:3, 3:4, auto
enhancebooltrueулучшение промпта
curl -X POST https://s2.x-grk.com/api/vertex/v1/generate \
  -H "Authorization: Bearer vx_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "cinematic portrait, golden hour",
    "model": "artist",
    "ratio": "3:4",
    "enhance": true
  }'

Ответ 202:

{
  "ok": true,
  "job_id": "job_…",
  "status": "queued",
  "cost": 5,
  "poll_url": "https://s2.x-grk.com/api/vertex/v1/jobs/job_…"
}

Кредиты и дневной лимит списываются в момент старта генерации. Если задача упадёт — вернутся. Одновременно у пользователя может быть только одна активная задача.

Редактирование фото

POST/api/vertex/v1/edit

Присылаете своё фото и текстовую инструкцию, что в нём изменить (пример: «убери человека справа», «сделай закат на фоне»). Заголовок Content-Type ставить не нужно — curl сам поставит multipart/form-data.

ПолеТип
imagefileобязательно — фото png / jpg / jpeg / webp, до 20 МБ (альтернативные имена поля: photo, file)
promptstringобязательно — инструкция, до 4000 символов
curl -X POST https://s2.x-grk.com/api/vertex/v1/edit \
  -H "Authorization: Bearer vx_YOUR_KEY" \
  -F "image=@photo.jpg" \
  -F "prompt=замени дневной фон на ночной город с огнями"

Ответ 202:

{
  "ok": true,
  "job_id": "job_…",
  "status": "queued",
  "cost": 2,
  "poll_url": "https://s2.x-grk.com/api/vertex/v1/jobs/job_…"
}

Дальше — стандартный опрос GET /v1/jobs/{id}. Стоимость редактирования — 2 кредитов. Редактор не тратит дневной фотолимит (списываются только кредиты), водяной знак для не-PRO ставится как в боте.

Статус задачи

GET/api/vertex/v1/jobs/{job_id}

Опционально ?wait=1…90 — сервер сам подождёт, пока задача не завершится или не истечёт wait.

curl "https://s2.x-grk.com/api/vertex/v1/jobs/JOB_ID?wait=45" \
  -H "Authorization: Bearer vx_YOUR_KEY"

status: queued → running → done | failed. Поле kind различает задачи: generate или edit.

{
  "ok": true,
  "job_id": "job_…",
  "status": "done",
  "photo_url": "https://s2.x-grk.com/uploads/userphoto/ai/<tag>.png",
  "cost": 5,
  "balance": 42
}

Профиль

GET/api/vertex/v1/me — баланс, PRO, дневной лимит, активная задача.

Модели

idИмяАлиасыЦена
fast Стандарт fast, standard, std 1 💎
artist PRO artist, pro 5 💎
0.2plus Premium 0.2plus, premium, prem 10 💎

GET/api/vertex/v1/models — то же в JSON, цены актуальные.

Ошибки

Всегда JSON: {"ok": false, "error_code": "…", "error": "…"}

codeHTTP
unauthorized401нет или битый ключ
banned403аккаунт заблокирован
insufficient_credits200 job failed / 202 не будетмало кредитов
daily_limitfailedдневной лимит фото
job_busy409уже есть активная задача
invalid_prompt / model / ratio400кривой запрос
invalid_image400для edit: нет фото, битый файл или неподдерживаемый формат
image_too_large413фото больше 20 МБ
job_not_found404чужая или несуществующая задача
tokens_exhaustedfailedсервис перегружен
generation_failedfailedсбой генерации, кредиты вернутся
edit_failedfailedсбой редактирования, кредиты вернутся
source_missingfailedдля edit: исходное фото потеряно при перезапуске сервера

Не-PRO получают водяной знак на картинке, как в боте. PRO — без него. Редактирование (edit) не тратит дневной лимит фото — только кредиты, как в боте.

by x-grk