tty: DOCSдокументация APIAPI: OPENAI.COMPATIBLE

PINEGATE.DOCS

API без шаманства

Один OpenAI-совместимый адрес для моделей разных провайдеров. Здесь — только рабочие примеры, параметры и решения частых ошибок.

BASE URLhttps://pinegate.xyz/v1

Обзор Pinegate API

Pinegate — единая OpenAI-совместимая точка доступа к текстовым и embedding-моделям разных провайдеров. Один API-ключ, единый баланс и знакомый формат запросов.

НАЗНАЧЕНИЕЗНАЧЕНИЕ
Base URLhttps://pinegate.xyz/v1
АвторизацияAuthorization: Bearer YOUR_API_KEY
ФорматOpenAI-compatible JSON
КаталогGET /v1/models
Проверено через Pinegate. Живым API-ключом подтверждены: каталог из 30 моделей, Chat Completions, SSE streaming, tools, embeddings и reasoning.

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

Если инструмент уже умеет работать с OpenAI API, обычно достаточно заменить base URL и вставить ключ Pinegate.

Создай ключ

В кабинете открой раздел «Ключи» и скопируй новый API-ключ. Полный ключ показывается один раз.

Укажи адрес

https://pinegate.xyz/v1

Отправь запрос

Выбери модель из каталога. Списание происходит за фактически использованные токены.

Важно о списаниях. Сам запрос к API тарифицируется. Проверить ключ бесплатно можно через GET /v1/models.

Авторизация

Передавай ключ в каждом запросе через HTTP-заголовок:

Authorization: Bearer YOUR_API_KEY
Не клади ключ во frontend. Ключ должен храниться на сервере или в переменной окружения. Не публикуй его в Git, HTML и скриншотах.

Модели и их ID

Каталог меняется без выпуска новой версии документации. Получай доступные именно твоему ключу модели через GET /v1/models.

curl https://pinegate.xyz/v1/models \
  -H "Authorization: Bearer YOUR_API_KEY"

Как читать ID

  • openai/gpt-5.6-sol — провайдер и конкретный маршрут.
  • Передавай точный ID модели без сокращений и переименования.
  • Модель может исчезнуть, быть заменена или временно отключена upstream-провайдером.
  • Цена и контекст зависят от маршрута; сверяйся с актуальной страницей цен.

Матрица endpoint’ов

METHODENDPOINTНАЗНАЧЕНИЕПРОВЕРКА
GET/v1/modelsСписок моделей, доступных ключу200 · 30 моделей
POST/v1/chat/completionsТекст, streaming, tools и reasoning200
POST/v1/embeddingsВекторные представления для поиска и RAG200

Чат и генерация текста

Основной endpoint совместим с форматом Chat Completions.

ПАРАМЕТРОБЯЗАТЕЛЬНООПИСАНИЕ
modelдаID модели из GET /v1/models
messagesдаМассив сообщений с role и content
streamнетВключает потоковый ответ SSE
max_tokensнетОграничивает длину ответа

Актуальный каталог не зашит в документацию: получай его запросом GET /v1/models или смотри страницу цен.

Streaming (SSE)

Добавь "stream": true, чтобы получать ответ частями. Сервер отправляет события data: {...}; завершение обозначается data: [DONE].

{
  "model": "openai/gpt-5.6-sol",
  "messages": [{"role":"user","content":"Hello"}],
  "stream": true,
  "stream_options": {"include_usage": true}
}
  • Текст обычно приходит в choices[0].delta.content.
  • Не склеивай JSON-строки как обычный текст: разбирай каждое SSE-событие отдельно.
  • include_usage просит финальную статистику usage, если маршрут её поддерживает.
  • При обрыве соединения не повторяй запрос вслепую, если результат уже мог частично обработаться.

Tools / Function calling

Проверенная модель openai/gpt-5.4-nano может выбрать описанную тобой функцию, но Pinegate не выполняет её за тебя. Приложение получает tool_calls, вызывает свой код и отправляет результат следующим сообщением с ролью tool.

{
  "model": "openai/gpt-5.4-nano",
  "messages": [{"role":"user","content":"Какая погода в Казани?"}],
  "tools": [{"type":"function","function":{
    "name":"get_weather",
    "description":"Получить погоду",
    "parameters":{"type":"object","properties":{
      "city":{"type":"string"}
    },"required":["city"]}
  }}]
}
Проверено через Pinegate. В live-тесте модель вернула finish_reason: "tool_calls" и один вызов функции.

Embeddings

Векторные представления нужны для семантического поиска, кластеризации и RAG.

curl https://pinegate.xyz/v1/embeddings \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"baai/bge-m3-embedding","input":["Первый текст","Второй текст"]}'

В ответе массив data[].embedding. Размерность зависит от модели. Не смешивай в одном индексе векторы, созданные разными моделями.

