For AI agents: markdown of this page — /docs-content-en/cowork/applications-defaults.md documentation index — /llms.txt
Application creation parameters
GET /v1/cowork/applications/defaults
Returns everything the application creation wizard needs before asking the user its first question: the available scope presets, the access mode for the new key, the remaining key quota, and the server parameters. This read-only endpoint has no side effects: it creates neither an application nor a key. Call it whenever the wizard opens and again before deployment to confirm the price.
Scope: vibe:cowork (Cowork/Code key) | Base URL: https://vibecode.bitrix24.com/v1 | Authorization: X-Api-Key
The server block contains the parameters to pass to POST /v1/infra/servers. Pass its values verbatim; no conversion is required.
Examples
This endpoint accepts only a Cowork/Code key, so only two examples are provided. A key without the vibe:cowork scope receives 403 INSUFFICIENT_SCOPE.
curl — Cowork/Code key
curl https://vibecode.bitrix24.com/v1/cowork/applications/defaults \
-H "X-Api-Key: YOUR_COWORK_KEY"
JavaScript — Cowork/Code key
const res = await fetch('https://vibecode.bitrix24.com/v1/cowork/applications/defaults', {
headers: { 'X-Api-Key': 'YOUR_COWORK_KEY' },
})
const { data } = await res.json()
if (!data.available) {
// Application creation is disabled — hide the wizard entry point before the user reaches it
return
}
// Render presets by their stable id and load labels from your own dictionaries
const presets = data.scopePresets.map(p => ({ id: p.id, scopes: p.b24Scopes }))
// Show the price only when it is available
const priceKnown = data.server.priceMonthly !== null
Response fields
| Field | Type | Description |
|---|---|---|
success |
boolean | Always true on success |
data.available |
boolean | false — application creation is disabled at the platform level. Hide the wizard entry point: POST /v1/cowork/applications returns 503 APP_CREATE_DISABLED. All other fields are still returned in full when it is false |
data.scopePresets |
array | Scope presets for the step that asks which Bitrix24 account data the application needs |
data.scopePresets[].id |
string | Stable preset identifier — crm, tasks, people. Use it to look up a label in your own dictionary: the platform returns no labels |
data.scopePresets[].b24Scopes |
array | The Bitrix24 scopes the preset requests. This array is never empty. Pass these values in the b24Scopes field when creating an application |
data.mode |
string | The access mode the Bitrix24 account assigns to new keys — READONLY or READWRITE. Show this value: on a Bitrix24 account in READONLY mode, an application that writes to CRM fails only after it is published |
data.keyExpiresInDays |
number | Lifetime of the new key in days, per the Bitrix24 account policy |
data.quota.keysUsed |
number | Number of key quota slots currently in use |
data.quota.keysLimit |
number | Maximum number of keys allowed by the Bitrix24 account administrator. The same quota values are included in the details of a 409 KEY_LIMIT_REACHED refusal |
data.server.placement |
string | Placement for the new server — galaxy, galaxy-preferred or standalone. These values are covered in "Known specifics" |
data.server.serverWillLink |
boolean | Whether the server you create will be linked to this application's card. This field is returned separately so clients do not have to derive it from placement |
data.server.provider |
string | null | Provider identifier for the provider field when creating a server. See GET /v1/infra/providers for available values |
data.server.plan |
string | null | Plan identifier for the plan field. See GET /v1/infra/providers/:providerId/plans for available values |
data.server.region |
string | null | Region identifier for the region field. See GET /v1/infra/providers/:providerId/regions for available values |
data.server.priceMonthly |
number | null | Catalog price of the server per month, in currency units. Actual charges for a given Bitrix24 account may differ. null means that no price was returned; it does not mean that the server is free |
data.server.currency |
string | null | Unit in which the price is expressed |
data.warningCodes |
array | Warning codes. The only code is SERVER_DEFAULTS_UNAVAILABLE: the provider catalog could not be retrieved, so the plan and price are unavailable. The placement and serverWillLink fields remain reliable because they are derived from the Bitrix24 account policy |
Response example
{
"success": true,
"data": {
"available": true,
"scopePresets": [
{ "id": "crm", "b24Scopes": ["crm"] },
{ "id": "tasks", "b24Scopes": ["task", "tasks"] },
{ "id": "people", "b24Scopes": ["user_brief", "department"] }
],
"mode": "READWRITE",
"keyExpiresInDays": 90,
"quota": { "keysUsed": 1, "keysLimit": 10 },
"server": {
"placement": "standalone",
"serverWillLink": true,
"provider": "bitrix-cloud",
"plan": "bc-small",
"region": "bc-eu-central",
"priceMonthly": 24,
"currency": "Vibes"
},
"warningCodes": []
}
}
Error response example
403 — no active Cowork/Code subscription:
{
"success": false,
"error": {
"code": "COWORK_NOT_ACTIVATED",
"message": "No active Cowork/Code subscription for this user+portal — an application cannot be created."
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 401 | MISSING_API_KEY |
The X-Api-Key header is missing |
| 401 | INVALID_API_KEY |
The key was not found or was revoked |
| 401 | KEY_INACTIVE |
The key is disabled |
| 401 | KEY_EXPIRED |
The key has expired |
| 402 | ACCOUNT_FROZEN |
The account balance is depleted — top it up. This read endpoint also returns the error; it is not exempt from the freeze |
| 403 | INSUFFICIENT_SCOPE |
The key lacks the vibe:cowork scope |
| 403 | COWORK_HARNESS_KEY_FORBIDDEN |
The call was made with a third-party agent key issued for the subscription. The application creation wizard is unavailable to such a key — see Your own agent on the subscription |
| 403 | COWORK_NOT_ACTIVATED |
No active Cowork/Code subscription for the user and portal |
| 429 | RATE_LIMITED |
The platform-wide limit is 30 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 |
| 429 | QUOTA_EXCEEDED |
The daily free-call quota is exhausted while the prepaid balance is zero |
| 503 | COWORK_FEATURE_DISABLED |
Cowork/Code is disabled at the platform level. Disabling the wizard itself does not produce this error — it is reported as available: false with status 200 |
See Errors for the full list of common API errors.
Known specifics
Three placement values, not two. With standalone, the server is provisioned as a separate billable virtual machine, and the price in the server block refers to that machine. With galaxy, the server must be deployed as a container on a shared host. With galaxy-preferred, a container is preferred, but deployment uses a separate machine if container placement is unavailable. With container placement, the application starts only after it is first published, so the post-creation text says "created, now publish it" rather than "the server is starting".
A missing price with no warning is a normal response for container placement. SERVER_DEFAULTS_UNAVAILABLE appears only with placement: "standalone". With galaxy and galaxy-preferred, the plan, region, priceMonthly and currency fields may be null while warningCodes remains an empty array: no separate machine is created, so there is nothing to bill. Decide whether to show a price based on priceMonthly itself, not on the presence of a warning.
The fields in the server block do not necessarily become null together. provider is determined before the plan catalog is retrieved, so a response may include provider while plan, region, priceMonthly and currency are null. Check every field you pass when creating a server instead of treating one field as a proxy for the others.
The image field is intentionally absent from the server block — do not pass it. When the field is omitted, the platform automatically selects a current operating system image. No separate request to the image catalog or client-side check for an incomplete catalog is required.
Pass the values from the server block verbatim when creating a server. There is no conversion between this response and POST /v1/infra/servers: provider, plan and region are accepted exactly as returned.
The Cowork/Code desktop key does not consume a quota slot. quota.keysUsed counts the employee's personal keys and application keys on this Bitrix24 account, as well as agent keys and project deploy keys. A revoked key frees its slot; deleting it is unnecessary.
The warning fields of the two endpoints differ, and that is not a typo. Only warningCodes is returned here; the response has no warnings field, whereas creating an application returns both. A single type cannot represent both responses.
The set of scope presets may grow. Render only presets with recognized id values and skip unfamiliar ones; otherwise, a new preset will appear in the interface without a label. The contents of b24Scopes may change, but id may not because it is part of the contract.