---
title: Anthropic SDK с кастомным base URL
description: "Anthropic SDK с кастомным base URL: укажите router.apitoken.sale в base_url — код на Python и TypeScript не меняется, а токены на 50% дешевле."
url: https://apitoken.sale/ru/docs/learn/anthropic-sdk-base-url
language: ru
---

# Направьте Anthropic SDK на apiToken.sale

Каждый официальный Anthropic SDK принимает кастомный base URL, поэтому переход на apiToken.sale — это изменение одного аргумента. Идентификаторы моделей, код сообщений и логика стриминга остаются ровно теми же — меняются только эндпоинт и цена за токен.

## Один аргумент переключает эндпоинт

Оба официальных SDK Anthropic — Python и TypeScript — позволяют переопределить корень API при создании клиента. Укажите https://router.apitoken.sale, и каждый запрос, который ваш код уже отправляет, будет обслуживаться шлюзом apiToken.sale вместо api.anthropic.com. Больше в кодовой базе ничего не меняется: тот же пакет anthropic, тот же Messages API, те же идентификаторы моделей вроде claude-opus-4-8, те же объекты ответов.

Меняется биллинг. Каждый вызов тарифицируется по официальным токен-расценкам Anthropic, из суммы вычитается ваша фиксированная скидка 50%, а итог списывается с предоплатного баланса, который вы пополняете на целое число долларов. Никакой подписки и платы за место — дни простоя ничего не стоят.

## Python: base_url в клиенте

```
from anthropic import Anthropic

client = Anthropic(
    base_url="https://router.apitoken.sale",
    api_key="sk-pool-•••",
)
msg = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
```

Асинхронный клиент принимает тот же именованный аргумент: AsyncAnthropic(base_url=..., api_key=...). Стриминг через client.messages.stream, tool use, системные промпты и промпт-кеширование работают по тому же соединению — отдельный эндпоинт для них настраивать не нужно.

> Передавайте голый корень, без пути. SDK сам добавляет /v1/messages, поэтому base_url=".../v1" приведёт к запросам на /v1/v1/messages и ошибке 404. То же правило действует для TypeScript SDK.

## TypeScript: baseURL в клиенте

```
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://router.apitoken.sale",
  apiKey: "sk-pool-•••",
});
const msg = await client.messages.create({
  model: "claude-opus-4-8",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});
```

Пакет @anthropic-ai/sdk сам отправляет заголовки x-api-key и anthropic-version — ровно так же, как при работе с официальным эндпоинтом. Ретраи, таймауты и классы ошибок (APIError, RateLimitError и остальные) ведут себя идентично, поэтому существующая обработка ошибок продолжает работать.

## В общем коде используйте переменные окружения

Оба SDK читают ANTHROPIC_BASE_URL и ANTHROPIC_API_KEY из окружения, если аргументы конструктора не заданы. Тогда переключение становится деталью деплоя, а не изменением кода — удобно, когда один репозиторий работает с разными эндпоинтами в разработке и в продакшене.

```
export ANTHROPIC_BASE_URL=https://router.apitoken.sale
export ANTHROPIC_API_KEY=sk-pool-•••

# your code now constructs Anthropic() with no arguments
```

Инструменты поверх SDK наследуют те же переменные. Например, Claude Code напрямую учитывает ANTHROPIC_BASE_URL и ANTHROPIC_API_KEY, а фреймворки вроде LangChain или LiteLLM пробрасывают это окружение своему Anthropic-клиенту внутри. Явные аргументы конструктора важнее переменных окружения, если заданы оба, поэтому разовый оверрайд в скрипте никогда не протечёт в конфигурацию деплоя.

## Что проходит через шлюз без изменений

