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

DubDubAI — OpenAI-совместимый шлюз к 260+ моделям. Если ваш код работает с OpenAI, он заработает с нами после замены base_url и ключа.

1. Базовый URL и ключ

Параметры подключения
base_url:  https://dubdub.ru/v1
api_key:   sk-dubdub-...   ← создаётся в кабинете → API-ключи

2. Первый запрос

curl
curl https://dubdub.ru/v1/chat/completions \
  -H "Authorization: Bearer sk-dubdub-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.8-flash",
    "messages": [{"role": "user", "content": "Привет!"}]
  }'

3. Эндпоинты

Метод и путьОписание
POST /v1/chat/completionsЧат, стриминг, vision
GET /v1/modelsСписок доступных вашему ключу моделей + цены
POST /v1/embeddingsЭмбеддинги
POST /v1/images/generationsГенерация изображений
POST /v1/audio/*Аудио (speech/transcriptions)

4. Рассуждения (reasoning)

Для поддерживаемых моделей шлюз прокидывает параметры reasoning_effort ("low" | "medium" | "high") и enable_thinking (bool) — просто добавьте их в тело запроса.

Запрос с рассуждениями
{
  "model": "deepseek-r1",
  "messages": [
    {"role": "user", "content": "Сколько будет 137 × 251?"}
  ],
  "reasoning_effort": "high"
}

Работает не на всех моделях: включить режим и оценить глубину рассуждений модель решает сама.

5. Наши дополнения

К ответу мы добавляем объект dubdub со стоимостью запроса и текущим балансом — OpenAI SDK его просто игнорирует. В заголовках всегда приходит X-DubDub-Balance, а при низком балансе — X-DubDub-Balance-Warning: low.

Формат ответа (фрагмент)
{
  "choices": [ ... ],
  "usage": { "prompt_tokens": 71, "completion_tokens": 2139 },
  "dubdub": { "cost": 0.6488, "balance": 29.3512 }
}

6. Ошибки и лимиты

401Нет ключа или ключ неверен
402Баланс исчерпан — пополните кодом
403Модель недоступна ключу / нужна подписка
404Модель не найдена или отключена
429Превышен RPM/TPM лимит ключа или месячная квота

7. Поддержка

Вопросы и проблемы решаем через тикеты в кабинете — отвечаем обычно в течение дня. Забыли пароль? На странице входа есть форма «Забыли пароль?».