Anthropic-совместимый API для Claude
Кроме OpenAI-совместимого /v1/chat/completions у GPTunneL есть эндпоинт в
формате Anthropic Messages API. Это не обёртка с переводом форматов, а
прокси: тело запроса и ответа совпадает с тем, что описано в документации
Anthropic.
Практический смысл — код менять не нужно. Официальный SDK Anthropic, Claude Code и любой клиент, умеющий работать с Claude, начинают работать после подмены базового адреса и ключа.
Запрос к Claude
https://gptunnel.ru/v1/messages Headers
| Параметр | Тип | Описание |
|---|---|---|
x-api-key* | string | API ключ. Альтернатива — Authorization: Bearer YOUR_API_KEY |
anthropic-version | string | Версия API Anthropic, передаётся как есть |
content-type* | string | application/json |
Тело запроса — то же, что у Anthropic: model, messages, system, tools,
tool_choice, stream и остальные поля. Мы проверяем только те из них, к
которым обращаемся сами, всё прочее уходит наверх без изменений.
Пример запроса
curl --request POST \ --url https://gptunnel.ru/v1/messages \ --header 'x-api-key: YOUR_API_KEY' \ --header 'anthropic-version: 2023-06-01' \ --header 'content-type: application/json' \ --data '{ "model": "claude-sonnet-4-5", "max_tokens": 1024, "messages": [{ "role": "user", "content": "Привет!" }] }'import Anthropic from '@anthropic-ai/sdk'
const client = new Anthropic({ apiKey: 'YOUR_API_KEY', baseURL: 'https://gptunnel.ru',})
const message = await client.messages.create({ model: 'claude-sonnet-4-5', max_tokens: 1024, messages: [{ role: 'user', content: 'Привет!' }],})
console.log(message.content)from anthropic import Anthropic
client = Anthropic(api_key="YOUR_API_KEY", base_url="https://gptunnel.ru")
message = client.messages.create( model="claude-sonnet-4-5", max_tokens=1024, messages=[{"role": "user", "content": "Привет!"}],)
print(message.content)Только модели Claude
Эндпоинт принимает исключительно модели Claude. Запрос с любой другой моделью
вернёт 404 с типом ошибки not_found_error — для остальных моделей есть
OpenAI-совместимый /v1/chat/completions.
Тот же 404 с тем же типом приходит и на несуществующий идентификатор модели:
различается только текст error.message, программно эти два случая не
разделяются.
Актуальные идентификаторы и цены — в списке моделей.
Потоковый ответ
Работает штатно: "stream": true в теле запроса, ответ приходит потоком
server-sent events в том же формате событий, что у Anthropic. Никаких
дополнительных заголовков не нужно.
Подсчёт токенов
https://gptunnel.ru/v1/messages/count_tokens Возвращает оценку числа входных токенов для тела запроса.
Инструменты
Пользовательские инструменты (name + input_schema) передаются без изменений.
Из типовых инструментов Anthropic проходят web_search, web_fetch,
computer, bash и text_editor.
Не поддерживается только code_execution — запрос с ним вернёт 400. Причина в
модели тарификации: код исполняется на стороне Anthropic и оплачивается
по времени работы контейнера, а не по токенам. По той же причине из заголовка
anthropic-beta вырезаются значения code-execution-*; остальные беты
передаются как есть.
Кэширование промпта
Тоже passthrough: брейкпоинты cache_control расставляет ваш клиент, счётчики
cache_creation_input_tokens и cache_read_input_tokens приходят в usage
ответа. Списание учитывает кэш — чтение из кэша дешевле обычного ввода, запись
дороже.
Ошибки
Формат ошибок совпадает с Anthropic: HTTP-код плюс тело с объектом error, у
которого есть type и message. Клиентские SDK разбирают их своими штатными
средствами.