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 |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata.available |
Typeboolean | Descriptionfalse — 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 |
Fielddata.scopePresets |
Typearray | DescriptionScope presets for the step that asks which Bitrix24 account data the application needs |
Fielddata.scopePresets[].id |
Typestring | DescriptionStable preset identifier — crm, tasks, people. Use it to look up a label in your own dictionary: the platform returns no labels |
Fielddata.scopePresets[].b24Scopes |
Typearray | DescriptionThe Bitrix24 scopes the preset requests. This array is never empty. Pass these values in the b24Scopes field when creating an application |
Fielddata.mode |
Typestring | DescriptionAccess mode in which application creation will issue the key — READONLY or READWRITE. It is the narrowest of the mode the Bitrix24 account assigns to new keys, the mode of the calling Cowork/Code key and, if the key belongs to a subscription, the Cowork/Code subscription mode. The subscription is associated with an employee and a Bitrix24 account, and its access mode is shared across all of that employee’s devices. The exception is a calling key in read-only mode: the field is READONLY for it, but while the write block for such keys is in force (it is by default), no application can be created with such a key — creation returns 403 WRITE_BLOCKED_READONLY_KEY before the remaining checks and issues no key. The mode of the calling key is the data.accessMode field of the GET /v1/me response. In all other cases, show this value: under READONLY, an application that writes to CRM fails only after it is published |
Fielddata.keyExpiresInDays |
Typenumber | DescriptionLifetime of the new key in days, per the Bitrix24 account policy |
Fielddata.quota.keysUsed |
Typenumber | DescriptionNumber of key quota slots currently in use |
Fielddata.quota.keysLimit |
Typenumber | DescriptionPer-user key quota allowed by the Bitrix24 account administrator. The same quota values are included in the details of a 409 KEY_LIMIT_REACHED error when the per-user limit is reached. If application creation returns details.scope: "portal", the error is caused by a separate account-wide limit set by the platform, not by this field |
Fielddata.server.placement |
Typestring | DescriptionPlacement for the new server — galaxy, galaxy-preferred or standalone. These values are covered in "Known specifics" |
Fielddata.server.serverWillLink |
Typeboolean | DescriptionWhether 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 |
Fielddata.server.provider |
Typestring | null | DescriptionProvider identifier for the provider field when creating a server. See GET /v1/infra/providers for available values |
Fielddata.server.plan |
Typestring | null | DescriptionPlan identifier for the plan field. See GET /v1/infra/providers/:providerId/plans for available values |
Fielddata.server.region |
Typestring | null | DescriptionRegion identifier for the region field. See GET /v1/infra/providers/:providerId/regions for available values |
Fielddata.server.priceMonthly |
Typenumber | null | DescriptionEffective price of the server per month for the payer, in currency units, including USER and PORTAL overrides. The adapter price is a fallback when no active price row exists. null means that no price was returned; it does not mean that the server is free |
Fielddata.server.currency |
Typestring | null | DescriptionUnit in which the price is expressed |
Fielddata.warningCodes |
Typearray | DescriptionWarning 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 |
|---|---|---|
| HTTP401 | CodeMISSING_API_KEY |
DescriptionThe X-Api-Key header is missing |
| HTTP401 | CodeINVALID_API_KEY |
DescriptionThe key is not recognized — no such key exists on the platform |
| HTTP401 | CodeKEY_INACTIVE |
DescriptionThe key is disabled |
| HTTP401 | CodeKEY_EXPIRED |
DescriptionThe key has expired |
| HTTP402 | CodeACCOUNT_FROZEN |
DescriptionThe account balance is depleted — top it up. This read endpoint also returns the error; it is not exempt from the freeze |
| HTTP403 | CodeINSUFFICIENT_SCOPE |
DescriptionThe key lacks the vibe:cowork scope |
| HTTP403 | CodeCOWORK_HARNESS_KEY_FORBIDDEN |
DescriptionThe 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 |
| HTTP403 | CodeCOWORK_NOT_ACTIVATED |
DescriptionNo active Cowork/Code subscription for the user and portal |
| HTTP429 | CodeRATE_LIMITED |
DescriptionThe platform-wide limit is 30 requests per minute. The effective value for your key is returned in the x-ratelimit-limit header. |
| HTTP429 | CodeQUOTA_EXCEEDED |
DescriptionThe daily free-call quota is exhausted while the prepaid balance is zero |
| HTTP503 | CodeCOWORK_FEATURE_DISABLED |
DescriptionCowork/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.