Стоимость и статистика API

Итоговое списание, баланс и история использования.

Стоимость в inference-ответе

JSON
{
  "usage": {
    "prompt_tokens": 120,
    "completion_tokens": 30,
    "total_tokens": 150,
    "cost": 0.000123
  }
}

usage.cost

Успешные Chat Completions, Responses и Messages запросы возвращают итоговую стоимость запроса в USD в числовом поле usage.cost.

В обычном JSON-ответе поле находится в usage; в streaming-ответе оно приходит в финальном usage-событии соответствующего API.

Это итоговое списание CloseRouter после завершения биллинга, а не предварительная оценка или внутренняя цена провайдера.

Получить запрос по request ID

Возьмите request ID из заголовка x-closerouter-request-id inference-ответа и подставьте его в URL. Не используйте для lookup верхнеуровневое поле id из тела ответа.

curl
export REQUEST_ID="00000000-0000-0000-0000-000000000000"

curl https://api.closerouter.dev/v1/requests/$REQUEST_ID \
  -H "Authorization: Bearer $CLOSEROUTER_API_KEY"

Ответ о стоимости запроса

JSON
{
  "data": {
    "request_id": "00000000-0000-0000-0000-000000000000",
    "external_user": null,
    "status": "completed",
    "model": "openai/gpt-5.4-mini",
    "api_type": "chat",
    "provider": "Provider 7",
    "api_key_id": "11111111-1111-4111-8111-111111111111",
    "streaming": false,
    "latency_ms": 934,
    "usage": {
      "prompt_tokens": 120,
      "completion_tokens": 30,
      "total_tokens": 150,
      "cache_creation_tokens": 0,
      "cache_read_tokens": 0,
      "cost": 0.000123
    },
    "created_at": "2026-08-21T10:00:00.000Z",
    "completed_at": "2026-08-21T10:00:01.000Z"
  }
}

GET /requests/{request_id}

Endpoint возвращает status, model, api_type, токены, cache-токены, usage.cost и временные метки одного запроса.

Любой активный API-ключ аккаунта может получить запрос, созданный другим ключом того же аккаунта.

Для запроса в обработке usage равен null. Завершённые запросы имеют status completed, partial или failed; partial может содержать стоимость уже переданных данных.

Доступ и детализация

Чужой, отсутствующий или некорректный request ID возвращает 404.

Список последних запросов

Возвращает запросы аккаунта в порядке от новых к старым. limit от 1 до 100 (по умолчанию 20), постраничность через offset, has_more показывает, есть ли ещё страница. Доступны фильтры start_date, end_date, model, status и user.

curl
curl -G https://api.closerouter.dev/v1/requests \
  -H "Authorization: Bearer $CLOSEROUTER_API_KEY" \
  --data-urlencode "limit=20" \
  --data-urlencode "status=failed"

Статистика за период

Без дат берутся последние 30 дней; период не может быть больше 366 дней. group_by можно повторять, чтобы считать только нужные разрезы.

curl
curl -G https://api.closerouter.dev/v1/usage \
  -H "Authorization: Bearer $CLOSEROUTER_API_KEY" \
  --data-urlencode "start_date=2026-08-01" \
  --data-urlencode "end_date=2026-08-31" \
  --data-urlencode "group_by=day" \
  --data-urlencode "group_by=model"

Ответ статистики

GET /usage

totals и каждая строка разреза содержат requests, failed_requests, prompt_tokens, completion_tokens, cache_creation_tokens, cache_read_tokens, total_tokens и списанную стоимость cost.

Доступные разрезы group_by: day, model, provider, api_key, api_type, status. Без параметра возвращаются все; невыбранные приходят пустыми массивами.

Фильтры start_date, end_date, model (можно повторять), api_key_id и timezone сужают период.

Доступ и детализация

Разрезы отсортированы по стоимости, кроме by_day — он идёт по датам.

Статистика охватывает все расходы аккаунта, включая дашборд и Telegram, поэтому сходится со страницей Usage в дашборде.

Провайдер называется тем же публичным именем, которое inference-ответы возвращают в поле provider.

Баланс

curl
curl https://api.closerouter.dev/v1/credits \
  -H "Authorization: Bearer $CLOSEROUTER_API_KEY"

Ответ

total_credits: текущий доступный баланс.

total_usage: суммарное списание за использование API.

При недостаточном балансе API возвращает 402 insufficient_balance.

Доступ и детализация

Явно бесплатный запрос сохраняет обычную запись использования с нулевой стоимостью и не создает списание.