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

Единый шлюз к GPT, Claude, Gemini, DeepSeek, Grok и другим моделям. Полная совместимость с [OI] и Anthropic SDK, а также с популярными coding-агентами.

Скопируй нужный адрес и вставь в свой клиент:

[OI] Base URL
https://weatmood.com/v1
Для Python/Node SDK, Cursor, OpenCode, Cline
Anthropic Base URL
https://weatmood.com
Для Anthropic и Anthropic SDK
Base URL для РФ
https://weatmood.ru/v1
Через российский сервер. Ключ и баланс общие
Anthropic для РФ
https://weatmood.ru
Для Anthropic из России
Дальше: создай ключ в @weatmood_bot → «🔑 API ключ» и подставь его вместо wm_твой_ключ в примерах ниже.

Введение

Weatmood — прокси-шлюз к ведущим AI-моделям. Ты платишь за токены по нашему прайсу (дешевле, чем напрямую), а API остаётся на 100% совместимым с оригинальными SDK. Меняется только адрес и ключ — код остаётся прежним.

ПараметрЗначение
Base URLhttps://weatmood.com/v1
Base URL (РФ)https://weatmood.ru/v1
[OI]-эндпоинтPOST /v1/chat/completions
Anthropic-эндпоинтPOST /v1/messages
АвторизацияAuthorization: Bearer wm_...
Формат ответаJSON / SSE (стриминг)
Поддержка[OI] SDK, Anthropic SDK, LangChain, LlamaIndex, Anthropic, Cursor, Cline

Авторизация

API-ключ создаётся в Telegram-боте: @weatmood_bot🔑 API ключ → «➕ Создать ключ». Ключ выглядит как wm_ + 40 hex-символов.

Способы передачи ключа

ЗаголовокКогда использовать
Authorization: Bearer wm_...Стандарт для [OI]-совместимых клиентов
x-api-key: wm_...Официальный Anthropic SDK
# Оба варианта равнозначны
curl https://weatmood.com/v1/chat/completions \
  -H "Authorization: Bearer wm_твой_ключ" ...

curl https://weatmood.com/v1/messages \
  -H "x-api-key: wm_твой_ключ" \
Безопасность: ключ даёт доступ к твоему балансу. Не коммить его в git, не вставляй в браузерный JS. При утечке — мгновенно перевыпусти в боте, старый перестанет работать.

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

pythonfrom openai import OpenAI

client = OpenAI(
    api_key="wm_твой_ключ",
    base_url="https://weatmood.com/v1",
)

resp = client.chat.completions.create(
    model="deepseek-v4.1-flash",
    messages=[
        {"role": "system", "content": "Ты полезный ассистент."},
        {"role": "user", "content": "Привет!"},
    ],
)

print(resp.choices[0].message.content)
print("токенов:", resp.usage.total_tokens)
pythonfrom anthropic import Anthropic

client = Anthropic(
    api_key="wm_твой_ключ",
    base_url="https://weatmood.com",
)

msg = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    system="Ты полезный ассистент.",
    messages=[{"role": "user", "content": "Привет!"}],
)

print(msg.content[0].text)
print("токенов:", msg.usage.input_tokens + msg.usage.output_tokens)
javascriptimport OpenAI from "openai";

const client = new OpenAI({
  apiKey: "wm_твой_ключ",
  baseURL: "https://weatmood.com/v1",
});

const resp = await client.chat.completions.create({
  model: "deepseek-v4.1-flash",
  messages: [{ role: "user", content: "Привет!" }],
});

console.log(resp.choices[0].message.content);
bashcurl https://weatmood.com/v1/chat/completions \
  -H "Authorization: Bearer wm_твой_ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash",
    "messages": [{"role": "user", "content": "Привет!"}]
  }'

Баланс и лимиты

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

Формула расчёта

стоимость = (токены_входа × цена_входа
           + токены_выхода × цена_выхода
           + кеш_запись × цена_кеш_записи
           + кеш_чтение × цена_кеш_чтения) / 1 000 000
           + 0,01 ₽ за запрос

За каждый авторизованный запрос генерации, прошедший проверку параметров, дополнительно списывается 0,01 ₽. Плата применяется независимо от числа возвращённых токенов и сохраняется, если внешний поставщик не смог завершить генерацию. Служебные запросы /v1/health, /v1/models и /v1/messages/count_tokens не тарифицируются.

Если баланс исчерпан, запрос вернёт 402. Текущий баланс и расход — в боте: @weatmood_bot → главное меню (баланс, потрачено всего, потрачено за 24 часа).

