Базовый адрес API — https://api.kvantora.ai (это адрес для запросов, а не страница сайта). Найдите модель в каталоге, проверьте доступность текстовой операции и подготовьте ключ с нужными правами и бюджетом.

Python и JavaScript без дополнительных пакетов

Скачайте quickstart.py для Python 3.10+ или quickstart.mjs для Node.js 22+. Оба файла используют один формат сохранённого запроса и не выполняют автоматические повторы. Их протокольная проверка выполнена 19 сентября 2026 года на Node.js 24.14.0 и Python 3.12.14 с локальным синтетическим HTTP-сервером. Реальные модели не вызывались.

Задайте в окружении сервера KVANTORA_API_KEY, KVANTORA_BASE_URL=https://api.kvantora.ai и публичный API ID доступной модели в KVANTORA_MODEL_ID. Не вводите ключ в URL или файл примера. Для скрытого ввода в PowerShell используйте Read-Host -MaskInput, в Bash используйте read -rs.

# Выберите один язык. catalog не вызывает модель.
node quickstart.mjs catalog
node quickstart.mjs prepare
node quickstart.mjs quote

# Или те же шаги на Python:
python quickstart.py catalog
python quickstart.py prepare
python quickstart.py quote

prepare создаёт kvantora-request.json: тело, UUID и адрес API, без секрета. Существующий файл не перезаписывается. В примере задано до 64 выходных токенов и max_cost_microrub=1000000, то есть предел 1 ₽, а не обещанная цена. До подготовки можно задать другой предел через KVANTORA_MAX_COST_MICRORUB.

quote отправляет это же тело в POST /v1/chat/quote. Оценка не создаёт запрос, резерв или вызов модели. В ответе проверьте estimated_cost_microrub, expires_at, reservation_created=false и estimation_only=true. Входные токены оцениваются приблизительно. Оценка действует 30 секунд; цена и доступность заново проверяются при отправке, quote их не фиксирует.

После проверки модели, оценки и бюджета отправьте одну команду выбранного языка:

node quickstart.mjs send
# Или
python quickstart.py send

send начинает платный запрос, когда запуск разрешён. Завершённый клиентский результат содержит completed: true только при object=chat.completion и billing.status=settled. Читайте text, costMicrorub и requestId. При HTTP 202 поле completed ложно: результат ещё не подтверждён.

requestId берётся из id ответа: ID вида req_… можно вставить в фильтр истории запросов кабинета. traceId — отдельный ID HTTP-обращения из заголовка X-Request-Id, полезный для диагностики. У отклонённого до принятия запроса записи в истории может не быть.

Для следующего логического запроса укажите новое имя файла во всех командах, например node quickstart.mjs prepare second-request.json. При неизвестном исходе не изменяйте исходное тело и UUID. Повтор send с тем же файлом восстанавливает исходную работу; новый файл создаёт отдельную. HTTP-ошибка завершает CLI с ненулевым кодом, не запускает повтор и не выводит отладочное сообщение сервера: оба файла показывают в поле error только error.code ответа (например, unauthorized или insufficient_balance), а если кода нет — request_failed.

Подготовка

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

Создайте ключ в кабинете Kvantora с правами models:read и text. Задайте дневной бюджет.

Сохраните переменные окружения

Сохраните ключ в переменной окружения сервера KVANTORA_API_KEY. Не помещайте его в браузерный код или URL. В KVANTORA_BASE_URL укажите https://api.kvantora.ai без /v1.

Выберите модель

Получите список моделей и скопируйте public_api_id нужной модели в KVANTORA_MODEL_ID. В ответе /v1/models поле id содержит тот же публичный ID. Проверьте availability.operations и разрешение запуска.

export KVANTORA_BASE_URL="https://api.kvantora.ai"
curl "$KVANTORA_BASE_URL/v1/models?operation=chat&page=1&page_size=20" \
  -H "Authorization: Bearer $KVANTORA_API_KEY"

Для текстового запроса используйте Node.js 22 или новее. Создайте REQUEST_ID один раз на логический запрос, а затем выполните пример из руководства API:

export REQUEST_ID="$(node -e 'console.log(crypto.randomUUID())')"

Пример формирует JSON через JSON.stringify, поэтому ID модели и текст передаются без ручного экранирования. Успешный ответ содержит object: chat.completion и текст в choices[0].message.content. HTTP 202 означает, что результат ещё не готов.

При сетевой ошибке сохраните исходный ключ, endpoint, REQUEST_ID и всё тело. Новый ID создаёт отдельный запрос. Подробности есть в памятке по ошибкам.

Запрос через SDK или curl

В примерах используется один сохранённый REQUEST_ID. Автоматические повторы SDK отключены. Примеры для Bash; ключ уже должен находиться в окружении сервера.

В репозитории Kvantora закреплена версия openai@7.13.0. Для существующего SDK-клиента используйте npm install openai@7.13.0, сохраните код в sdk-request.mjs и выполните node sdk-request.mjs. Совместимость параметров сверяйте с матрицей; этот фрагмент не подтверждает live-вызов модели.

import OpenAI from 'openai';
const { KVANTORA_API_KEY, KVANTORA_BASE_URL,
  KVANTORA_MODEL_ID, REQUEST_ID } = process.env;
if (![KVANTORA_API_KEY, KVANTORA_BASE_URL,
  KVANTORA_MODEL_ID, REQUEST_ID].every(Boolean)) {
  throw new Error('Задайте ключ, адрес API, ID модели и REQUEST_ID');
}
const client = new OpenAI({
  apiKey: KVANTORA_API_KEY,
  baseURL: KVANTORA_BASE_URL.replace(/[/]$/, '') + '/v1',
  maxRetries: 0,
});
const result = await client.chat.completions.create({
  model: KVANTORA_MODEL_ID,
  messages: [{ role: 'user', content: 'Привет' }],
  max_tokens: 64,
  max_cost_microrub: 1000000,
}, { headers: { 'Idempotency-Key': REQUEST_ID } });
if (result.object === 'chat.completion' && result.billing?.status === 'settled') {
  console.log(result.choices[0]?.message.content);
} else {
  console.log('Обработка ещё не завершена:', result);
}

Сначала сформируйте JSON без ручного экранирования переменных. Нужен Node.js 22 или новее.

node --input-type=module -e 'import {writeFileSync} from "node:fs"; if (!process.env.KVANTORA_MODEL_ID) throw new Error("Set KVANTORA_MODEL_ID"); writeFileSync("request.json", JSON.stringify({model:process.env.KVANTORA_MODEL_ID,messages:[{role:"user",content:"Привет"}],max_tokens:64,max_cost_microrub:1000000}),{flag:"wx"});'
# Сначала оценка без резервирования и вызова модели:
curl --fail-with-body "$KVANTORA_BASE_URL/v1/chat/quote" \
  -H "Authorization: Bearer $KVANTORA_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @request.json
# После проверки оценки выполните отдельную отправку:
curl --fail-with-body --include "$KVANTORA_BASE_URL/v1/chat/completions" \
  -H "Authorization: Bearer $KVANTORA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $REQUEST_ID" \
  --data-binary @request.json

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

Для вывода текста по частям откройте SSE. Для изображений и других медиа начните с оценки стоимости, затем сохраняйте ID задания.

Практические разборы: перенос приложения, извлечение JSON, расчёт стоимости 1 000 обращений и восстановление после ошибки. В паспорте каждого материала указаны проверка и её ограничения.

Хотите работать без кода? Откройте Нейростудию в кабинете. Для последовательности шагов используйте Kvantora Flow. Все три способа используют модели и баланс Kvantora.