Anthropic-compatible API: что это и как подключить
Что именно должно совпадать, чтобы клиент под Claude заработал без правок, и какие возможности от формата не зависят.
Определение
Anthropic-compatible API — сервис, который принимает запросы в том же виде, что и Anthropic, и отвечает в том же формате. Совпадать должно конкретное: путь /v1/messages, авторизация заголовком x-api-key, обязательный anthropic-version, тело с полями model, max_tokens, messages и отдельным system, ответ с массивом content из блоков и объектом usage.
Отличие от OpenAI-формата видно сразу: системная инструкция передаётся отдельным полем, а не сообщением с ролью system, лимит длины ответа обязателен, а сам ответ приходит блоками, а не одной строкой.
Зачем это нужно
- Инструменты, написанные под Claude, подключаются без слоя совместимости.
- Официальный Anthropic SDK работает как есть — меняются только адрес и ключ.
- Один ключ открывает и Anthropic-вход, и OpenAI-вход: формат выбираете вы, а не тариф.
- Модель можно взять любую из каталога, даже если она не от Anthropic.
Примеры кода
import anthropic
client = anthropic.Anthropic(
base_url="https://api.tokenator.top/anthropic",
api_key="sk-your-tokenator-key",
)
msg = client.messages.create(
model="claude-opus-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}],
)
print(msg.content[0].text)import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://api.tokenator.top/anthropic",
apiKey: "sk-your-tokenator-key",
});
const msg = await client.messages.create({
model: "claude-opus-4-6",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
});
console.log(msg.content[0].text);curl https://api.tokenator.top/anthropic/v1/messages \ -H "x-api-key: sk-your-tokenator-key" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{"model":"claude-opus-4-6","max_tokens":1024,"messages":[{"role":"user","content":"Hello"}]}'
В base_url входит префикс /anthropic, а SDK добавляет к нему /v1/messages сам. Поле max_tokens обязательное: без него запрос отклоняется.
Что поддерживает 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 | Остаток лимита ключа и израсходованные токены. |
Через Anthropic-вход доступны все модели каталога, а не только Claude. Если модель обслуживает не-Anthropic провайдер, запрос конвертируется в его формат и ответ конвертируется обратно — для вашего кода это незаметно. Когда модель и так обслуживается Anthropic-провайдером, запрос уходит напрямую, без конвертации.
Потоковый режим, инструменты и подсчёт токенов работают в обоих направлениях: /v1/messages/count_tokens отвечает так же, как у Anthropic.
Границы совместимости
Формат один, а умения у моделей разные. Изображения на входе, инструменты и расширенное размышление зависят от конкретной модели, а не от формата запроса — что умеет модель, написано на её странице в каталоге.
Отличия от прямого доступа к Anthropic: клиентские серверные инструменты веб-поиска и веб-фетча из запроса удаляются, а тексты ошибок провайдера заменяются общим сообщением.
Частые вопросы
Чем Anthropic-формат отличается от OpenAI-формата?
Системная инструкция передаётся отдельным полем system, а не сообщением с ролью system. Поле max_tokens обязательное. Ответ приходит массивом блоков content, а не строкой в choices[0].message.content.
Можно ли через этот вход обращаться к моделям не от Anthropic?
Да. Доступны все модели каталога: если модель обслуживает другой провайдер, Tokenator сам конвертирует запрос и ответ.
Нужен ли отдельный ключ для Anthropic-входа?
Нет. Ключ один и тот же для обоих входов — отличается только адрес и способ его передать: x-api-key вместо Authorization: Bearer.
Работает ли потоковый ответ?
Да, с полем "stream": true. События приходят в том же виде, что и у Anthropic, поэтому клиентский разбор менять не нужно.