Документация

Как подключить OdKeys и как расходуются токены.

Начало

Нужны две вещи: базовый адрес и ключ. Всё остальное совпадает с официальным API Anthropic, поэтому существующий код менять не придётся.

Базовый адрес
https://proxydon.duckdns.org
Модель
claude-opus-5
Авторизация
Anthropic-клиенты передают ключ в заголовке x-api-key, OpenAI-клиенты — в Authorization: Bearer. Поддерживаются оба варианта на всех эндпоинтах.

Anthropic API

Эндпоинт POST /v1/messages повторяет схему Anthropic: стриминг через SSE, tool use, system prompt, thinking по запросу. Ответ содержит usage с чистыми входными и выходными токенами.

curl
curl https://proxydon.duckdns.org/v1/messages \
  -H "x-api-key: sk-ваш-ключ" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-opus-5",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "Объясни разницу между async и defer"}
    ]
  }'
python — anthropic
from anthropic import Anthropic

client = Anthropic(
    base_url="https://proxydon.duckdns.org",
    api_key="sk-ваш-ключ",
)

message = client.messages.create(
    model="claude-opus-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Объясни разницу между async и defer"}],
)

print(message.content[0].text)
print(message.usage.input_tokens, message.usage.output_tokens)
typescript — @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://proxydon.duckdns.org",
  apiKey: "sk-ваш-ключ",
});

const stream = await client.messages.stream({
  model: "claude-opus-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Объясни разницу между async и defer" }],
});

for await (const event of stream) {
  if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
    process.stdout.write(event.delta.text);
  }
}

Claude Code

Задайте переменные окружения перед запуском — CLI сам подхватит адрес и ключ.

bash
export ANTHROPIC_BASE_URL="https://proxydon.duckdns.org"
export ANTHROPIC_AUTH_TOKEN="sk-ваш-ключ"
export ANTHROPIC_MODEL="claude-opus-5"

claude

OpenAI API

Эндпоинт POST /v1/chat/completions понимает формат OpenAI: messages, stream, stream_options, tools. Подходит для клиентов, которые не умеют работать с Anthropic напрямую.

curl
curl https://proxydon.duckdns.org/v1/chat/completions \
  -H "Authorization: Bearer sk-ваш-ключ" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-opus-5",
    "messages": [
      {"role": "user", "content": "Объясни разницу между async и defer"}
    ]
  }'
python — openai
from openai import OpenAI

client = OpenAI(
    base_url="https://proxydon.duckdns.org/v1",
    api_key="sk-ваш-ключ",
)

response = client.chat.completions.create(
    model="claude-opus-5",
    messages=[{"role": "user", "content": "Объясни разницу между async и defer"}],
)

print(response.choices[0].message.content)
Про usage в OpenAI-формате
В нестримовом ответе и в финальном чанке приходят prompt_tokens и completion_tokens. Значение prompt_tokens в этом формате рассчитывается на нашей стороне и может отличаться на единицы токенов от Anthropic-эндпоинта. Если нужна точность до токена — используйте /v1/messages.

Модели

Список доступных моделей всегда можно получить запросом GET /v1/models.

ИдентификаторКонтекстМакс. выводФорматы
claude-opus-51 000 00064 000Anthropic · OpenAI
curl
curl https://proxydon.duckdns.org/v1/models -H "Authorization: Bearer sk-ваш-ключ"

Как считаются токены

С баланса списывается сумма входных и выходных токенов запроса. Никаких множителей и наценок за размер контекста нет.

1200 input + 300 output = 1500

Запрос на 1200 входных и 300 выходных токенов уменьшит остаток на 1500 токенов.

  • Кэшированные токены не списываются.
  • Если стрим оборвался, списывается фактически сгенерированное, а не запрошенное max_tokens.
  • Каждый запрос попадает в журнал личного кабинета: видно input, output и точное списание.

Лимиты

Лимиты защищают общий пул от одного слишком активного клиента. Для больших пакетов значения выше — смотрите описание лота.

ПараметрЗначение по умолчанию
Запросов в минуту60
Одновременных запросов5
Срок действия токеновне ограничен

Коды ошибок

Формат ошибки соответствует стандарту того API, к которому вы обратились: Anthropic-схема для /v1/messages и OpenAI-схема для /v1/chat/completions.

HTTPЧто означаетЧто делать
401Ключ не передан или не найденПроверьте заголовок и сам ключ
402Закончились токеныДокупите токены на ключ или купите новый пакет
403Ключ заблокирован, истёк или запрещён IPПроверьте статус в кабинете, напишите в поддержку
404Неизвестная модель или путьСверьтесь с GET /v1/models
429Превышен лимит запросовПовторите с задержкой, ориентируйтесь на Retry-After
502 / 503Временная проблема на стороне сервисаПовторите запрос через несколько секунд

Покупка и продление

Ключ выдаётся сразу после оплаты. Токены можно докупить на тот же ключ — менять конфигурацию клиента не нужно.

ПакетТокеныЦена
1M токенов1 M149 ₽
5M токенов5 M590 ₽
10M токенов10 M990 ₽
25M токенов25 M2 190 ₽
50M токенов50 M3 990 ₽
Telegram-бот
проверка остатка, докупка токенов на существующий ключ и покупка новых пакетов.

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

Ключ можно использовать на нескольких машинах?

Да, ограничение только по числу одновременных запросов. При необходимости в кабинете можно закрепить ключ за конкретными IP.

Поддерживается ли tool use и function calling?

Да, в обоих форматах. Схема запроса и ответа совпадает с оригинальным API.

Что с extended thinking?

По умолчанию выключен, чтобы ответ соответствовал ожиданиям обычного клиента. Передайте thinking с type: enabled — и рассуждение вернётся в ответе как в Anthropic API.

Есть ли ограничение на размер запроса?

Контекст модели — 1 000 000 токенов, ограничение на тело запроса — 32 МБ.