For AI agents: markdown of this page — /docs-content-en/cowork/me.md documentation index — /llms.txt
Cowork/Code subscription summary
GET /v1/cowork/me
Returns a short state of the Cowork/Code subscription: the tier, the subscription state, and the usage of the three quota windows in percent. A lightweight version of the full state — without recommendations or the tier catalog.
Examples
curl — personal key
curl https://vibecode.bitrix24.com/v1/cowork/me \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl https://vibecode.bitrix24.com/v1/cowork/me \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/cowork/me', {
headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
if (!res.ok) {
const { error } = await res.json()
console.error(error.code, error.message)
} else {
const { tier, quotaPct } = await res.json()
console.log(`Tier ${tier}: month ${quotaPct.month}%, week ${quotaPct.week}%, 5h ${quotaPct.fiveHour}%`)
}
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/cowork/me', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const me = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
tier |
string | Current tier: FREE, PRO, MAX, ULTRA |
state |
string | Subscription state: ACTIVE, PAUSED, CANCELLED |
quotaPct.fiveHour |
number | 5-hour window, usage in percent (integer 0–100) |
quotaPct.week |
number | Weekly window, usage in percent (integer 0–100) |
quotaPct.month |
number | Monthly window, usage in percent (integer 0–100) |
resetAt.fiveHour |
string | Reset time of the 5-hour window (ISO 8601) |
resetAt.week |
string | Reset time of the weekly window (ISO 8601) |
resetAt.month |
string | Reset time of the monthly window — the end of the billing period (ISO 8601) |
nextChargeAt |
string or null | Date of the next charge, null for the FREE tier |
offPeak |
object | Off-peak hours: whether the discount applies now and when the next one starts. The composition of the block — Off-peak hours in the Cowork/Code subscription |
relief |
object | Quota relief: when platform support last reset the usage counters and when it last granted a temporary limit increase. Both fields inside the block are always present |
relief.resetGrantedAt |
string or null | When the usage counters were reset, to the hour (ISO 8601). null when no reset was granted, and also when the stamp is more than 7 days old |
relief.boostGrantedAt |
string or null | When a temporary limit increase was granted, to the hour (ISO 8601). null when none was granted, when the stamp is more than 7 days old, and when the increase has already ended. An empty value does not mean there is no increase — read boostPct |
boostPct |
integer | Temporary limit increase in percent granted by platform support (100 = double limits). 0 when none is active. Every quotaPct share already accounts for it |
boostExpiresAt |
string or null | When the temporary increase ends. null when none is active |
The offPeak key arrives only when off-peak hours are switched on for the account. Until the capability is on, it is absent from the response body entirely, and the example below does not show it.
The relief, boostPct and boostExpiresAt keys arrive together and only when quota relief is switched on for the account. Until the capability is on for your platform, they are absent from the response body entirely, and the example below does not show them. Test for the presence of the key, not for its value: null inside the block carries a meaning of its own.
Response example
{
"tier": "FREE",
"state": "ACTIVE",
"quotaPct": { "fiveHour": 40, "week": 24, "month": 20 },
"resetAt": {
"fiveHour": "2026-06-09T17:30:00.000Z",
"week": "2026-06-12T09:00:00.000Z",
"month": "2026-07-01T00:00:00.000Z"
},
"nextChargeAt": null
}
Error response example
404 — subscription not activated:
{
"success": false,
"error": {
"code": "COWORK_NOT_ACTIVATED",
"message": "No active Cowork/Code subscription for this user+portal"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 401 | MISSING_API_KEY |
The X-Api-Key header was not passed |
| 401 | INVALID_API_KEY |
Invalid API key |
| 403 | INSUFFICIENT_SCOPE |
The key lacks the vibe:cowork scope |
| 404 | COWORK_NOT_ACTIVATED |
No Cowork/Code subscription found for the user and Bitrix24 account |
| 500 | INVALID_TIER_CONFIGURATION |
The tier configuration on the platform is invalid |
| 503 | COWORK_FEATURE_DISABLED |
Cowork/Code is disabled at the platform level |
The full list of common API errors — Errors.
Known specifics
A successful response (200) is the object itself, without a success wrapper. Errors arrive in the envelope { success: false, error: { code, message } }. Determine success by the HTTP status (res.ok).
The endpoint returns percentages only. There is no exhaustion flag (exhausted), server time, or recommendations here — for those, use the full state.
The off-peak block arrives without the grid. The grid of multipliers by hour of the week and the share saved over the period are returned in the full state only — what stays here is the decision about the current hour and about the next off-peak one.
An empty relief.boostGrantedAt does not mean there is no limit increase. The stamp is there for a one-off notification and stays visible for 7 days, while an increase is granted for up to 30 days. An increase granted more than seven days ago reports an empty stamp and is still in effect. Only boostPct tells you whether an increase is in effect.
The value of the relief block matches what the full state returns. Store the stamp you have already reported to the user once per application, not separately per endpoint, or the same relief will be shown twice. Notify only when a non-empty value differs from the one you stored: the server deliberately turns a stamp into null (the visibility window closed, the increase expired or was revoked, the seat was handed over), so a plain «it changed — show it» rule would fire a false notice on every such transition.