Документация

PositionAPI полностью совместим с OpenAI API. Достаточно заменить базовый URL и ключ — остальной код остаётся без изменений.

Быстрый старт

  1. 1. Зарегистрируйтесь и создайте ключ в разделе Ключи API.
  2. 2. Укажите базовый URL и ключ в вашем клиенте.
  3. 3. Отправьте первый запрос — он появится в журнале использования.

Базовый URL

https://positionapi.top/v1

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

Ключ передаётся в заголовке Authorization. Альтернативно поддерживается x-api-key.

headers
Authorization: Bearer sk-ваш-ключ
Content-Type: application/json

Chat Completions

POST /v1/chat/completions
cURL
curl https://positionapi.top/v1/chat/completions \
  -H "Authorization: Bearer $POSITION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "messages": [
      {"role": "system", "content": "Ты — полезный ассистент."},
      {"role": "user", "content": "Привет!"}
    ],
    "temperature": 0.7
  }'

Ответ повторяет формат OpenAI. В заголовке x-position-cost возвращается фактическая стоимость запроса в USD.

OpenAI SDK

TypeScript
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://positionapi.top/v1",
  apiKey: process.env.POSITION_API_KEY,
});

const response = await client.chat.completions.create({
  model: "claude-sonnet-5",
  messages: [{ role: "user", content: "Привет!" }],
});
Python
from openai import OpenAI

client = OpenAI(
    base_url="https://positionapi.top/v1",
    api_key=os.environ["POSITION_API_KEY"],
)

response = client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": "Привет!"}],
)

Стриминг

Добавьте "stream": true — ответ придёт как SSE. Мы автоматически запрашиваем у провайдера stream_options.include_usage, чтобы списание было точным.

TypeScript
const stream = await client.chat.completions.create({
  model: "claude-sonnet-5",
  messages: [{ role: "user", content: "Напиши хайку про API" }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Список моделей

GET /v1/models
cURL
curl https://positionapi.top/v1/models \
  -H "Authorization: Bearer $POSITION_API_KEY"

Возвращаются только модели, разрешённые вашему ключу. Полный каталог с ценами — в витрине моделей.

Тарификация

стоимость = (ввод × цена_ввода + вывод × цена_вывода + кэш × цена_кэша) / 1 000 000 × множитель_группы

  • • Цены в каталоге указаны за 1M токенов в USD.
  • • Кэшированные токены ввода тарифицируются по отдельной, пониженной ставке.
  • • Модели с пометкой «За запрос» списывают фиксированную сумму за вызов.
  • • Множитель группы задаётся администратором и виден в настройках ключа.
  • • В журнале использования рядом с нашей ценой показан официальный тариф провайдера — видно, сколько вы сэкономили.

Коды ошибок

КодЗначениеЧто делать
400Некорректный запросНет поля model или пустой messages
401Ключ не передан или неверенПроверьте заголовок Authorization: Bearer sk-…
402Недостаточно средствПополните баланс кодом активации в разделе «Кошелёк»
403Доступ запрещёнКлюч отключён, истёк, исчерпал квоту, IP вне белого списка или модель не разрешена
404Модель не найденаПроверьте имя модели в витрине
429Слишком много запросовПревышен лимит на стороне провайдера
502Канал недоступенПровайдер не ответил — попробуйте позже
503Нет активного каналаДля модели не настроен канал в админке

Готовые клиенты

Cursor / VS Code

В настройках OpenAI укажите Base URL и ключ — автодополнение и чат заработают через шлюз.

Claude Code

Задайте переменные ANTHROPIC_BASE_URL и ANTHROPIC_AUTH_TOKEN на адрес шлюза и ваш ключ.

ChatBox / LobeChat

Выберите провайдера OpenAI, замените адрес API на базовый URL шлюза.

LangChain / LlamaIndex

Любой OpenAI-совместимый коннектор: base_url + api_key.