Reasoning

Для моделей с управляемым рассуждением передавай уровень через reasoning_effort.

{
  "model": "openai/gpt-5.6-sol",
  "messages": [{"role": "user", "content": "Solve this carefully"}],
  "reasoning_effort": "high"
}
VALUEСМЫСЛ
noneБез отдельного рассуждения; быстрее и дешевле
lowЛёгкий анализ
mediumБаланс скорости и глубины
highГлубокое рассуждение
xhighМаксимальный подтверждённый режим для openai/gpt-5.6-sol
Совместимость зависит от модели. Не все модели принимают все уровни. Для gpt-5.6-sol подтверждены none, low, medium, high и xhigh; minimal не поддерживается.

Usage и токены

Не-streaming ответ содержит объект usage. В live-тесте Pinegate вернул токены и точную стоимость запроса.

"usage": {
  "prompt_tokens": 11,
  "completion_tokens": 19,
  "total_tokens": 30,
  "completion_tokens_details": {"reasoning_tokens": 12},
  "cost": 0.00008514
}
prompt_tokensЧисло входных токенов
completion_tokensВыход модели, включая reasoning-токены
reasoning_tokensТокены рассуждения, если модель их сообщает
costСтоимость запроса в долларах, возвращённая Pinegate

Тарификация

Pinegate работает по предоплате: расходы списываются с баланса по фактическому использованию конкретной модели.

  • Цена входных и выходных токенов может различаться.
  • Reasoning и embeddings могут тарифицироваться иначе.
  • Обрезанный клиентом ответ всё равно может содержать уже сгенерированные и оплаченные токены.
  • Актуальная цена в интерфейсе приоритетнее примеров в документации.
Не оценивай стоимость только по длине текста. Токенизация, hidden reasoning, tools и особенности модели влияют на usage.

Ошибки и диагностика

СИТУАЦИЯHTTPЧТО ДЕЛАТЬ
Неверный JSON или параметр400Упрости запрос до model + messages
Ключ отсутствует или неверный401Проверь Bearer, пробел и полный ключ
Недостаточно баланса403Пополни баланс и повтори запрос
Лимит запросов429Используй retry с jitter и задержкой
Модель недоступна503Проверь точный ID через GET /v1/models
Временная проблема gateway/upstream5xxПовтори с exponential backoff
Проверено через Pinegate. Неверный ключ вернул 401, нулевой баланс — 403, несуществующая модель — 503.

Безопасный retry

  • Повторяй 429, 502, 503 и сетевые ошибки через 1, 2, 4, 8 секунд + случайный jitter.
  • Задай максимум попыток и общий deadline.
  • Не повторяй 400, 401 и ошибку баланса, пока не исправлена причина.
request_id помогает найти запрос в логах. Пришли поддержке его, UTC-время, endpoint и модель — но не API-ключ и не приватный prompt.

Интеграции

Везде используется один адрес и один ключ. Названия полей отличаются у конкретных приложений.

OpenAI SDK

Python: OpenAI(api_key=..., base_url="https://pinegate.xyz/v1"). Node.js: передай apiKey и baseURL. Используй актуальную версию SDK.

Cursor

Открой настройки Models / OpenAI API, включи собственный API key, укажи ключ Pinegate и Override OpenAI Base URL: https://pinegate.xyz/v1.

SillyTavern

API Connections → Chat Completion → Custom (OpenAI-compatible). Вставь base URL и ключ, затем выбери ID модели без переименования.

Hermes Agent

Добавь Pinegate как OpenAI-совместимого custom provider с base_url https://pinegate.xyz/v1 и ключом из переменной окружения.

Другие клиенты

Ищи поля OpenAI-compatible, Base URL, API endpoint или Custom provider. Если приложение само дописывает /v1, укажи адрес без повторного /v1.

Проверка настройки

Сначала вызови GET /v1/models. Затем отправь минимальный Chat Completions без streaming, tools и дополнительных параметров. После этого включай функции по одной.

FAQ

Нужно ли дописывать /v1?

Если поле называется Base URL — обычно укажи https://pinegate.xyz/v1. Если клиент сам добавляет /v1, используй адрес без дублирования.

Почему модель есть в списке, но параметр не работает?

OpenAI-совместимость описывает форму API, но не гарантирует поддержку каждой функции конкретной моделью. Убери спорный параметр и проверь документацию маршрута.

Почему ответ обрезан?

Проверь finish_reason, лимит output/max_tokens, размер контекста и timeout клиента.

Что отправлять поддержке?

UTC-время, endpoint, модель, HTTP-код, безопасный фрагмент ошибки и request_id. Никогда не отправляй API-ключ, полный приватный prompt или персональные данные.

Ничего не найдено. Попробуй: reasoning, 401, Cursor.