Rate limits: мягкие ограничения на частоту запросов. При превышении возвращается 429 — используй экспоненциальный backoff при ретраях.

Chat Completions — [OI]-формат

POST/v1/chat/completions

Основной эндпоинт, полностью совместимый с [OI] Chat Completions API.

Параметры запроса

ПолеТипОбяз.Описание
modelstringдаID модели, например deepseek-v4.1-flash
messagesarrayдаИстория: system, user, assistant, tool
streamboolнетПотоковая отдача через SSE
temperaturenumberнет0–2, случайность ответа
top_pnumberнетNucleus sampling, 0–1
max_tokensintegerнетЛимит токенов ответа
stopstring | arrayнетСтоп-последовательности
toolsarrayнетОписание функций (function calling)
tool_choicestring | objectнетauto, none, required
response_formatobjectнет{"type":"json_object"} для JSON-ответа
frequency_penaltynumberнет−2…2, штраф за повторы
presence_penaltynumberнет−2…2, штраф за новые темы
userstringнетИдентификатор конечного пользователя

Ответ

json{
  "id": "chatcmpl-9f2b1c...",
  "object": "chat.completion",
  "created": 1730000000,
  "model": "deepseek-v4.1-flash",
  "choices": [{
    "index": 0,
    "message": {"role": "assistant", "content": "Привет! Чем помочь?"},
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 18,
    "completion_tokens": 7,
    "total_tokens": 25
  }
}

Список моделей

GET/v1/models
json{
  "object": "list",
  "data": [
    {"id": "glm-5.3-flash", "object": "model", "owned_by": "weatmood"},
    {"id": "claude-sonnet-4-5", "object": "model", "owned_by": "anthropic"}
  ]
}

Messages — Anthropic-формат

POST/v1/messages

Нативный формат Anthropic Messages API. Используй его с официальным SDK anthropic.

Важно: в этом формате max_tokensобязательное поле. Системный промпт передаётся отдельным полем system, а не в messages.

Параметры запроса

ПолеТипОбяз.Описание
modelstringдаID модели, например claude-sonnet-4-5
max_tokensintegerдаМаксимум токенов в ответе
messagesarrayдаrole: user / assistant
systemstring | arrayнетСистемный промпт
streamboolнетПотоковая отдача
temperaturenumberнет0–1
top_p, top_knumberнетСэмплирование
stop_sequencesarrayнетСтоп-последовательности
toolsarrayнетИнструменты с input_schema
tool_choiceobjectнет{"type":"auto"} и др.
metadataobjectнет{"user_id": "..."}

Пример

bashcurl https://weatmood.com/v1/messages \
  -H "x-api-key: wm_твой_ключ" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "system": "Ты senior Python-разработчик.",
    "messages": [
      {"role": "user", "content": "Напиши функцию debounce"}
    ]
  }'

Ответ

json{
  "id": "msg_01XyZ...",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-4-5",
  "content": [
    {"type": "text", "text": "Вот реализация debounce..."}
  ],
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 24,
    "output_tokens": 186,
    "cache_creation_input_tokens": 0,
    "cache_read_input_tokens": 0
  }
}

Стриминг

Передай "stream": true — ответ придёт частями по Server-Sent Events. Это стандарт для чатов и coding-агентов: текст появляется по мере генерации, а не после полного ответа.

bashcurl https://weatmood.com/v1/chat/completions \
  -H "Authorization: Bearer wm_твой_ключ" \
  -H "Content-Type: application/json" \
  -d '{"model":"deepseek-v4.1-flash","stream":true,
       "messages":[{"role":"user","content":"Напиши хокку"}]}'
ssedata: {"choices":[{"delta":{"content":"Ста"}}]}

data: {"choices":[{"delta":{"content":"рый"}}]}

data: {"choices":[{"delta":{"content":" пруд"}}]}

data: [DONE]
sseevent: message_start
data: {"type":"message_start","message":{...}}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"Ста"}}

event: content_block_delta
data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"рый"}}

