> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kvantora.ai/llms.txt
> Use this file to discover all available pages before exploring further.

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

> API-ключ, публичный ID модели и первый запрос к API Kvantora.

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

## Подготовка

<Steps>
  <Step title="Создайте ключ">
    Создайте ключ в кабинете Kvantora с правами `models:read` и `text`. Задайте дневной бюджет.
  </Step>

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

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

```bash theme={null}
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](/api):

```bash theme={null}
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 создаёт отдельный запрос. Подробности — в [памятке по ошибкам](/errors).

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

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

<Tabs>
  <Tab title="JavaScript SDK">
    Установите проверенную версию: `npm install openai@7.13.0`. Сохраните код в `sdk-request.mjs` и выполните `node sdk-request.mjs`.

    ```javascript theme={null}
    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: 256,
    }, { headers: { 'Idempotency-Key': REQUEST_ID } });
    if (result.object === 'chat.completion') {
      console.log(result.choices[0]?.message.content);
    } else {
      console.log('Обработка ещё не завершена:', result);
    }
    ```
  </Tab>

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

    ```bash theme={null}
    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:256}));'
    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
    ```
  </Tab>
</Tabs>

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

Для вывода текста по частям откройте [SSE](/streaming). Для изображений и других медиа начните с [оценки стоимости](/billing), затем сохраняйте ID [задания](/jobs).

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