HarmonyAI API

Модели HarmonyAI в вашем коде и инструментах

Шлюз совместим с Anthropic Messages API: те же поля, те же события потока, те же SDK. Claude Code, Cursor, OpenCode и свои скрипты подключаются заменой адреса и ключа. Платите только за фактические токены.

Базовый адрес
https://api.harmonyai.ru
Личный кабинет →

Ключ показывается один раз — сразу после создания.

  • 2модели: Adan и Dynatos
  • 200Kтокенов контекста
  • SSEпотоковые ответы
  • $0.50от, за 1M входных
curl https://api.harmonyai.ru/v1/messages \
  -H "Authorization: Bearer $HARMONY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "adan",
    "max_tokens": 512,
    "messages": [
      {"role": "user", "content": "Что такое D7?"}
    ]
  }'

Быстрый старт

Три шага до первого ответа

Создайте ключ

Кнопка выше или кабинет. Формат — 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": "adan",
    "max_tokens": 1024,
    "messages": [
      { "role": "user", "content": "Привет! Объясни в двух предложениях, что такое SSE." }
    ]
  }'

Ключ вместо $HARMONY_API_KEY подставлять в командную строку не стоит: он останется в истории оболочки. Держите его в переменной окружения или в файле настроек клиента.

Модели

Две модели — под разные задачи

Обе понимают текст и изображения, умеют вызывать инструменты и отвечать потоком.

Быстрая

Adan

adan

Отвечает почти мгновенно и стоит дешевле. Чат-боты, классификация, перевод, короткие тексты, подсказки в редакторе, автодополнение.

Вход
$0.50
Выход
$5.00
Контекст
200 000
Макс. ответ
32 000

Прежнее имя adanatos продолжает работать.

Флагман

Dynatos

dynatos

Для сложного: длинные документы, код и рефакторинг, анализ, многошаговые рассуждения и агентные сценарии с инструментами.

Вход
$0.60
Выход
$7.00
Контекст
200 000
Макс. ответ
64 000

Доступна при активной подписке Pro. В Claude Code подставляется вместо Sonnet и Opus.

ВозможностьAdanDynatos
Потоковый ответ (SSE)ДаДа
Изображения во входе (image)ДаДа
Инструменты (tools, tool_choice)ДаДа
Режим размышления (thinking)ДаДа, глубже
Лучше всего дляСкорость и объёмКачество и сложные задачи

Подключение

Выберите свой инструмент

Везде принцип один: адрес сервера — https://api.harmonyai.ru, ключ — sk-h-…, модель — dynatos или adan. Ниже — точные шаги для каждого клиента.

ChatGPT

Приложение

HarmonyAI подключается к ChatGPT как приложение: ChatGPT сам зовёт HarmonyAI, когда вопрос про музыку — сольфеджио, гармонию, аккорды, гаммы. Работает в браузере и на компьютере; на телефоне появится после подключения.

https://harmonyai.ru/mcp/sk-h-ваш-ключ

Ключ остаётся в этом окне: страница только подставляет его в адрес и никуда не отправляет.

  1. Включите режим разработчика

    ChatGPT → Настройки → Приложения и коннекторы → Расширенные настройки → включите Режим разработчика. Нужен платный тариф ChatGPT (Plus, Pro, Business).

  2. Создайте приложение

    В тех же настройках нажмите Создать и заполните поля:

    НазваниеHarmonyAI
    URL MCP-сервераадрес из поля выше
    АутентификацияБез аутентификации — ключ уже в адресе

    Отметьте, что доверяете приложению, и нажмите Создать.

  3. Спросите в чате

    В новом чате нажмите + → Ещё → HarmonyAI и задайте вопрос. Или просто напишите «Спроси HarmonyAI, что такое септаккорд».

Оплата и модели. Каждый ответ списывается с баланса API так же, как запрос к /v1/messages. По умолчанию отвечает adan; попросите ChatGPT использовать dynatos для сложных задач (нужна Pro-подписка). Адрес с ключом — это пароль: не публикуйте его. Если он утёк, отзовите ключ в кабинете.

