For AI agents: markdown of this page — /docs-content-en/cowork/limits-reset.md documentation index — /llms.txt
Reset limits with a promotion right
POST /v1/cowork/limits/reset
Spends one right to reset Cowork/Code limits: the usage of all three quota windows on the user's seat — the 5-hour, weekly and monthly windows — is reset to zero. The window boundaries, the date of the next charge and any temporary limit increase stay unchanged.
A right is granted under a platform promotion and stays valid until that promotion ends. The user and the account come from the key binding; there are no path parameters. The operation is irreversible: a spent right cannot be restored.
Request fields (body)
| Field | Type | Required | Description |
|---|---|---|---|
rightId |
string | yes | Right ID — limitReset.rights[].id from the subscription summary, from 1 to 64 characters. Pass the first usable right — one with seatAlreadyReset: false: such rights come first in the list, ordered by expiry, soonest first. If there is no usable right, do not show the button. The value serves as the idempotency key: a repeat call with the same rightId does not spend a second right |
Examples
The endpoint supports only one authorization method: a Cowork/Code desktop key. A personal key and an application key receive 403 INSUFFICIENT_SCOPE or 403 COWORK_DESKTOP_KEY_REQUIRED.
curl — Cowork/Code desktop key
curl -X POST https://vibecode.bitrix24.com/v1/cowork/limits/reset \
-H "X-Api-Key: YOUR_COWORK_KEY" \
-H "Content-Type: application/json" \
-d '{"rightId": "cmg2k8x1f0003qz0l7a9b4c2d"}'
JavaScript — Cowork/Code desktop key
const res = await fetch('https://vibecode.bitrix24.com/v1/cowork/limits/reset', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_COWORK_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ rightId: 'cmg2k8x1f0003qz0l7a9b4c2d' }),
})
if (!res.ok) {
const { error } = await res.json()
// 404 and 409 — re-read the subscription summary and show what it returns.
console.error(error.code)
} else {
const { data } = await res.json()
// alreadyUsed: true — show the regular success screen: the right was spent earlier.
console.log(`Limits reset: ${data.usedAt}`)
}
Response fields
| Field | Type | Description |
|---|---|---|
success |
boolean | true both when a right is spent and on a repeat call |
data.rightId |
string | Right ID from the request |
data.usedAt |
string | When the right was spent (ISO 8601). On a repeat call — the moment it was first spent |
data.alreadyUsed |
boolean | true — the right was spent earlier, and this call did not reset the usage. false — this call reset the usage |
Response example
{
"success": true,
"data": {
"rightId": "cmg2k8x1f0003qz0l7a9b4c2d",
"usedAt": "2026-10-02T09:15:42.118Z",
"alreadyUsed": false
}
}
Error response example
409 — the right's promotion has ended or the right was revoked:
{
"success": false,
"error": {
"code": "COWORK_LIMIT_RESET_RIGHT_EXPIRED",
"message": "The limit-reset right is no longer available: its promotion has ended or the right was revoked."
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 400 | INVALID_BODY |
The body has no string field rightId; the field is empty or longer than 64 characters; or the body contains a field the endpoint does not accept |
| 400 | INVALID_JSON_BODY |
A body was sent, but it does not parse as JSON |
| 401 | MISSING_API_KEY |
The X-Api-Key header is missing |
| 401 | INVALID_API_KEY |
The key is not recognized — no such key exists on the platform |
| 401 | KEY_INACTIVE |
The key has been revoked or disabled |
| 401 | KEY_EXPIRED |
The key has expired |
| 402 | ACCOUNT_FROZEN |
The account is frozen for debt. The right was not spent: after the balance is topped up, the right can be used until the promotion ends |
| 403 | INSUFFICIENT_SCOPE |
The key lacks the vibe:cowork scope |
| 403 | COWORK_DESKTOP_KEY_REQUIRED |
The key belongs to another class: a personal key, an application key, an agent seat key or a project deploy key |
| 403 | KEY_NOT_BOUND_TO_USER |
The key is not bound to an account user |
| 403 | WRITE_BLOCKED_READONLY_KEY |
The key was issued as read-only |
| 403 | COWORK_LIMIT_RESET_DISABLED |
Limit reset with a promotion right is not enabled for the account. In this case, the subscription summary has no limitReset block either |
| 404 | COWORK_LIMIT_RESET_RIGHT_NOT_FOUND |
The user has no right with this ID |
| 409 | COWORK_LIMIT_RESET_RIGHT_EXPIRED |
The right's promotion has ended or was terminated early, or the right was revoked |
| 409 | COWORK_LIMIT_RESET_SEAT_NOT_ACTIVE |
The user's seat is not active: it is paused, cancelled or waiting for a new owner. The right was not spent |
| 409 | COWORK_LIMIT_RESET_SEAT_ALREADY_RESET |
This seat was already reset under the same promotion — for example, it was handed over by a colleague who reset the limits before the handover. The right was not spent |
| 429 | RATE_LIMITED |
The platform-wide limit is 10 requests per minute. The effective value for your key is returned in the x-ratelimit-limit header — it is lower than the platform-wide limit because that limit is divided across replicas. Retry the request after a pause |
| 503 | COWORK_FEATURE_DISABLED |
Cowork/Code is disabled at the platform level |
The full list of common API errors — Errors.
Known specifics
rightId is the idempotency key, so retry a network failure with the same value. A repeat call after a successful spend returns 200 with alreadyUsed: true and the moment of the first spend — show the regular success screen. Retry a network failure or a 5xx response, except 503 COWORK_FEATURE_DISABLED, up to three times with the same rightId and a random delay. Do not retry 400, 401 or 403.
After 404 or 409, re-read the subscription summary. The right may have expired or been revoked between polls, or the seat may have stopped being active. The summary shows what is left and the next right, if there is one.
The response does not include quota percentages. After a successful reset, re-read the full state and the subscription summary: the usage of the three windows is already zero, and the exhaustion flag is cleared.
The limitReset block may be absent. It arrives in the summary and the full state only when limit reset with a promotion right is enabled for the account. No block means no capability: do not show the button.
Only a desktop key can spend a right. An agent seat key sees the rights block but cannot spend a right: a reset is a one-off action by a person in front of the screen.
A right is bound to the user in the account, not to the tier. Changing the tier and pausing or resuming the subscription do not affect the right, but it can be spent only on an active seat.