OpenAI-compatible API: что это и как подключить

Разбор термина без маркетинга: что именно должно совпадать, чтобы клиент работал без правок, и что от формата не зависит.

Определение

OpenAI-compatible API — это сервис, который принимает запросы в том же виде, в каком их принимает OpenAI, и отвечает в том же формате. Совместимость означает конкретные вещи: путь /v1/chat/completions, авторизация через Authorization: Bearer, тело с полями model и messages, ответ с массивом choices и объектом usage, потоковый режим через server-sent events.

Практический смысл: любая библиотека, написанная под OpenAI, работает с таким сервисом без изменений в логике. Меняются два значения — адрес и ключ.

Зачем это нужно

  • Один интерфейс к моделям разных разработчиков — не нужно писать по клиенту на каждого.
  • Инструменты, у которых есть поле «base URL», подключаются без правки кода.
  • Смена модели — это смена строки в запросе, а не переписывание интеграции.
  • Существующие SDK, обёртки и фреймворки продолжают работать.

Примеры кода

Python (openai)
from openai import OpenAI

client = OpenAI(
    base_url="https://api.tokenator.top/v1",
    api_key="sk-your-tokenator-key",
)

resp = client.chat.completions.create(
    model="gpt-5.5",
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)
TypeScript (openai)
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.tokenator.top/v1",
  apiKey: "sk-your-tokenator-key",
});

const resp = await client.chat.completions.create({
  model: "gpt-5.5",
  messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);

Обратите внимание: в base_url входит суффикс /v1, а метод SDK добавляет к нему /chat/completions сам.

Что поддерживает Tokenator

МетодПутьНазначение
POST/v1/chat/completionsОсновной чат-эндпоинт формата OpenAI. Поддерживает streaming, tools и мультимодальный вход.
POST/v1/responsesФормат Responses API. Поддерживает продолжение диалога по previous_response_id.
POST/v1/messagesФормат Anthropic Messages. Доступен также по префиксу /anthropic/v1/messages.
POST/v1/messages/count_tokensПодсчёт токенов для запроса в формате Anthropic.
POST/v1/embeddingsВекторные представления текста.
POST/v1/images/generationsГенерация изображений.
POST/v1/images/editsРедактирование и апскейл изображений. Принимает multipart и JSON с base64.
POST/v1/audio/speechСинтез речи.
POST/v1/audio/transcriptionsРаспознавание речи.
POST/v1/audio/translationsРаспознавание с переводом на английский.
GET/v1/modelsСписок моделей, доступных конкретному ключу.
GET/v1/tokensОстаток лимита ключа и израсходованные токены.

Помимо OpenAI-формата доступен Anthropic-совместимый вход. Это удобно для инструментов, изначально написанных под Claude: им не нужен слой совместимости, а модель при этом можно выбрать любую из каталога.

Границы совместимости

Совместимость формата не означает, что все модели умеют одно и то же. Изображения на входе, инструменты и reasoning зависят от конкретной модели и апстрима, а не от формата запроса. Что поддерживает конкретная модель — смотрите на её странице в каталоге.

Ещё одно отличие от прямого доступа к OpenAI: клиентские серверные инструменты веб-поиска и веб-фетча из запроса удаляются, а тексты ошибок апстрима заменяются общим сообщением.

Частые вопросы

Обязательно ли использовать официальный SDK OpenAI?

Нет. Подойдёт любой HTTP-клиент: важен формат запроса, а не библиотека.

Работает ли потоковый режим?

Да, через "stream": true и server-sent events — так же, как у OpenAI.

Совпадает ли поле usage с реальным расходом?

В usage — фактические токены апстрима. С лимита ключа списывается это значение, умноженное на множитель модели.