## AI request pricing

What makes up the price of a model call, what pays for it, and which refusals come back when there is nothing to pay for the call.

Current model prices and the consumed share of the quota are returned by the endpoints listed below.

## Model prices

[`GET /v1/models`](./models/list.md) returns the price of every model in the `pricing` object, and [`GET /v1/models/:modelId`](./models/get.md) returns the price of a single model. All prices are in Vibes, the platform's internal currency.

| Field | What it charges for |
|------|------------------|
| `pricing.prompt` | 1 million input tokens |
| `pricing.completion` | 1 million response tokens |
| `pricing.perMinute` | One minute of audio. Present only when greater than `0` |
| `pricing.perCall` | One call. Present only when greater than `0` |
| `pricing.unit` | Unit of measure, always `vibes` |

The speech recognition model is charged by `perMinute` and `perCall`, and its `prompt` and `completion` are `0`. Zero `prompt` and `completion` values therefore do not mean the call is free: check all `pricing` fields.

## What pays for a call

| Key and model | What pays |
|---------------|------------------|
| Platform model, regular API key | The company's monthly AI quota, if the model is part of the quota program. Beyond the quota, if such spending is allowed for the Bitrix24 account, the account balance at the model's catalog price. A model outside the quota program is paid from the account balance at the catalog price |
| Platform model, Cowork/Code subscription key with the `vibe:cowork` scope | The Cowork/Code subscription quota, while the subscription is connected and active. Such a call does not consume the company's monthly AI quota |
| Model on your personal provider key (BYOK) | Paid directly to the provider at its rates. Nothing is charged to the account balance |

A personal provider key is connected through [`POST /v1/ai/credentials`](./credentials/create.md). See [Your own keys (BYOK)](./credentials.md) for details.

## Company monthly AI quota

The quota is shared across the whole Bitrix24 account rather than tied to a single key: all of the company's API keys consume it. The API does not disclose the absolute quota size in Vibes. [`GET /v1/ai/quota`](./consumption/quota.md) shows the consumed share as a percentage, the reset date, and a per-model breakdown.

Only models included in the quota program consume the quota. Calls to other models appear in the breakdown with a request counter, but their quota share is `0`.

When the quota is exhausted and spending beyond it cannot be paid for, the call is rejected with `402 ai_quota_exhausted`. The `reason` field names the cause: `breaker` means the hourly circuit breaker on spending beyond the quota has tripped, `wallet_empty` means the account balance has no funds, `wallet_off` means spending beyond the quota is not available for the account.

## Even consumption and off-peak hours

In addition to the monthly limit, a Bitrix24 account may have daily and weekly windows: shares of the monthly quota that cannot be exceeded within a day or a week. They do not reduce the quota, they spread its consumption across the month. The state of the windows is returned in the `pacing` field of the [`GET /v1/ai/quota`](./consumption/quota.md) response. That page also describes how the platform can react when a window is exceeded. When a window is breached and the call cannot go through as a paid overage, it is rejected with `429 ai_pacing_limited`.

During off-peak hours the same call takes a smaller share of the quota. [`GET /v1/off-peak`](./consumption/off-peak.md) returns the schedule by hour of the week. The discount applies only to quota consumption: payment from the account balance at the model price gets no discount. Moving deferred tasks to off-peak hours postpones both the exhaustion of the monthly quota and the tripping of the daily or weekly window.

## Cowork/Code subscription

The subscription provides a single quota for AI requests, consumed jointly by the Cowork desktop app, Code mode, and autonomous AI agents. These tools have no separate limits: agent calls and desktop app sessions draw on one shared balance. Consumption is counted in three nested windows: 5 hours, a week, and a month. Plans and windows are described in [Cowork/Code subscription](/docs/cowork).

The subscription quota covers only AI requests and only while the subscription is connected and active. The dedicated server the AI agent runs on is paid for separately, from the account wallet.

When one of the windows is exhausted, the call is rejected with `402 cowork_quota_exhausted`. If a fallback model is configured on the platform, a `200` with a limit message may arrive instead of a refusal, and the request itself is not executed. See [`POST /v1/chat/completions`](./chat/completions.md) for details. The refusal body names the window in the `window` field, the reset time in `resetAt`, and the higher plan in `nextTier`.

## Payment refusals

| HTTP | Code | When it arrives |
|------|-----|----------------|
| 402 | `ai_quota_exhausted` | The company's monthly AI quota is exhausted and spending beyond it cannot be paid for |
| 402 | `cowork_quota_exhausted` | One of the Cowork/Code subscription quota windows is exhausted |
| 402 | `cowork_subscription_inactive` | The key with the `vibe:cowork` scope has no active Cowork/Code subscription |
| 402 | `company_budget_exhausted` | The spending budget set by the portal administrator is exhausted. Arrives only on calls that draw on the portal balance |
| 402 | `account_frozen` | The billing account is frozen because of a negative balance |
| 429 | `ai_pacing_limited` | The daily or weekly even-consumption window is breached and paid overage is not available |

The full list of common API errors: [Errors](/docs/errors).

The fields of each response and the steps to take are described in the error table of [`POST /v1/chat/completions`](./chat/completions.md). Request rate limits for models are unrelated to payment and are described on the [Rate limits](./chat/rate-limits.md) page.

## Known specifics

**A retired model is charged at its successor's price.** If a call to a model in the `DISABLED` state was served by a successor model, the charge is at the successor's price, and `pricing` in the `GET /v1/models/:modelId` response shows that price. See [Model lifecycle](./models/lifecycle.md) for details.

**Reasoning tokens are paid as response tokens.** For reasoning models these tokens are included in `usage.completion_tokens` and charged at the `pricing.completion` rate.

**Check the quota before bulk processing.** The `pctUsed` and `exhausted` fields in the `GET /v1/ai/quota` response let you warn the user in advance instead of waiting for a `402` refusal.

## See also

- [Model list](./models/list.md)
- [Company AI quota](./consumption/quota.md)
- [Off-peak schedule](./consumption/off-peak.md)
- [Usage statistics](./consumption/usage.md)
- [Your own keys (BYOK)](./credentials.md)
- [Cowork/Code subscription](/docs/cowork)
- [AI Router](/docs/ai)