event: message_stop
data: {"type":"message_stop"}
pythonstream = client.chat.completions.create(
    model="deepseek-v4.1-flash",
    messages=[{"role": "user", "content": "Напиши хокку"}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)
javascriptconst stream = await client.chat.completions.create({
  model: "deepseek-v4.1-flash",
  messages: [{ role: "user", content: "Напиши хокку" }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Совет: при стриминге usage приходит в последнем чанке. Не обрывай соединение раньше, если нужен точный расход токенов.

Tools / Function Calling

Модель может вызывать твои функции. Формат зависит от API.

json{
  "model": "deepseek-v4.1-flash",
  "messages": [{"role": "user", "content": "Какая погода в Москве?"}],
  "tools": [{
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "Узнать погоду в городе",
      "parameters": {
        "type": "object",
        "properties": {"city": {"type": "string"}},
        "required": ["city"]
      }
    }
  }],
  "tool_choice": "auto"
}
json{
  "model": "claude-sonnet-4-5",
  "max_tokens": 1024,
  "messages": [{"role": "user", "content": "Какая погода в Москве?"}],
  "tools": [{
    "name": "get_weather",
    "description": "Узнать погоду в городе",
    "input_schema": {
      "type": "object",
      "properties": {"city": {"type": "string"}},
      "required": ["city"]
    }
  }]
}

Изображения (Vision)

Модели с поддержкой зрения принимают изображения в сообщении.

json{
  "model": "glm-5.3-flash",
  "messages": [{
    "role": "user",
    "content": [
      {"type": "text", "text": "Что на картинке?"},
      {"type": "image_url",
       "image_url": {"url": "https://example.com/cat.jpg"}}
    ]
  }]
}

Вместо URL можно передать base64: "url": "data:image/jpeg;base64,..."

json{
  "model": "claude-sonnet-4-5",
  "max_tokens": 1024,
  "messages": [{
    "role": "user",
    "content": [
      {"type": "image",
       "source": {
         "type": "base64",
         "media_type": "image/jpeg",
         "data": "..."
       }},
      {"type": "text", "text": "Что на картинке?"}
    ]
  }]
}

Ошибки

КодЗначениеРешение
400Некорректный запросПроверь JSON и обязательные поля
401Ключ неверен или отозванПроверь ключ, перевыпусти в боте
402Недостаточно средствПополни баланс
403Модель недоступнаВыбери другую модель
404Неверный путьПроверь base_url и эндпоинт
429Слишком много запросовBackoff и повтор
500Ошибка провайдераПовтори запрос позже
504Провайдер не ответилПовтори, уменьши max_tokens
json{
  "error": {
    "message": "Insufficient balance",
    "type": "insufficient_quota",
    "code": "balance_exhausted"
  }
}

Интеграция: Anthropic

Anthropic — официальный CLI-агент Anthropic. Weatmood поддерживает его через переменные окружения.

Anthropic работает

Официальный терминальный агент

Настройка через переменные окружения

bashexport ANTHROPIC_BASE_URL="https://weatmood.com"
export ANTHROPIC_API_KEY="wm_твой_ключ"

# Запуск
claude

Чтобы не вводить каждый раз, добавь эти строки в ~/.bashrc, ~/.zshrc или ~/.config/fish/config.fish.

Через settings.json

json{
  "env": {
    "ANTHROPIC_BASE_URL": "https://weatmood.com",
    "ANTHROPIC_API_KEY": "wm_твой_ключ",
    "ANTHROPIC_MODEL": "claude-sonnet-4-5"
  }
}
Для РФ: замени base URL на https://weatmood.ru — тот же ключ, тот же баланс.

Проверка

bashclaude "объясни этот код" < main.py

# или интерактивно
claude

Интеграция: Codex

Codex CLI можно направить на Weatmood через [OI]-совместимый конфиг.

~/.codex/config.toml

toml[model_providers.weatmood]
name = "Weatmood"
base_url = "https://weatmood.com/v1"
env_key = "WEATMOOD_API_KEY"

[profiles.weatmood]
model = "glm-5.3-flash"
model_provider = "weatmood"
bashexport WEATMOOD_API_KEY="wm_твой_ключ"
codex --profile weatmood

Интеграция: OpenCode

OpenCode поддерживает кастомных [OI]-совместимых провайдеров.

~/.config/opencode/config.json

json{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "weatmood": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Weatmood",
      "options": {
        "baseURL": "https://weatmood.com/v1",
        "apiKey": "wm_твой_ключ"
      },
      "models": {
        "glm-5.3-flash": {"name": "GLM 5.3 Flash"},
        "claude-sonnet-4-5": {"name": "Claude Sonnet 4.5"},
        "deepseek-v4.1-flash": {"name": "DeepSeek V4.1 Flash"}
      }
    }
  }
}
bashopencode --model weatmood/glm-5.3-flash

Интеграция: Cursor

  1. Открой Settings → Models
  2. Включи [OI] API Key и нажми Override [OI] Base URL
  3. Base URL: https://weatmood.com/v1
  4. API Key: твой ключ wm_...
  5. Нажми Verify, затем добавь нужные модели в список
Если модель не появляется в списке — выбери «Add model» и впиши ID вручную, например glm-5.3-flash или claude-sonnet-4-5.

Интеграция: Cline / Roo Code

  1. Открой настройки Cline → API Provider
  2. Выбери [OI] Compatible
  3. Base URL: https://weatmood.com/v1
  4. API Key: wm_твой_ключ
  5. Model ID: например deepseek-v4.1-flash
json// Для Roo Code / Cline — JSON-конфиг провайдера
{
  "openAiBaseUrl": "https://weatmood.com/v1",
  "openAiApiKey": "wm_твой_ключ",
  "openAiModelId": "glm-5.3-flash"
}

Интеграция: VS Code Continue

Файл ~/.continue/config.json:

json{
  "models": [{
    "title": "Weatmood GLM 5.3 Flash",
    "provider": "openai",
    "model": "glm-5.3-flash",
    "apiKey": "wm_твой_ключ",
    "apiBase": "https://weatmood.com/v1"
  }]
}

SDK

Python

bashpip install openai       # для [OI]-формата
pip install anthropic    # для Anthropic-формата

Node.js

bashnpm install openai
npm install @anthropic-ai/sdk

Универсальная обёртка (Python)

pythonfrom openai import OpenAI

WEATMOOD_KEY = "wm_твой_ключ"

client = OpenAI(
    api_key=WEATMOOD_KEY,
    base_url="https://weatmood.com/v1",
)

def ask(prompt, model="deepseek-v4.1-flash", system=None):
    messages = []
    if system:
        messages.append({"role": "system", "content": system})
    messages.append({"role": "user", "content": prompt})

    resp = client.chat.completions.create(model=model, messages=messages)
    return resp.choices[0].message.content

print(ask("Привет!"))

curl & HTTP

Минимальный запрос без библиотек — только HTTP и JSON.

bash# Проверка ключа и списка моделей
curl https://weatmood.com/v1/models \
  -H "Authorization: Bearer wm_твой_ключ"

# Диалог
curl https://weatmood.com/v1/chat/completions \
  -H "Authorization: Bearer wm_твой_ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash",
    "messages": [{"role":"user","content":"Привет!"}],
    "temperature": 0.7
  }'

