Skip to content

Chat Completions

POST /v1/chat/completions — это OpenAI-совместимый эндпоинт. Он требует API-ключ со скоупом chat:write и лимитируется по каждому ключу.

Beta: mock-провайдер

В beta этот эндпоинт обслуживает mock-провайдер. Он возвращает детерминированный ответ и не вызывает OpenAI, Anthropic, DeepSeek, Zhipu или Kimi. Путь биллинга (резервирование → расчёт) настоящий и выполняется при каждом вызове.

Запрос

bash
# Используйте id модели из GET /v1/models (platform admin должен сначала создать модель и прайс).
curl -X POST https://api.runne.run/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer rn_live_…' \
  -d '{
    "model": "<model-id-from-v1-models>",
    "messages": [{"role": "user", "content": "Hello"}],
    "max_tokens": 1000
  }'
ПолеТипОбязательноПримечания
modelstringда"provider/model"; должен совпадать с id из GET /v1/models (модели по умолчанию нет)
messagesarrayдамин. 1; rolesystem | user | assistant
max_tokensintнетположительное, по умолчанию 1000

messages[].content должен быть строкой (в beta мульти-частный контент не поддерживается).

Ответ

json
{
  "id": "chatcmpl-mock-…",
  "object": "chat.completion",
  "created": 1750000000,
  "model": "mock-model",
  "choices": [
    {
      "index": 0,
      "message": { "role": "assistant", "content": "This is a mock response for demonstration purposes." },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": 2, "completion_tokens": 50, "total_tokens": 52 }
}

Mock-ответ всегда возвращает completion_tokens: min(max_tokens, 50) и model: "mock-model".

Биллинг в токенах

Каждый запрос проходит полный конвейер биллинга:

  1. Оценка — пессимистичная стоимость из длины сообщения (chars/4) плюс max_tokens по выходной ставке модели.
  2. Резервирование — атомарно уменьшает баланс (возвращает 402 insufficient_balance, если баланса недостаточно).
  3. Вызов провайдера (в beta — mock).
  4. Расчёт — вычисляет фактическую стоимость:
    • фактическая ≤ оценочной → возвращается разница;
    • фактическая > оценочной → списывается дефицит (воркспейс приостанавливается, если дефицит покрыть нечем).

Запрос биллится на воркспейс, которому принадлежит API-ключ. Каждый запрос пишет usage_record плюс строки реестра (reservation, settlement/refund/debit).

Ошибки

СтатусКогда
401ключ отсутствует/невалиден/отозван
403у ключа нет chat:write, либо воркспейс/клиент приостановлены
404неизвестная модель или нет прайса для модели
402недостаточно баланса для резервирования или покрытия дефицита
429превышен лимит на ключ

Полная таксономия — в разделе Ошибки.

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

GET /v1/models возвращает активные модели с текущим прайсом за 1k токенов:

bash
curl https://api.runne.run/v1/models

Используйте возвращённый id как поле model. В beta каталог изначально пуст — platform admin должен сначала создать модель и её прайс. Модели по умолчанию нет: значение, которого нет в каталоге, возвращает 404 (нет прайса). Формат ответа — в разделе Эндпоинты.

Связанное