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

HubFreqDash — OpenAI-совместимый прокси. Один адрес и один ключ дают доступ ко всем моделям каталога; менять формат запросов не нужно.

Кратко
Всё, что нужно для первого запроса.

base_url

https://hub.freqdash.com/v1

Аутентификация

Authorization: Bearer sk-hub_...

Моделей в каталоге

16

Бесплатных моделей

2

Базовый адрес и аутентификация

Прокси принимает те же запросы, что и api.openai.com, но по адресу шлюза HubFreqDash.

  • Базовый адрес API: https://hub.freqdash.com/v1 — от него строятся пути /models и /chat/completions.
  • Ключ передаётся заголовком Authorization: Bearer sk-hub_.... Ключи создаются, ограничиваются и отзываются в кабинете.
  • Один ключ работает и с CLI-агентами, и с IDE, и с серверным кодом — лимит считается на аккаунт тарифа, а не на конкретного клиента.
Заголовок авторизации
Authorization: Bearer sk-hub_...

Эндпоинты

Поддерживаются эндпоинты OpenAI-формата, которые используются клиентами и агентами.

МетодПутьНазначение
GET/modelsСписок моделей, доступных ключу: id, контекст и цены за токены.
POST/chat/completionsЧат-комплишены OpenAI-формата, включая стриминг и вызов инструментов.

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

Возвращает модели, доступные текущему ключу, с контекстом и ценами за токены, если провайдер их отдаёт.

GET /v1/models
curl https://hub.freqdash.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"

Поле model в запросах чата совпадает с id из ответа — прокси не переименовывает модели.

Чат-комплишены

Стандартный OpenAI-запрос: сообщения, temperature, tools и прочие привычные поля.

POST /v1/chat/completions
curl https://hub.freqdash.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-flash",
    "messages": [
      {"role": "system", "content": "Отвечай кратко"},
      {"role": "user", "content": "Что такое LLM-прокси?"}
    ],
    "temperature": 0.7
  }'
Ответ (фрагмент)
{
  "id": "chatcmpl-...",
  "object": "chat.completion",
  "model": "deepseek-v4-flash",
  "choices": [
    {
      "index": 0,
      "message": {"role": "assistant", "content": "..."},
      "finish_reason": "stop"
    }
  ],
  "usage": {"prompt_tokens": 24, "completion_tokens": 118, "total_tokens": 142}
}

Стриминг

С флагом stream=true ответ приходит в формате SSE: строки data: с дельтами и завершающий data: [DONE].

curl со стримингом
curl -N https://hub.freqdash.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-flash",
    "messages": [{"role": "user", "content": "Считай до пяти"}],
    "stream": true
  }'
Поток ответа
data: {"choices":[{"delta":{"role":"assistant","content":"Один"},"index":0}]}

data: {"choices":[{"delta":{"content":" два"},"index":0}]}

data: [DONE]
python: чтение потока
from openai import OpenAI

client = OpenAI(base_url="https://hub.freqdash.com/v1", api_key="sk-hub_...")

stream = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[{"role": "user", "content": "Считай до пяти"}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

Каталог моделей

Идентификаторы, вендор и регион размещения. Числовые характеристики (контекст, цена за 1M токенов) приходят из GET /v1/models и здесь не дублируются.

ID моделиНазваниеВендорРегионТариф
deepseek-v4-flashDeepSeek V4 FlashDeepSeekвне РФFree
qwen3.6-plusQwen 3.6 PlusAlibabaвне РФFree
deepseek-v4.1-flashDeepSeek V4.1 FlashDeepSeekвне РФПлатный
deepseek-v4-proDeepSeek V4 ProDeepSeekвне РФПлатный
qwen3.7-maxQwen 3.7 MaxAlibabaвне РФПлатный
qwen3.8-maxQwen 3.8 MaxAlibabaвне РФПлатный
glm-5.1GLM 5.1Zhipuвне РФПлатный
glm-5.3GLM 5.3Zhipuвне РФПлатный
kimi-k2.6Kimi K2.6Moonshotвне РФПлатный
kimi-k2.7-codeKimi K2.7 CodeMoonshotвне РФПлатный
kimi-k3Kimi K3Moonshotвне РФПлатный
minimax-m2.7MiniMax M2.7MiniMaxвне РФПлатный
minimax-m3MiniMax M3MiniMaxвне РФПлатный
mimo-v2.5-proMiMo V2.5 ProXiaomiвне РФПлатный
gpt-5.6-lunaGPT-5.6 LunaOpenAIвне РФПлатный
longcat-2.0LongCat 2.0Meituanвне РФПлатный

Лимиты тарифов

Лимит запросов считает сам шлюз по окну тарифа. При превышении возвращается 429 с заголовком Retry-After.

ТарифЦенаЛимит запросовМодели
Free0 ₽ / мес150 запросов / 3 чБесплатные модели
Starter2 500 ₽ / мес3 000 запросов / 3 чВсе модели каталога
Pro4 900 ₽ / мес10 000 запросов / 3 чВсе модели каталога

Подробное сравнение опций — на странице тарифов.

Ошибки

Формат ошибок совместим с OpenAI: объект error внутри JSON-ответа.

Формат ошибки
{
  "error": {
    "message": "Rate limit exceeded for plan starter",
    "type": "rate_limit_exceeded",
    "code": "rate_limit_exceeded"
  }
}
HTTPcodeКогда возникаетЧто делать
401invalid_api_keyЗаголовок Authorization отсутствует, ключ неизвестен или отозван.Проверьте, что ключ передан как Bearer и создан в кабинете.
403model_not_allowedМодель не входит в тариф (например, платная модель на Free).Выберите модель из разрешённого списка или перейдите на Starter/Pro.
429rate_limit_exceededИсчерпан лимит запросов за окно тарифа.Повторите запрос после времени из заголовка Retry-After или поднимите тариф.
502gateway_unavailableШлюз не смог получить ответ от провайдера модели.Повторите запрос; если повторяется — напишите в поддержку.

Переменные окружения клиентов

Большинство клиентов читают адрес и ключ из окружения — код приложения менять не нужно.

ПеременнаяЗначение
OPENAI_BASE_URLhttps://hub.freqdash.com/v1
OPENAI_API_KEYsk-hub_...
.env
OPENAI_BASE_URL="https://hub.freqdash.com/v1"
OPENAI_API_KEY="sk-hub_..."
bash: экспорт в текущей сессии
export OPENAI_BASE_URL="https://hub.freqdash.com/v1"
export OPENAI_API_KEY="sk-hub_..."

Часть клиентов (например, старые версии LangChain) используют алиас OPENAI_API_BASE — подставьте тот же адрес.

Исходный код и поддержка
Проект открыт: репозиторий на GitHub, вопросы — в Telegram.