Документация
PositionAPI полностью совместим с OpenAI API. Достаточно заменить базовый URL и ключ — остальной код остаётся без изменений.
Быстрый старт
- 1. Зарегистрируйтесь и создайте ключ в разделе Ключи API.
- 2. Укажите базовый URL и ключ в вашем клиенте.
- 3. Отправьте первый запрос — он появится в журнале использования.
Базовый URL
https://positionapi.top/v1Аутентификация
Ключ передаётся в заголовке Authorization. Альтернативно поддерживается x-api-key.
Authorization: Bearer sk-ваш-ключ
Content-Type: application/jsonChat Completions
POST /v1/chat/completionscurl 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
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: "Привет!" }],
});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, чтобы списание было точным.
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/modelscurl 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.