Сырой HTTP

httpPOST /v1/chat/completions HTTP/1.1
Host: weatmood.com
Authorization: Bearer wm_твой_ключ
Content-Type: application/json

{"model":"deepseek-v4.1-flash","messages":[{"role":"user","content":"Привет"}]}

Работа с изображениями и файлами

Модели Weatmood принимают изображения напрямую — передавай их в сообщении так же, как в [OI] API. Шлюз сам определит, как обработать вложение.

Изображения ([OI]-формат)

json{
  "model": "glm-5.3-flash",
  "messages": [{
    "role": "user",
    "content": [
      {"type": "text", "text": "Что на изображении?"},
      {"type": "image_url",
       "image_url": {"url": "https://example.com/photo.jpg"}}
    ]
  }]
}

Поддерживается и base64: "url": "data:image/png;base64,..."

Изображения (Anthropic-формат)

json{
  "model": "glm-5.2",
  "max_tokens": 1024,
  "messages": [{
    "role": "user",
    "content": [
      {"type": "image",
       "source": {"type": "base64", "media_type": "image/png", "data": "..."}},
      {"type": "text", "text": "Опиши подробно"}
    ]
  }]
}
Как это работает. Модели glm-5.3-flash, glm-5.2, deepseek-v4-flash и deepseek-v4.1-flash принимают изображения через встроенную систему анализа медиа: вложение обрабатывается отдельным модулем зрения, а его детальное описание передаётся модели. Для тебя это выглядит как обычный запрос с картинкой — API-совместимость полная.
Тарификация медиа. Обработка изображения расходует дополнительные токены: описание вложения добавляется к контексту запроса. Учитывай это при работе с крупными файлами.

Модель gemini-3.8-flash

Эта модель понимает изображения нативно, без промежуточного анализа, и подходит для задач, где важна точность распознавания деталей.

Модели и цены

Цены указаны за 1 000 000 токенов в рублях: вход / выход / кеш-запись / кеш-чтение.
Контекст — максимальный размер запроса, макс. выход — предел длины ответа (в токенах).

