Tigr.pro API v1

Spec version: 1.2.0

REST для приложений + OpenAI-совместимый чат для SDK. Токен создаётся в кабинете. Обзор отличий — на странице для разработчиков.

Почему API Tigr.pro

  • Веб-студия + API на одном балансе в рублях (не только ключ как у RouterAI/KupiAPI)
  • OpenAI-совместимый chat/completions для SDK / Cursor / n8n
  • Студия: изображения, видео, аудио, универсальные промпты
  • Видеостудия (сценарий → кадры → ролик) в веб-интерфейсе
  • Хабы ChatGPT / GPT Image / Flux / Kling / Suno и гайды «О нейросетях»

Base URL: https://tigr.pro/api/v1

OpenAI base URL: https://tigr.pro/api/v1/openai

Auth header: Authorization: Bearer <token>

JSON-версия: https://tigr.pro/api/v1/docs.json

Рекомендуемый клиентский поток

  1. 1) Создайте токен в кабинете или login/register; храните в secure storage.
  2. 2) Для чата в SDK: base_url=.../api/v1/openai + Bearer token.
  3. 3) Для картинок/видео/аудио: /studio/models → /studio/create → poll /studio/status.
  4. 4) Poll status каждые 2–3 с до completed/failed.
  5. 5) On 401 refresh token (или новый токен в кабинете).
  6. 6) Пополнение: /payments/methods → /payments/create.

Платформенные заметки

  • Windows/Mac: Use HTTPS + JSON; keep token in OS keychain/secure storage.
  • Android: Use EncryptedSharedPreferences/Keystore for token.
  • iOS: Use Keychain for token.
  • Общее: Call only this backend API over HTTPS; do not call upstream providers directly.

Готовые клиентские примеры

OpenAI Python SDK (чат)

from openai import OpenAI
client = OpenAI(base_url="https://tigr.pro/api/v1/openai", api_key="YOUR_TOKEN")
r = client.chat.completions.create(
    model="deepseek/deepseek-r1",
    messages=[{"role": "user", "content": "Привет"}],
)
print(r.choices[0].message.content)

Студия: создать задание

POST /api/v1/studio/create/
Authorization: Bearer YOUR_TOKEN
{"model_id":"openai/gpt-image-1.5","prompt":"кот в космосе","params":{"aspect_ratio":"1:1"}}
→ poll GET /api/v1/studio/status/{task_id}/

Android (Kotlin + OkHttp)

val client = OkHttpClient()
val req = Request.Builder()
    .url("$BASE/api/v1/profile/")
    .header("Authorization", "Bearer $token")
    .get()
    .build()
val res = client.newCall(req).execute()
val body = res.body?.string()

Open site button + update check (универсально)

1) GET /api/v1/app/config/
2) Open docs.app.site_url by button "Перейти на сайт"
3) GET /api/v1/app/check-update/?platform=<desktop|android|ios|mac>&current_version=<x.y.z>
4) if update_available=true -> show update action (download_url / play_market_url)
5) if force_update=true -> block app until update

Endpoints

POST /auth/register/

Auth: no

Content-Type: application/json

{'email': 'user@example.com', 'password': 'Secret123!', 'first_name': 'Ivan', 'last_name': 'Ivanov'}

token + user OR requires_email_verification=true

POST /auth/login/

Auth: no

Content-Type: application/json

{'email': 'user@example.com', 'password': 'Secret123!'}

token + user

POST /auth/refresh/

Auth: required

new token, old token invalidated

POST /auth/logout/

Auth: required

current token invalidated

GET /profile/

Auth: required

current user + balance

GET /services/

Auth: required

all active services with descriptions

GET /app/config/

Auth: no

site url + latest versions/links by platform

GET /app/check-update/?platform=android&current_version=1.0.0

Auth: no

update decision for platform

GET /studio/models/?category=image&recommended=1

Auth: required

catalog models (up to 200)

GET /studio/models/{model_pk}/

Auth: required

model detail + form fields

GET /studio/prompts/?category=image

Auth: required

universal prompts for category (id, name, char_count)

POST /studio/create/

Auth: required

Content-Type: application/json

{'model_id': 'openai/gpt-image-1.5', 'prompt': 'кот в космосе', 'params': {'aspect_ratio': '1:1'}, 'universal_prompt_ids': [1, 2]}

task (poll /studio/status/{id}/)

GET /studio/status/{task_id}/

Auth: required

task status + result urls/text

GET /studio/list/?limit=20

Auth: required

user studio tasks

GET /chat/rooms/

Auth: required

chat rooms list

POST /chat/rooms/create/

Auth: required

Content-Type: application/json

{'name': 'Новый чат', 'polza_model_id': 123}

created room

GET /chat/messages/{room_id}/?limit=50

Auth: required

messages in room

POST /chat/send/{room_id}/

Auth: required

Content-Type: application/json

{'content': 'Привет!'}

queued task_id

GET /chat/status/{task_id}/{room_id}/

Auth: required

pending/completed with ai message

GET /openai/models

Auth: required

OpenAI-shaped list of chat models

POST /openai/chat/completions

Auth: required

Content-Type: application/json

{'model': 'deepseek/deepseek-r1', 'messages': [{'role': 'user', 'content': 'Привет'}], 'stream': False}

OpenAI chat.completion (+ usage.cost_rub)

GET /payments/methods/

Auth: required

available payment methods and limits

POST /payments/create/

Auth: required

Content-Type: application/json

{'Idempotency-Key': ''}
{'amount': 500, 'method': 'robokassa | yookassa | tkassa'}

payment + payment_url (generated server-side)

GET /payments/list/?limit=20

Auth: required

payment history

GET /payments/status/{payment_id}/

Auth: required

payment status