API Документация
REST API для доступа к 50+ AI-моделям. SSE-стриминг, per-token биллинг, JWT авторизация.
Getting Started
Base URL для всех запросов:
https://stone-ai-production.up.railway.appВсе запросы используют JSON. Ответы чата — Server-Sent Events (SSE). Авторизация через JWT токен в заголовке Authorization: Bearer <token>.
Быстрый старт:
- Зарегистрируйтесь:
POST /api/auth/register - Получите JWT токен из ответа
- Отправьте сообщение:
POST /api/chat
Авторизация
Регистрация нового пользователя:
curl -X POST https://stone-ai-production.up.railway.app/api/auth/register \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "mypassword"}'Ответ содержит JWT токен:
{
"status": "ok",
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": 42,
"email": "user@example.com",
"balance_usd": 0.0
}
}Логин:
curl -X POST https://stone-ai-production.up.railway.app/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "mypassword"}'Также поддерживается OAuth: POST /api/auth/google и POST /api/auth/yandex.
POST /api/chat
Стриминг ответа от AI-модели через SSE.
| Параметр | Тип | Описание |
|---|---|---|
| model_id | string | ID модели (см. /api/models). По умолчанию: gpt-4o-mini |
| messages | array | Массив сообщений [{role, content}] |
| system_prompt | string? | Системный промпт (только для платных пользователей) |
Пример с curl:
curl -N -X POST https://stone-ai-production.up.railway.app/api/chat \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"model_id": "gpt-4o-mini",
"messages": [
{"role": "user", "content": "Привет! Что такое AI?"}
]
}'Пример на Python:
import httpx
token = "YOUR_JWT_TOKEN"
url = "https://stone-ai-production.up.railway.app/api/chat"
with httpx.stream("POST", url,
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
json={
"model_id": "claude-haiku-4.5",
"messages": [{"role": "user", "content": "Напиши хайку про AI"}]
}
) as response:
for line in response.iter_lines():
if line.startswith("data: ") and line != "data: [DONE]":
print(line[6:])SSE-ответ содержит чанки контента, затем usage и billing:
data: {"choices": [{"delta": {"content": "Привет"}}]}
data: {"choices": [{"delta": {"content": "! AI — это..."}}]}
data: {"usage": {"tokens_in": 15, "tokens_out": 82}}
data: {"billing": {"tokens_in": 15, "tokens_out": 82, "cost_usd": 0.0003, "balance_usd": 9.99, "billing_mode": "per_token"}}
data: [DONE]GET /api/models
Список всех доступных моделей с метаданными и ценами.
curl https://stone-ai-production.up.railway.app/api/models
# Фильтры:
curl "https://stone-ai-production.up.railway.app/api/models?tier=lite" # только бесплатные
curl "https://stone-ai-production.up.railway.app/api/models?company=OpenAI" # по провайдеру
curl "https://stone-ai-production.up.railway.app/api/models?category=image" # по категорииОтвет:
{
"models": [
{
"id": "gpt-4o-mini",
"name": "GPT-4o mini",
"company": "OpenAI",
"tier": "lite",
"category": "chat",
"price_weighted": 2.50,
"price_input": 0.90,
"price_output": 3.60,
"context_length": "128K"
},
...
]
}| Фильтр | Значения | Описание |
|---|---|---|
| tier | lite | premium | lite = бесплатные (5 моделей), premium = платные |
| company | OpenAI, Anthropic, Google... | 15 провайдеров |
| category | chat | image | reason | search | code | Тип модели |
POST /api/chat/upload
Загрузка файлов (изображения, PDF) для использования в чате.
curl -X POST https://stone-ai-production.up.railway.app/api/chat/upload \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "file=@document.pdf"Ответ:
{
"file_id": "a1b2c3d4",
"file_name": "document.pdf",
"file_type": "pdf",
"mime_type": "application/pdf",
"size": 245000,
"content": "Извлечённый текст из PDF..."
}Для изображений content — base64 data URL. Для PDF — извлечённый текст. Максимум 10MB.
Биллинг
Stone AI использует per-token биллинг. Стоимость зависит от модели и количества токенов.
Формула: cost = (tokens_in × price_input + tokens_out × price_output) / 1,000,000
| Модель | Input $/1M | Output $/1M | Средневзвешенная |
|---|---|---|---|
| gpt-4o-mini | $0.90 | $3.60 | $2.50 (FREE) |
| claude-haiku-4.5 | $3.20 | $16.00 | $11.00 (FREE) |
| gpt-5.1 | $4.90 | $39.20 | $26.00 |
| claude-opus-4 | $37.50 | $187.50 | $130.00 |
| gemini-2.5-pro | $5.00 | $40.00 | $26.00 |
| flux-schnell | — | — | $0.012/img |
5 моделей бесплатно (15 запросов/день). Остальные — per-token с баланса в USD.
Списание происходит ПОСЛЕ получения ответа, по реально использованным токенам.
Лимиты
| Тариф | Lite модели | Premium модели |
|---|---|---|
| Free | 15/день | По балансу (per-token) |
| Per-token | Безлимит (с баланса) | Безлимит (с баланса) |
| Параметр | Значение |
|---|---|
| MAX_TOKENS_LITE | 4096 (макс. output для бесплатных) |
| MAX_TOKENS_PAID | 8192 (макс. output для платных) |
| Max file upload | 10MB |
| Rate limit | Нет жёсткого rate limit, лимитируется балансом |
Коды ошибок
| Код | Описание | Решение |
|---|---|---|
| 401 | Unauthorized — невалидный или отсутствующий токен | Проверьте Authorization header |
| 402 | Payment Required — недостаточно средств для premium модели | Пополните баланс на /topup |
| 429 | Too Many Requests — лимит бесплатных запросов исчерпан | Подождите до завтра или пополните баланс |
| 400 | Bad Request — неверные параметры | Проверьте model_id и messages |
| 503 | Service Unavailable — сервис оплаты временно недоступен | Попробуйте позже |
Ошибки возвращаются в формате:
{
"detail": {
"error": "Недостаточно средств. Баланс $0.01, примерная стоимость $0.26",
"plan": "free",
"tier": "premium",
"used_today": 0,
"limit": 0,
"need_balance": true
}
}