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.

Примеры кода

Python (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)
TypeScript (@anthropic-ai/sdk)
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
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, поэтому клиентский разбор менять не нужно.