Клиента нет в списке? Подойдёт любой, у которого есть провайдер Anthropic и возможность заменить адрес сервера: https://api.harmonyai.ru, ключ sk-h-…, модель dynatos или adan.

Примеры

Готовые рецепты

Копируйте и запускайте: везде используется переменная окружения HARMONY_API_KEY.

Текст приходит по мере генерации — пользователь видит ответ сразу, а не через десять секунд.

import os, anthropic

client = anthropic.Anthropic(base_url="https://api.harmonyai.ru",
                             api_key=os.environ["HARMONY_API_KEY"])

with client.messages.stream(
    model="adan",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Напиши короткое стихотворение про осень"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

print("\n", stream.get_final_message().usage)

Справочник

Эндпоинты и заголовки

Авторизация

ЗаголовокЗначение
AuthorizationBearer sk-h-…
x-api-keysk-h-… — альтернатива, используется SDK
anthropic-version2023-06-01. Можно не передавать — шлюз подставит сам
Content-Typeapplication/json

Достаточно одного из двух первых заголовков. Ключ проверяется по хешу; отозванный или удалённый ключ перестаёт работать сразу.

POST /v1/messages

Основной эндпоинт. По умолчанию отвечает потоком (text/event-stream).

ПолеТипОписание
modelstringОбязательно. dynatos или adan
max_tokensintegerОбязательно. Ограничивается пределом модели (см. таблицу ниже)
messagesarrayОбязательно. Роли user и assistant; содержимое — строка или блоки text, image, tool_use, tool_result
systemstring / arrayСистемная инструкция
streambooleantrue по умолчанию. false — один JSON-ответ
temperaturenumberПередаётся модели как есть
top_pnumberПередаётся модели как есть
stop_sequencesarrayДо четырёх строк
toolsarrayОписания инструментов с input_schema
tool_choiceobjectauto, any, none, {"type":"tool","name":"…"}
thinkingobject{"type":"enabled","budget_tokens":N} — включает режим размышления. Больше бюджет — выше уровень усилий модели

Ответ без потока:

{
  "id": "msg_…",
  "type": "message",
  "role": "assistant",
  "model": "adan",
  "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Когда
400invalid_request_errorНет обязательного поля, неверный JSON, пустой messages
401authentication_errorКлюч отсутствует, неверен или отозван
402invalid_request_errorНедостаточно средств. В ответе — текущий баланс и требуемая сумма
403permission_errorМодель dynatos без активной подписки Pro
404not_found_errorНеизвестная модель или несуществующий путь
405invalid_request_errorНеподходящий HTTP-метод
429rate_limit_errorСлишком много запросов
502api_errorСбой на стороне модели
503overloaded_errorМодель перегружена, стоит повторить позже

Модели и тарифы

Сколько стоит запрос

Модель Вход, за 1 млн Выход, за 1 млн Контекст Макс. ответ
dynatos
Флагманская модель
$0.60 $7.00 200 000 64 000
adan
Быстрая и дешёвая (он же adanatos)
$0.50 $5.00 200 000 32 000

Стоимость запроса считается по формуле:

стоимость = (input_tokens / 1 000 000 × цена входа)
          + (output_tokens / 1 000 000 × цена выхода)

Рубли считаются по фиксированному курсу 95,00 ₽ за $1 — он не привязан к бирже, поэтому расходы предсказуемы. Все суммы хранятся и складываются в целых числах, без плавающей точки: округления «в свою пользу» в расчётах нет. Вход и выход тарифицируются отдельно, никакой «средней цены за токен» не существует.

Калькулятор

Сколько это будет стоить

Прикиньте расход заранее. Тарифы берутся из той же конфигурации, что и биллинг.

Ориентир: 1 000 токенов ≈ 750 слов на английском или ≈ 400–500 слов на русском.

Один запрос—
В день—
В месяц (30 дней)—

Курс: 95,00 ₽ за $1

Лимиты и надёжность

Как писать устойчивый клиент

Таймаут — 120 секунд

Столько шлюз ждёт модель. Для длинных ответов включайте stream: true: текст пойдёт сразу, а ping раз в несколько секунд не даст прокси оборвать соединение.

Резерв по max_tokens

Перед запросом баланс сверяется с худшим случаем — весь max_tokens по цене выхода. Списывается же только фактический расход. Не ставьте max_tokens с большим запасом.

Повторы при 429 и 503

Это временные ошибки: подождите и повторите с растущей паузой. 400, 401, 402 и 404 повторять бессмысленно — исправьте запрос, ключ или баланс.

Повтор с экспоненциальной паузой (официальные SDK делают это сами, параметр max_retries):

import time, random, anthropic

def ask(client, **kw):
    for attempt in range(5):
        try:
            return client.messages.create(**kw)
        except (anthropic.RateLimitError, anthropic.InternalServerError):
            time.sleep(min(30, 2 ** attempt) + random.random())
    raise RuntimeError("Модель недоступна, попробуйте позже")

Баланс

Как устроена оплата

Баланс отдельно от Pro

Подписка за 299 ₽ открывает возможности чата на сайте и не начисляет баланс API. Баланс API расходуется только на запросы к /v1/… и не включает Pro.

Проверка до запроса

Баланс проверяется перед обращением к модели. Если средств не хватает, запрос не уходит вообще и возвращается ошибка 402 с текущей и требуемой суммой.

Списание по факту

После ответа списывается фактический расход по usage от модели. Данные о расходе, присланные клиентом, не учитываются.

Пополнение — в личном кабинете: сумма от 100 ₽, оплата банковской картой. Баланс увеличивается только после подтверждения платежа — возврат на сайт сам по себе ничего не начисляет. Там же видны история пополнений и расход за последние 30 дней.

Безопасность

Что происходит с ключом

  • Ключ генерируется криптографически стойким источником случайности. Ни времени создания, ни номера аккаунта, ни любых предсказуемых частей в нём нет.
  • Мы не храним ключ. В базе остаются только хеш, префикс для опознания и служебные данные: имя, дата создания, дата последнего использования.
  • Полный ключ виден один раз — в окне сразу после создания. Дальше в кабинете отображается только маска вида sk-h-hd9d••••••••. Восстановить ключ невозможно: если он утерян, его перевыпускают.
  • Перевыпуск мгновенный. Старый ключ становится недействительным в тот же момент, а его хеш помечается отозванным.
  • Ключи принадлежат аккаунту. Право владения проверяется на сервере при каждой операции, а не только в интерфейсе — прочитать, удалить или перевыпустить чужой ключ нельзя.
Не публикуйте ключ в репозиториях, скриншотах и обращениях в поддержку. Если он мог утечь — перевыпустите его, это занимает секунду.

Вопросы

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

Нужна ли подписка Pro, чтобы пользоваться API?

Для adan — нет, достаточно баланса API. Для dynatos нужна активная подписка Pro, без неё вернётся ошибка 403. Сами запросы в обоих случаях оплачиваются с баланса API.

Чем отличаются adan и adanatos?

Ничем: это одна модель. Её новое короткое имя — adan, прежнее adanatos продолжает работать, чтобы не ломать готовые настройки.

Подойдёт ли официальный SDK Anthropic?

Да. Укажите base_url (Python) или baseURL (Node.js) https://api.harmonyai.ru и ключ sk-h-…. Остальной код не меняется.

Работает ли OpenAI-совместимый формат (/v1/chat/completions)?

Шлюз говорит на протоколе Anthropic Messages. Если ваш инструмент умеет только формат OpenAI, используйте его режим «Anthropic» или «Claude» — он есть в Cursor, OpenCode, Cline и Roo Code.

Хранятся ли мои запросы?

Для биллинга сохраняется только расход: модель, число токенов, сумма и время. Тексты запросов и ответов шлюз в базу не записывает.

Почему число токенов в count_tokens отличается от usage?

count_tokens — быстрая оценка без обращения к модели. Точное значение приходит в usage ответа, по нему и идёт списание.

Что будет, если баланс закончится посреди ответа?

Ответ не обрывается: начатый запрос доводится до конца и списывается по факту. Следующие запросы вернут 402, пока баланс не пополнен.

Можно ли выпустить несколько ключей?

Да, в личном кабинете. Удобно держать отдельный ключ на каждый проект: утёкший ключ перевыпускается, не задевая остальные.