Аутентификация

Каждый запрос должен содержать заголовок с вашим API-ключом (получить его можно в личном кабинете):

Authorization: Bearer sk-ts-...

GET /v1/models

Список моделей, доступных вашему аккаунту. Поле id — это то значение, которое нужно передавать в параметре model при запросе /v1/chat/completions. Оно может отличаться от внутреннего идентификатора модели у провайдера.

curl https://xn--80ahc1bui.xn--p1ai/v1/models \
  -H "Authorization: Bearer sk-ts-..."
{
  "object": "list",
  "data": [
    { "id": "openai/gpt-4o", "object": "model", "owned_by": "openrouter" }
  ]
}

GET /v1/balance

Текущий баланс подписки: абсолютные значения в USD и доля от лимита.

curl https://xn--80ahc1bui.xn--p1ai/v1/balance \
  -H "Authorization: Bearer sk-ts-..."
{
  "object": "balance",
  "status": "active",
  "limit_usd": "4.000000",
  "spent_usd": "1.000000",
  "remaining_usd": "3.000000",
  "used_percent": "25.00",
  "remaining_percent": "75.00",
  "expires_at": "2026-09-23T12:00:00"
}

status: active, expired, exhausted или none (подписки ещё не было).

GET /v1/usage

Последние запросы аккаунта: время, модель, токены и стоимость — сначала новые. Пагинация через limit (по умолчанию 20, максимум 100) и offset.

curl "https://xn--80ahc1bui.xn--p1ai/v1/usage?limit=20&offset=0" \
  -H "Authorization: Bearer sk-ts-..."
{
  "object": "list",
  "data": [
    {
      "id": 42,
      "created_at": "2026-08-24T10:15:00",
      "model": "openai/gpt-4o",
      "prompt_tokens": 120,
      "completion_tokens": 340,
      "total_tokens": 460,
      "cost_usd": "0.003400"
    }
  ],
  "has_more": false
}

POST /v1/chat/completions

Формат запроса и ответа совместим с OpenAI Chat Completions API. Требуется активная подписка.

Обычный ответ

curl https://xn--80ahc1bui.xn--p1ai/v1/chat/completions \
  -H "Authorization: Bearer sk-ts-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o",
    "messages": [{"role": "user", "content": "Привет!"}]
  }'

Tool calling (агенты)

Поддерживается OpenAI-формат tools, tool_choice, tool_calls в ответе и сообщения role: "tool". Подходит для Fedot, Cursor IDE и Python-агентов на openai SDK.

curl https://xn--80ahc1bui.xn--p1ai/v1/chat/completions \
  -H "Authorization: Bearer sk-ts-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [{"role": "user", "content": "Weather in Moscow?"}],
    "tools": [{
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get weather for a city",
        "parameters": {
          "type": "object",
          "properties": {"city": {"type": "string"}},
          "required": ["city"]
        }
      }
    }]
  }'

Smoke agent loop: python -m scripts.smoke_tool_agent (нужен TOKEN_SELLER_API_KEY).

Потоковый ответ (streaming)

Добавьте "stream": true — ответ придёт как text/event-stream, чанками data: {...}, последний — data: [DONE]. Tool calls в stream — те же SSE-чанки с delta.tool_calls.

curl https://xn--80ahc1bui.xn--p1ai/v1/chat/completions \
  -H "Authorization: Bearer sk-ts-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o",
    "messages": [{"role": "user", "content": "Привет!"}],
    "stream": true
  }'

Ошибки

Ошибки возвращаются в формате OpenAI:

{ "error": { "message": "...", "type": "..." } }
КодtypeПричина
401invalid_request_errorНеверный или отсутствующий API-ключ
402insufficient_quotaНет активной подписки или лимит исчерпан
403permission_errorАккаунт заблокирован
404invalid_request_errorМодель не найдена или недоступна
502api_errorОшибка провайдера

Интерактивная схема (Swagger): /docs