Vertex API
Одна картинка за запрос. Генерация долгая, поэтому задача ставится сразу, а ссылка на фото приходит, когда готово.
https://s2.x-grk.comКарта:
https://s2.x-grk.com/api/vertex · OpenAPI: https://s2.x-grk.com/api/vertex/openapi.json
Как это работает
HTTP-таймаут на минуты генерации не подходит. Поэтому:
POST /api/vertex/v1/generateотвечает сразу 202 и отдаётjob_id.- Дальше опрашиваете
GET /api/vertex/v1/jobs/{id}, покаstatusне станетdoneилиfailed. - При
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
| Поле | Тип | По умолчанию | |
|---|---|---|---|
prompt | string | — | обязательно, до 4000 символов |
model | string | fast | fast / artist / 0.2plus |
ratio | string | 1:1 | 1:1, 16:9, 9:16, 3:2, 2:3, 4:3, 3:4, auto |
enhance | bool | true | улучшение промпта |
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.
| Поле | Тип | |
|---|---|---|
image | file | обязательно — фото png / jpg / jpeg / webp, до 20 МБ (альтернативные имена поля: photo, file) |
prompt | string | обязательно — инструкция, до 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": "…"}
| code | HTTP | |
|---|---|---|
| unauthorized | 401 | нет или битый ключ |
| banned | 403 | аккаунт заблокирован |
| insufficient_credits | 200 job failed / 202 не будет | мало кредитов |
| daily_limit | failed | дневной лимит фото |
| job_busy | 409 | уже есть активная задача |
| invalid_prompt / model / ratio | 400 | кривой запрос |
| invalid_image | 400 | для edit: нет фото, битый файл или неподдерживаемый формат |
| image_too_large | 413 | фото больше 20 МБ |
| job_not_found | 404 | чужая или несуществующая задача |
| tokens_exhausted | failed | сервис перегружен |
| generation_failed | failed | сбой генерации, кредиты вернутся |
| edit_failed | failed | сбой редактирования, кредиты вернутся |
| source_missing | failed | для edit: исходное фото потеряно при перезапуске сервера |
Не-PRO получают водяной знак на картинке, как в боте. PRO — без него. Редактирование (edit) не тратит дневной лимит фото — только кредиты, как в боте.