# arckep.ru > AI image, video, and chat studio (RUB billing). Public Developer API for backends, n8n, and SDKs. arckep (https://arckep.ru) is a multi-model AI studio: images (Gemini, Imagen, FLUX, GPT Image, Grok, Qwen, Wan, Midjourney, Recraft, …), video (Veo, Wan, Sora, Kling, Seedance, …), chat (GPT-5.x, Claude, Grok, Gemini, Kimi, DeepSeek, …), plus music, TTS, and related tools. Studio prices are in RUB. Corporate balance is supported. ## Documentation for LLMs and integrators - Full Public API guide (EN, machine-oriented): https://arckep.ru/docs/api.md - Human guide (RU, rendered page — send end users here): https://arckep.ru/developer/docs - API landing with live model prices: https://arckep.ru/developer - This index: https://arckep.ru/llms.txt - Source in repo (same content as the EN guide above): docs/guides/public-api.md ## Public Developer API (summary) - Base URL: `https://arckep.ru/api/v1` - Auth: `Authorization: Bearer ark_live_…` - Create keys in the product UI: Settings → API, or JWT studio routes under `https://arckep.ru/api/developer/keys` - Scopes: `images:write`, `videos:write`, `chat:write` (opt-in), `balance:read`, `uploads:write` - Core routes: - `GET /models` — image + video + chat catalog (authoritative allowlist) - `GET /balance` - `POST /uploads` - `POST /chat/completions` — OpenAI-compatible (JSON or SSE stream); scope `chat:write` - `POST|GET|LIST /images/generations`, `POST /images/estimate` - `POST|GET|LIST /videos/generations`, `POST /videos/estimate` - list/get only return jobs created via this API key surface, never studio UI history - Image/video jobs are async (`202` + poll or webhooks). Statuses: `queued` | `processing` | `completed` | `failed` - Chat is synchronous: `stream:false` JSON or `stream:true` SSE; preflight by estimated cost; charge_with_audit+overdraft+journal; concurrent chat slots; free models off by default; `usage.cost_rub` in RUB - Chat tools: function tools only (`type=function`); multi-turn `role:tool` (client runs tools). `web_search:true` → Anthropic/Google/xAI native web; OpenAI → **HTTP 400**. Billed: tokens + per-search surcharge. No studio chat history storage. - Billing: images hold+refund; videos charge upfront+refund; chat token-based after stream; retired model ids alias to successors (e.g. Opus 4.x → Opus 5) — never cheap silent fallback. Corporate wallet when enabled - Webhooks (image/video): HTTPS only, HMAC-SHA256 `X-Arckep-Signature` (`webhook_secret` once on key create; rotate via `POST /api/developer/keys/{id}/rotate-webhook-secret`), events `image|video.generation.completed|failed` - Chat transport: `GET /models` → `transport` = `direct` | `openrouter` (DeepSeek+Qwen on our keys; Kimi/GLM/MiniMax/… via OpenRouter like LobeChat; no Inworld for chat) - Idempotency-Key on image/video creates; default rate limits 60 RPM / 500 RPD / 5 concurrent jobs (Redis fail-closed) - OpenAI SDK: `base_url=https://arckep.ru/api/v1`, `api_key=ark_live_…`, chat model ids from `GET /models` where `type=chat` - Full parameter lists, curl examples, and error shapes: see https://arckep.ru/docs/api.md ## Errors Envelope: `{"error_code": "...", "message": "...", "details": {...}}`. Branch on `error_code`; `message` wording may change without notice. | HTTP | error_code | Retry? | Meaning / fix | |---|---|---|---| | 400 | `INVALID_MODEL` | no | Model not on allowlist. Re-read `GET /models` | | 400 | `INVALID_PARAMETER` | no | Bad field value — see `details.field` / `details.reason` | | 400/422 | `VALIDATION_ERROR` | no | Body/schema/limits violated (also: `web_search:true` on OpenAI chat models) | | 400 | `SAFETY_BLOCKED` | no | Provider content filter — change prompt/assets | | 401 | `UNAUTHORIZED` | no | Missing/invalid/revoked `ark_live_` key | | 402 | `INSUFFICIENT_BALANCE` | no | `details.required` / `details.available` in RUB | | 403 | `FORBIDDEN` | no | Missing scope (`details.required`) or banned account | | 404 | `RESOURCE_NOT_FOUND` | no | Unknown job id, or a studio job not created via this API | | 409 | `REQUEST_IN_PROGRESS` / `DUPLICATE_REQUEST` | after delay | Same `Idempotency-Key` in flight / already completed | | 413 | `FILE_TOO_LARGE` | no | Upload over 10 MB | | 429 | `RATE_LIMIT_EXCEEDED` | yes, back off | `details.limit` says which limit fired (rpm / rpd / concurrency) | | 500 | `GENERATION_FAILED`, `INTERNAL_ERROR`, `PROVIDER_OVERLOADED`, `OPERATION_TIMEOUT` | yes, backoff | Provider/server failure; failed jobs are refunded | | 503 | `SERVICE_UNAVAILABLE` | yes, later | Public API disabled or dependency fail-closed | Do not treat an error response as "charged": image holds are refunded, video charges are refunded, chat only bills a delivered answer. ## Chat request limits - ≤100000 chars per message, ≤64 messages, ≤200000 chars total (tools JSON counts toward the total) - `max_tokens` ≤16384; ≤32 tools; 5 concurrent streams per key - Text only — image parts are rejected (use `POST /images/generations`) ## Product entry points - Home: https://arckep.ru - Image studio: https://arckep.ru/studio - Video studio: https://arckep.ru/video - Account / API keys: https://arckep.ru/settings - AI chat (LobeChat): https://chat.arckep.ru ## Optional API auth notes 1. Issue a live key once; store the secret offline (not retrievable later). 2. Prefer webhooks over aggressive polling for image/video. 3. Always discover models via `GET https://arckep.ru/api/v1/models` (filter by `type`). 4. Do not crawl authenticated `/api/*` job paths for SEO; use this file and `/docs/*` for machine-readable docs. 5. Chat requires explicit `chat:write` on the key (not default). Free $0 models are not on the public allowlist unless enabled in env. ## Contact Support and account help: googlmen1057@gmail.com — include the job id and `error_code`. Product site: https://arckep.ru