- Весь Messages API: POST /v1/messages с тем же JSON запроса и ответа.
- SSE-стриминг — инкрементальные чанки приходят ровно как с api.anthropic.com.
- Tool use и function calling, включая многоходовые циклы tool_result.
- Системные промпты, vision-входы и промпт-кеширование с брейкпоинтами cache_control.
- Объект usage в каждом ответе — ваш код учёта токенов и расходов продолжает работать.
- Идентификаторы моделей: claude-opus-4-8, claude-sonnet-5, claude-haiku-4-5 и остальной поддерживаемый каталог.

Один ключ покрывает все поддерживаемые модели — Claude наряду с GPT, Gemini и Kimi, — поэтому в мультипровайдерном проекте остаются одни креды и один баланс. Расход по каждому запросу и применённая скидка видны в панели после каждого вызова.

[Поддерживаемые идентификаторы моделей и цены по каждой](/models)

[Оцените месячный расход в калькуляторе стоимости](/tools/claude-api-cost-calculator)

## Чеклист первого запроса и частые ошибки

1. Создайте бесплатный аккаунт, откройте панель и сгенерируйте ключ — он выглядит как sk-pool-… и работает с поддерживаемыми моделями Claude, GPT, Gemini и Kimi.
2. Задайте base_url / baseURL на https://router.apitoken.sale в коде или экспортируйте ANTHROPIC_BASE_URL и ANTHROPIC_API_KEY.
3. Один раз запустите сниппет на Python или TypeScript выше и убедитесь, что получаете обычный ответ Anthropic message.
4. Откройте панель и проверьте, что запрос появился с токен-usage, стоимостью и скидкой.

| Статус | Значение | Решение |
| --- | --- | --- |
| 401 Unauthorized | Отсутствует или неверен x-api-key, либо неправильный base URL | Перепроверьте ключ и что URL — голый корень |
| 400 Bad Request | Некорректное тело или documented_limitation / unsupported_parameter на названном поле | Проверьте идентификатор модели и max_tokens; если details.error_code задан — уберите поле |
| 402 billing_error | Недостаточно средств на предоплатном балансе — error.type billing_error, не 429 | Пополните на любое целое число долларов в панели |
| 429 Too Many Requests | Параллелизм выше текущего лимита | Учитывайте Retry-After и снизьте параллелизм |

Поскольку SDK, формат протокола и таксономия ошибок идентичны на обоих эндпоинтах, переключение обратимо в любой момент: верните base_url на api.anthropic.com (или удалите оверрайд) — и тот же код снова общается с Anthropic напрямую. Многие команды на неделю миграции держат оба клиента рядом и направляют небольшой процент трафика на новый эндпоинт перед полным переключением.

> Существующие интеграции на прежнем хосте https://api.apitoken.sale продолжают работать. Единый роутер router.apitoken.sale — рекомендуемый эндпоинт для новых настроек, потому что один base URL обслуживает всех четырёх провайдеров.

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

### Можно ли и дальше пользоваться официальным Anthropic SDK?

Да. Задайте base_url (Python) или baseURL (TypeScript) на https://router.apitoken.sale, и всё остальное — импорты, идентификаторы моделей, стриминг, обработка ошибок — останется прежним.

### Меняются ли идентификаторы моделей при смене base URL?

Нет. Используйте те же идентификаторы, что и в официальном API, например claude-opus-4-8, claude-sonnet-5 и claude-haiku-4-5.

### Должен ли base URL заканчиваться на /v1?

Нет. SDK сам добавляет /v1/messages к переданному корню, поэтому завершающий /v1 ломает путь. Передавайте ровно https://router.apitoken.sale.

### Работают ли стриминг и tool use через кастомный base URL?

Да. Шлюз обслуживает стандартный Anthropic Messages API, поэтому SSE-стриминг, вызовы инструментов, системные промпты и промпт-кеширование ведут себя ровно как с api.anthropic.com.

### Как позже вернуться на Anthropic?

Уберите аргумент base_url / baseURL или снимите ANTHROPIC_BASE_URL. SDK вернётся к умолчанию https://api.anthropic.com — других изменений в коде не потребуется.

---
Get a key: https://apitoken.sale/register
More guides: https://apitoken.sale/ru/docs/learn
