Разработчикам и интеграторам

Один API для всех моделей

Начните с проверки ключа. Затем подключите нужную операцию, задайте бюджет и связывайте ответ со списанием по ID запроса.

Сверить совместимость
  • Совместимость с OpenAI SDK
  • Лимит в рублях на ключ
  • ID запроса в каждом ответе
Раздел «API-ключи» в кабинете: ключи приложений с правами, дневным лимитом и датой использования
API-ключи с демонстрационными данными.

Первый шаг без платной генерации

Ключ → запрос → ответ

  1. Создайте API-ключДля этого примера достаточно права models:read. Полный секрет показывается один раз.
  2. Сохраните ключ на сервереЗадайте KVANTORA_API_KEY в окружении. В браузер и исходники приложения секрет не передавайте.
  3. Скопируйте и запустите примерJavaScript сохраните в файл check.mjs и выполните node check.mjs. Python работает со стандартной библиотекой.
  4. Проверьте ответHTTP 200 и поля data, pagination подтверждают доступ к каталогу. Возможность генерации проверяется отдельно.

Адрес API этого окружения: https://api.kvantora.ai. Вне локального стенда используйте HTTPS.

const key = process.env.KVANTORA_API_KEY;
if (!key) throw new Error("Задайте KVANTORA_API_KEY на сервере");

const response = await fetch(
  "https://api.kvantora.ai/v1/models?operation=chat&page=1&page_size=3",
  {
    headers: { Authorization: `Bearer ${key}` },
    redirect: "error",
    signal: AbortSignal.timeout(30_000),
  },
);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());
Без генерации и списания за модель

Запрос читает каталог с правом models:read. Сохраните ключ в переменной окружения на сервере. В ответе придут список data и сведения о страницах pagination; пустой список тоже допустим.

Следующий шаг

Подготовьте текстовый запрос

Добавьте ключу право text, проверьте цену и дневной бюджет. В model передайте публичный API ID из карточки.

Создайте REQUEST_ID один раз для логического запроса. При потере соединения сначала уточните его статус; новый ID создаёт другой запрос.

Ответ связан с расходом

Текст приходит в choices[0].message.content. Использование отражается в usage, состояние расчёта в billing.status. Сохраните id результата для поиска в истории расходов. Заголовок X-Request-Id содержит отдельный ID HTTP-обращения для диагностики.

Верхняя оценка резервируется до платной отправки. После подтверждённого исхода списывается фактическая сумма и освобождается остаток. Неизвестный исход сохраняет резерв.

Запрос к Agnes 2.5 Flash: Python, JavaScript и cURL

Операция доступна через API. Ключ храните в переменной окружения на своём сервере. REQUEST_ID: уникальный идентификатор запроса. При повторе сохраняйте его и тело запроса.

import json
import os
from urllib.request import Request, HTTPRedirectHandler, build_opener

class NoRedirect(HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

opener = build_opener(NoRedirect)

def post(url, payload):
    request = Request(url, data=json.dumps(payload).encode("utf-8"), headers={
        "Authorization": "Bearer " + os.environ["KVANTORA_API_KEY"],
        "Content-Type": "application/json",
        "Idempotency-Key": os.environ["REQUEST_ID"],
    }, method="POST")
    with opener.open(request, timeout=120) as response:
        return json.load(response)

payload = {
  "model": "agnes/agnes-2.5-flash",
  "messages": [
    {
      "role": "user",
      "content": "Объясни задачу кратко."
    }
  ]
}
print(post("https://api.kvantora.ai/v1/chat/completions", payload))
Документация APIСоздать API-ключ

Пример показывает формат запроса и не обещает доступный запуск. Текущий статус каждой операции указан в карточке модели.

До переноса приложения

Проверьте нужную часть API

Совместимость ограничена перечисленными форматами. Дополнительные поля, поток и вызовы функций зависят от операции и модели.

Опубликованный контракт API Kvantora
Клиент и операцияПуть APIВозможности и границы
OpenAI JS SDK 7.13.0 · Chat/v1/chat/completionsТекст, function tools, text/json_object. SSE только для доступного потокового режима. Без vision, hosted tools и json_schema.
OpenAI JS SDK 7.13.0 · Responses/v1/responsesТолько текст. stream=false, store=false; без серверной истории и previous_response_id.
Anthropic JS SDK 0.124.0 · Messages/v1/messagesТекст, обязательный max_tokens. Без потока, tool_use и cache_control.
OpenAI JS SDK 7.13.0 · Embeddings/v1/embeddingsСтроки, float/base64. Число входов и dimensions ограничены контрактом.
Медиа · JSON KvantoraПути изображений, видео и аудиоОценка → асинхронное задание → статус → файл. Полная совместимость медиа с OpenAI SDK не заявлена.

Версии клиентов и ограничения взяты из полной матрицы совместимости. Название модели не подтверждает поддержку операции через Kvantora.

Переносите один сценарий за раз

  1. Сверьте используемый метод SDK и параметры с матрицей. Для поддерживаемого клиента замените baseURL на адрес API Kvantora и задайте свой ключ.
  2. Сохраните публичный API ID модели. Проверьте лимит ключа, объём ответа и поведение при ошибке.
  3. Повторите один тестовый сценарий на своей разрешённой среде. Сопоставьте ответ, ID запроса, usage и сумму в журнале.
  4. Подключайте остальные сценарии после проверки. Серверные инструменты, состояние диалога и повторные попытки не переносятся автоматически.
Руководство по API

Если запрос оборвался

Структура ошибки, демонстрационные значения

{
  "error": {
    "code": "insufficient_scope",
    "message": "Недостаточно прав",
    "request_id": "REQUEST_ID"
  }
}

При insufficient_scope проверьте права ключа. При model_unavailable проверьте операцию. Сетевой timeout не доказывает отмену: не переключайте модель и не повторяйте оплачиваемый вызов с новым ID вслепую.

Подключение готово к настройке

Создайте отдельный ключ приложения и задайте минимальные права. Генерацию запускайте после проверки доступности операции и цены.