МодельКонтекст (вход)Макс. выходВходВыходКеш-з.Кеш-чт.
claude-opus-51 000 000128 0005 ₽10 ₽4 ₽2 ₽
deepseek-v4.1-flash1 000 000393 0004 ₽8 ₽2 ₽1 ₽
deepseek-v4-flash120 00065 000Бесплатно до 20.09.2026 00:00 МСК, затем 10 / 15 / 2 / 1 ₽
glm-5.3-flash262 14465 536Бесплатно до 20.09.2026 00:00 МСК, затем 3 / 5 / 2 / 1 ₽
glm-5.21 000 000120 0006 ₽12 ₽5 ₽2 ₽
gemini-3.8-flash256 00064 0005 ₽5 ₽
minimax-m2.7200 00016 000Бесплатно
gpt-6-astra1 050 000128 00050 ₽50 ₽
kimi-k31 048 576262 1446 ₽6 ₽
glm-5.3200 000128 0009 ₽9 ₽
weatFlex-2B262 144131 072Бесплатно
laguna-xs-2.1131 07232 768Бесплатно
nemotron-3-ultra-550b-a55b262 144131 072Бесплатно

К токеновой стоимости каждого запроса генерации, включая модели с бесплатными токенами, добавляется фиксированная плата за обработку 0,01 ₽.

Актуальный список с ценами всегда доступен командой 🧠 Модели в боте.

Кеширование промптов

Если ты отправляешь большой неизменяемый контекст (инструкции агента, документацию, кодовую базу), включи кеш — повторные запросы будут стоить значительно дешевле.

json{
  "model": "claude-sonnet-4-5",
  "max_tokens": 2048,
  "system": [{
    "type": "text",
    "text": "Очень длинная инструкция или контекст...",
    "cache_control": {"type": "ephemeral"}
  }],
  "messages": [{"role": "user", "content": "Вопрос по контексту"}]
}

Как читать расход

Поле в usageЧто значитЦена
input_tokensОбычные входные токеныполная цена входа
cache_creation_input_tokensЗаписано в кешцена кеш-записи
cache_read_input_tokensПрочитано из кешацена кеш-чтения (самая низкая)
output_tokensСгенерировано модельюцена выхода
Экономия: кеш-чтение дешевле обычного входа в 10 раз. Для coding-агентов с большим системным промптом это сокращает расход кратно.

Маршрут для РФ

Для пользователей из России доступен домен weatmood.ru. Запросы идут через сервер в РФ, минуя блокировки, и полностью повторяют поведение основного домена.

ОсновнойДля РФ
Base URLhttps://weatmood.com/v1https://weatmood.ru/v1
Anthropichttps://weatmood.comhttps://weatmood.ru
Ключобщий
Балансобщий
bash# Для Anthropic CLI из РФ
export ANTHROPIC_BASE_URL="https://weatmood.ru"
export ANTHROPIC_API_KEY="wm_твой_ключ"

# Для Python из РФ
client = OpenAI(api_key="wm_ключ", base_url="https://weatmood.ru/v1")
Через РФ-маршрут проходят только запросы к /api/* и /v1/*. Остальные пути отдают 404 — это сделано намеренно.

FAQ

Как узнать, сколько я потратил?

В боте @weatmood_bot на главном экране: баланс, потрачено всего и за 24 часа. Детализация — в «🕘 История».

Почему ответ пришёл не от той модели?

Проверь поле model в запросе и в ответе — оно должно совпадать. Если используешь агент, убедись, что модель задана в его конфиге, а не по умолчанию.

Можно ли использовать один ключ на нескольких устройствах?

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

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

Поток прервётся, а в ответе придёт ошибка 402. Списание за уже сгенерированные токены произойдёт.

Поддерживается ли fine-tuning или эмбеддинги?

Сейчас доступны chat-модели и vision. Эмбеддинги — в планах, напиши в поддержку, если нужны срочно.

Как перенести с официального [OI]?

Замени api_key и base_url — больше ничего менять не нужно.

Работает ли из России?

Да, используй weatmood.ru — трафик идёт через российский сервер.

Поддержка

Мы на связи и отвечаем быстро.

КудаКонтактПо каким вопросам
🛠 Техподдержка@FrancehealAPI, оплата, ошибки, подключение
👑 Владелец@ModeldataСотрудничество, оптовые объёмы
🤖 Бот@weatmood_botКлючи, баланс, модели
Готов начать? Создай ключ в @weatmood_bot и замени base_url на https://weatmood.com/v1.