Баланс отдельно от Pro
Подписка за 299 ₽ открывает возможности чата на сайте и не начисляет баланс API.
Баланс API расходуется только на запросы к /v1/… и не включает Pro.
API
Шлюз реализует ядро Anthropic Messages API: поля system, messages, tools, max_tokens, temperature, stream и стриминг событий SSE. Claude Code, Cursor, OpenCode и любой клиент с настраиваемым адресом сервера подключаются штатно — меняются только адрес и ключ. Отдельные расширения протокола (например, серверные инструменты и кэширование промптов) могут не поддерживаться; актуальный список возможностей — в справочнике ниже. Оплата — по фактическому числу токенов с баланса API.
https://api.harmonyai.ru
Ключ показывается один раз — сразу после создания.
Быстрый старт
Кнопка выше или кабинет. Формат — sk-h-….
Баланс API отдельный от подписки Pro. Пополнение — в кабинете, от 100 ₽.
Замените базовый URL клиента на https://api.harmonyai.ru и выберите модель.
curl https://api.harmonyai.ru/v1/messages \
-H "Authorization: Bearer $HARMONY_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "adanatos",
"max_tokens": 1024,
"messages": [
{ "role": "user", "content": "Привет! Объясни в двух предложениях, что такое SSE." }
]
}'
Ключ вместо $HARMONY_API_KEY подставлять в командную строку не стоит: он
останется в истории оболочки. Держите его в переменной окружения или в файле настроек клиента.
Подключение
Везде принцип один: адрес сервера — https://api.harmonyai.ru,
ключ — sk-h-…, модель — dynatos или adanatos.
Ниже — точные шаги для каждого клиента.
Самый короткий путь: агент читает адрес сервера и ключ из переменных окружения, переделывать ничего не нужно.
Нужен Node.js 18 или новее.
npm install -g @anthropic-ai/claude-code
macOS и Linux
export ANTHROPIC_BASE_URL="https://api.harmonyai.ru" export ANTHROPIC_AUTH_TOKEN="sk-h-ваш-ключ" export ANTHROPIC_MODEL="dynatos" export ANTHROPIC_DEFAULT_HAIKU_MODEL="adanatos"
Windows, PowerShell
$env:ANTHROPIC_BASE_URL="https://api.harmonyai.ru" $env:ANTHROPIC_AUTH_TOKEN="sk-h-ваш-ключ" $env:ANTHROPIC_MODEL="dynatos" $env:ANTHROPIC_DEFAULT_HAIKU_MODEL="adanatos"
claude
Модель на ходу переключает флаг --model или команда /model.
Перенесите их в ~/.claude/settings.json — файл сильнее оболочки.
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.harmonyai.ru",
"ANTHROPIC_AUTH_TOKEN": "sk-h-ваш-ключ",
"ANTHROPIC_MODEL": "dynatos",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "adanatos",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "dynatos",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "dynatos"
}
}ANTHROPIC_DEFAULT_HAIKU_MODEL в ответ придёт ошибка 404.
По той же причине полезны ANTHROPIC_DEFAULT_SONNET_MODEL и
ANTHROPIC_DEFAULT_OPUS_MODEL.
ANTHROPIC_AUTH_TOKEN. Его значение уходит в заголовок
Authorization: Bearer — как и ждёт шлюз. Переменная
ANTHROPIC_API_KEY отправляется в x-api-key; он тоже принимается,
но для ключей sk-h-… первый вариант привычнее.
Настольное приложение Claude Code для macOS и Windows берёт настройки из того же файла, что и CLI, — достаточно прописать адрес шлюза и перезапустить программу.
macOS и Linux
~/.claude/settings.json
Windows
%USERPROFILE%\.claude\settings.json
Если файла нет — создайте его.
env
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.harmonyai.ru",
"ANTHROPIC_AUTH_TOKEN": "sk-h-ваш-ключ",
"ANTHROPIC_MODEL": "dynatos",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "adanatos",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "dynatos",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "dynatos"
}
}Файл настроек читается при запуске: пока окно не перезапущено, программа продолжает обращаться к прежнему серверу.
sk-h-… в него вставить некуда. Через HarmonyAI работают только клиенты,
у которых базовый URL настраивается: Claude Code (CLI и настольное приложение),
расширения редакторов и собственный код.
Встроенные модели Cursor к чужому адресу не переключаются, зато редактор понимает расширения VS Code — подключаемся через Cline или Roo Code.
Ctrl/Cmd + Shift + X → найдите Cline
(или Roo Code — настройки те же) → Install.
Значок шестерёнки на его панели.
| API Provider | Anthropic |
| Use custom base URL | включить → https://api.harmonyai.ru |
| API Key | sk-h-ваш-ключ |
dynatos для сложных задач, adanatos для быстрых.
Если список предлагает только официальные названия — введите идентификатор вручную.
Ctrl/Cmd + `) и запустите там Claude Code с нашими переменными — редактор
для этого настраивать не нужно. Шаги — во вкладке «Claude Code».
OpenCode умеет добавлять свои провайдеры. Описываем HarmonyAI как провайдер формата Anthropic — и обе модели появляются в общем списке.
Общий для всех проектов — ~/.config/opencode/opencode.json.
Только для текущего — opencode.json в корне проекта.
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"harmony": {
"npm": "@ai-sdk/anthropic",
"name": "HarmonyAI",
"options": {
"baseURL": "https://api.harmonyai.ru/v1",
"apiKey": "sk-h-ваш-ключ"
},
"models": {
"dynatos": { "name": "Dynatos" },
"adanatos": { "name": "Adanatos" }
}
}
}
}opencode
Команда /models → раздел HarmonyAI.
/v1. Здесь адрес указывается вместе
с ним — https://api.harmonyai.ru/v1, потому что библиотека дописывает
к нему только /messages. В Claude Code, наоборот, /v1 нужно
опустить: он добавляет его сам.
Прямые запросы к шлюзу. Формат — Anthropic Messages API, так что подходит любая библиотека, которая умеет его отправлять.
| Адрес | https://api.harmonyai.ru |
| Эндпоинты | /v1/messages, /v1/messages/count_tokens, /v1/models |
| Авторизация | Authorization: Bearer sk-h-… или x-api-key: sk-h-… |
| Версия | anthropic-version: 2023-06-01 |
| Модели | dynatos, adanatos |
curl https://api.harmonyai.ru/v1/messages \
-H "Authorization: Bearer $HARMONY_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "adanatos",
"max_tokens": 1024,
"messages": [
{ "role": "user", "content": "Объясни, что такое SSE" }
]
}'Добавьте "stream": true и флаг -N, чтобы cURL не буферизовал вывод.
curl -N https://api.harmonyai.ru/v1/messages \
-H "Authorization: Bearer $HARMONY_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "dynatos",
"max_tokens": 2048,
"stream": true,
"messages": [{ "role": "user", "content": "Напиши хайку про кэш" }]
}'import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({
baseURL: 'https://api.harmonyai.ru',
apiKey: process.env.HARMONY_API_KEY,
});
const stream = await client.messages.stream({
model: 'adanatos',
max_tokens: 1024,
messages: [{ role: 'user', content: 'Напиши регулярку для e-mail' }],
});
for await (const event of stream) {
if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
process.stdout.write(event.delta.text);
}
}curl https://api.harmonyai.ru/v1/models \ -H "Authorization: Bearer $HARMONY_API_KEY"
Сколько токенов займёт запрос — до его отправки и без списания:
curl https://api.harmonyai.ru/v1/messages/count_tokens \
-H "Authorization: Bearer $HARMONY_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "dynatos",
"messages": [{ "role": "user", "content": "Длинный текст…" }]
}'/v1/chat/completions у шлюза нет, и клиенты, умеющие говорить только
на этом формате, к нему не подключатся. Нужен провайдер anthropic
с настраиваемым базовым адресом.
Официальная библиотека anthropic работает со шлюзом без изменений —
достаточно передать base_url.
pip install anthropic
macOS и Linux
export HARMONY_API_KEY="sk-h-ваш-ключ"
Windows, PowerShell
$env:HARMONY_API_KEY="sk-h-ваш-ключ"
import os
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.harmonyai.ru",
api_key=os.environ["HARMONY_API_KEY"],
)
with client.messages.stream(
model="dynatos",
max_tokens=2048,
messages=[{"role": "user", "content": "Разбери этот SQL-запрос"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)msg = client.messages.create(
model="adanatos",
max_tokens=512,
messages=[{"role": "user", "content": "Привет!"}],
)
print(msg.content[0].text)
print(msg.usage.input_tokens, msg.usage.output_tokens)x-api-key — шлюз принимает и его,
и Authorization: Bearer. Поле usage в ответе показывает
фактический расход, по которому списывается баланс.
Запрос из Invoke-RestMethod, без сторонних модулей.
Только на текущую сессию:
$env:HARMONY_API_KEY = "sk-h-ваш-ключ"
Навсегда — для своей учётной записи:
[Environment]::SetEnvironmentVariable( "HARMONY_API_KEY", "sk-h-ваш-ключ", "User")
$body = @{
model = "adanatos"
max_tokens = 512
messages = @(@{ role = "user"; content = "Привет! Ответь одним предложением." })
} | ConvertTo-Json -Depth 5
$res = Invoke-RestMethod -Method Post `
-Uri "https://api.harmonyai.ru/v1/messages" `
-Headers @{
"Authorization" = "Bearer $env:HARMONY_API_KEY"
"anthropic-version" = "2023-06-01"
} `
-ContentType "application/json" `
-Body ([Text.Encoding]::UTF8.GetBytes($body))
$res.content[0].text$env:ANTHROPIC_BASE_URL = "https://api.harmonyai.ru" $env:ANTHROPIC_AUTH_TOKEN = "sk-h-ваш-ключ" $env:ANTHROPIC_MODEL = "dynatos" $env:ANTHROPIC_DEFAULT_HAIKU_MODEL = "adanatos" claude
[Text.Encoding]::UTF8.GetBytes) — иначе Windows PowerShell 5.1
отправит кириллицу в кодировке системы, и вместо букв придут вопросительные знаки.
В PowerShell 7 это уже не нужно, но и не мешает.
Ключ хранится в отдельном файле, а не в истории команд, — и любой запрос становится одной строкой.
printf '%s' 'sk-h-ваш-ключ' > ~/.harmony-key chmod 600 ~/.harmony-key
Строка для ~/.zshrc или ~/.bashrc:
export HARMONY_API_KEY="$(cat ~/.harmony-key)"
Применить сразу, не открывая новое окно: source ~/.zshrc.
Ответ разбираем через jq, чтобы не читать JSON глазами.
ask() {
curl -s https://api.harmonyai.ru/v1/messages \
-H "Authorization: Bearer $HARMONY_API_KEY" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d "$(jq -n --arg q "$*" '{
model: "adanatos",
max_tokens: 1024,
messages: [{ role: "user", content: $q }]
}')" | jq -r '.content[0].text'
}
ask "Чем tar отличается от zip?"export ANTHROPIC_BASE_URL="https://api.harmonyai.ru" export ANTHROPIC_AUTH_TOKEN="$HARMONY_API_KEY" export ANTHROPIC_MODEL="dynatos" export ANTHROPIC_DEFAULT_HAIKU_MODEL="adanatos" claude
~/.zsh_history или ~/.bash_history и остаётся
там надолго. Файл с правами 600 читает только владелец, а в истории
видно лишь имя переменной.
Клиента нет в списке? Подойдёт любой, у которого есть провайдер Anthropic
и возможность заменить адрес сервера: https://api.harmonyai.ru,
ключ sk-h-…, модель dynatos или adanatos.
Справочник
| Заголовок | Значение |
|---|---|
Authorization | Bearer sk-h-… |
x-api-key | sk-h-… — альтернатива, используется SDK |
anthropic-version | 2023-06-01. Можно не передавать — шлюз подставит сам |
Content-Type | application/json |
Достаточно одного из двух первых заголовков. Ключ проверяется по хешу; отозванный или удалённый ключ перестаёт работать сразу.
POST /v1/messagesОсновной эндпоинт. По умолчанию отвечает потоком (text/event-stream).
| Поле | Тип | Описание |
|---|---|---|
model | string | Обязательно. dynatos или adanatos |
max_tokens | integer | Обязательно. Ограничивается пределом модели (см. таблицу ниже) |
messages | array | Обязательно. Роли user и assistant; содержимое — строка или блоки text, image, tool_use, tool_result |
system | string / array | Системная инструкция |
stream | boolean | true по умолчанию. false — один JSON-ответ |
temperature | number | Передаётся модели как есть |
top_p | number | Передаётся модели как есть |
stop_sequences | array | До четырёх строк |
tools | array | Описания инструментов с input_schema |
tool_choice | object | auto, any, none, {"type":"tool","name":"…"} |
thinking | object | {"type":"enabled","budget_tokens":N} — включает режим размышления. Больше бюджет — выше уровень усилий модели |
Ответ без потока:
{
"id": "msg_…",
"type": "message",
"role": "assistant",
"model": "adanatos",
"content": [ { "type": "text", "text": "…" } ],
"stop_reason": "end_turn",
"usage": { "input_tokens": 24, "output_tokens": 118 }
}
Поток — стандартная последовательность событий:
event: message_start event: content_block_start event: ping event: content_block_delta // delta.type = text_delta | input_json_delta event: content_block_stop event: message_delta // stop_reason + usage event: message_stop
Событие ping приходит раз в несколько секунд, чтобы соединение не закрыли
промежуточные прокси. Ошибка в середине потока приходит как event: error.
Итоговое число токенов — в message_delta.
POST /v1/messages/count_tokens
Оценка длины запроса без обращения к модели и без списания с баланса.
Принимает то же тело, что /v1/messages, и возвращает:
{ "input_tokens": 217 }
usage из ответа.
GET /v1/modelsСписок доступных моделей с тарифами и лимитами.
{
"data": [
{
"type": "model",
"id": "dynatos",
"display_name": "Dynatos",
"description": "Флагманская модель: длинный контекст, сложные задачи, код",
"context_window": 200000,
"max_output_tokens": 64000,
"pricing": {
"input_usd_per_million_tokens": 0.6,
"output_usd_per_million_tokens": 7
}
}
],
"has_more": false
}
Формат — как у Anthropic API: { "type": "error", "error": { "type": …, "message": … } }.
| Код | type | Когда |
|---|---|---|
| 400 | invalid_request_error | Нет обязательного поля, неверный JSON, пустой messages |
| 401 | authentication_error | Ключ отсутствует, неверен или отозван |
| 402 | invalid_request_error | Недостаточно средств. В ответе — текущий баланс и требуемая сумма |
| 404 | not_found_error | Неизвестная модель или несуществующий путь |
| 405 | invalid_request_error | Неподходящий HTTP-метод |
| 429 | rate_limit_error | Слишком много запросов |
| 502 | api_error | Сбой на стороне модели |
| 503 | overloaded_error | Модель перегружена, стоит повторить позже |
Модели и тарифы
| Модель | Вход, за 1 млн | Выход, за 1 млн | Контекст | Макс. ответ |
|---|---|---|---|---|
dynatosФлагманская модель |
$0.60 | $7.00 | 200 000 | 64 000 |
adanatosБыстрая и дешёвая |
$0.50 | $5.00 | 200 000 | 32 000 |
Стоимость запроса считается по формуле:
стоимость = (input_tokens / 1 000 000 × цена входа)
+ (output_tokens / 1 000 000 × цена выхода)
Рубли считаются по фиксированному курсу 95,00 ₽ за $1 — он не привязан к бирже, поэтому расходы предсказуемы. Все суммы хранятся и складываются в целых числах, без плавающей точки: округления «в свою пользу» в расчётах нет. Вход и выход тарифицируются отдельно, никакой «средней цены за токен» не существует.
Баланс
Подписка за 299 ₽ открывает возможности чата на сайте и не начисляет баланс API.
Баланс API расходуется только на запросы к /v1/… и не включает Pro.
Баланс проверяется перед обращением к модели. Если средств не хватает, запрос не уходит вообще и возвращается ошибка 402 с текущей и требуемой суммой.
После ответа списывается фактический расход по usage от модели.
Данные о расходе, присланные клиентом, не учитываются.
Пополнение — в личном кабинете: сумма от 100 ₽, оплата банковской картой. Баланс увеличивается только после подтверждения платежа — возврат на сайт сам по себе ничего не начисляет. Там же видны история пополнений и расход за последние 30 дней.
Безопасность
sk-h-hd9d••••••••.
Восстановить ключ невозможно: если он утерян, его перевыпускают.