Para agentes de IA: markdown desta página — /docs-content-en/management-keys.md índice da documentação — /llms.txt

Os artigos da documentação estão disponíveis atualmente em inglês.

Management keys

Management keys (vibe_live_) are not tied to a single Bitrix24 account and are intended for automating administration: managing API keys, viewing Bitrix24 accounts, and working with feedback.

Difference from Bitrix24 account keys

Capability API key (vibe_api_) Authorization key (vibe_app_) Management key (vibe_live_)
Bound to a Bitrix24 account Yes (a single account) Yes (a single account) No (all of the user's accounts)
Access to Bitrix24 entities (deals, tasks, etc.) Yes Yes No
Managing API keys No No Yes
Viewing the Bitrix24 account list No No Yes
Working with feedback Own tickets only Own tickets only All platform tickets
API reference (/v1/guide) Filtered by scopes Filtered by scopes Full (all entities)

Management key scopes

Each management key is created with one or more scopes. Without the required scope, the endpoint returns 403 MANAGEMENT_SCOPE_REQUIRED — even if the endpoint is otherwise available to management keys.

Scope Grants
vibe:mgmt:keys /v1/keys (list, create, update, delete, rotate)
vibe:mgmt:portals /v1/portals
vibe:mgmt:feedback /v1/feedback (ticket list, read, update, comments)

The endpoints /v1/me, /v1/guide, and /v1/openapi.json are available to any management key without a separate scope.

When creating a key, select only the scopes you need — if the key is intended only for managing API keys, it does not need the vibe:mgmt:feedback scope.

Key owner's account state

A management key acts on behalf of its owner, so the state of the owner's account is checked on every endpoint available to management keys — on reads and on writes alike. The check runs before the scope check, so these codes arrive even where the key lacks the required scope.

HTTP Code When returned
403 OWNER_DELETED The key owner's account has been deleted
403 OWNER_BLOCKED The key owner's account is blocked by the platform
503 ACCOUNT_PENDING_ERASURE The owner requested erasure of their data — the key is frozen until the cancellation window ends. The response carries a Retry-After: 3600 header. Cancelling the request restores the key — no rotation is needed
409 B24_USER_DELETED The key owner is no longer an active employee of the target Bitrix24 account — no key can be issued for them. Checked on issuance (POST /v1/keys) and rotation (POST /v1/keys/:id/rotate), the two operations that give a new key an owner. Different from NOT_PORTAL_MEMBER: that one arrives when the owner is not on the account at all, this one when the record exists but the employee has been deleted or deactivated

The freeze covers every management-key operation, including issuing, rotating and deleting API keys.

Available endpoints

Calls to Bitrix24 entity endpoints return 403 MANAGEMENT_KEY_NO_ENTITY_ACCESS.

`GET /v1/me` — key self-description

Returns the key type, the list of Bitrix24 accounts with roles and key counts, the list of available endpoints, and a quickstart.

Terminal
curl -H "X-Api-Key: vibe_live_abc123..." \
  https://vibecode.bitrix24.com/v1/me

Response:

JSON
{
  "success": true,
  "data": {
    "type": "management",
    "keyPrefix": "vibe_live_abc123",
    "keySuffix": "f9d2",
    "expiresAt": null,
    "scopes": [],
    "capabilities": [
      "GET https://vibecode.bitrix24.com/v1/me — this endpoint (management key self-description)",
      "GET https://vibecode.bitrix24.com/v1/guide — full API reference (portal-agnostic)",
      "GET https://vibecode.bitrix24.com/v1/keys — list APP keys for a portal (requires portalId query param)",
      "POST https://vibecode.bitrix24.com/v1/keys — create APP key (requires portalId in body)",
      "GET https://vibecode.bitrix24.com/v1/portals — list your portals",
      "GET https://vibecode.bitrix24.com/v1/feedback — list ALL platform feedback (management key sees everything)",
      "GET https://vibecode.bitrix24.com/v1/feedback/:id — feedback details including comment thread",
      "PATCH https://vibecode.bitrix24.com/v1/feedback/:id — update status/resolution (legacy, prefer /comments)",
      "POST https://vibecode.bitrix24.com/v1/feedback/:id/comments — post a team comment, changes status"
    ],
    "portals": [
      {
        "id": "portal-uuid",
        "domain": "mycompany.bitrix24.com",
        "status": "ACTIVE",
        "role": "ADMIN",
        "appKeyCount": 3
      }
    ],
    "totalAppKeys": 3,
    "quickstart": {
      "step1": "GET https://vibecode.bitrix24.com/v1/portals — list available portals",
      "step2": "GET https://vibecode.bitrix24.com/v1/keys?portalId=<id> — list APP keys for a portal",
      "step3": "POST https://vibecode.bitrix24.com/v1/keys { portalId, name, scopes } — create an APP key",
      "step4": "Use the APP key for entity API calls (deals, tasks, etc.)"
    },
    "docs": "https://vibecode.bitrix24.com/docs/management-keys"
  }
}

The response also contains a feedback object that lists the endpoints, statuses, and filters for working with feedback tickets — it is used by AI models to process tickets automatically.

`GET /v1/guide` — API reference

Returns the full API reference with all entities (no scope filtering). Used to pick the required endpoints before creating API keys.

Terminal
curl -H "X-Api-Key: vibe_live_abc123..." \
  https://vibecode.bitrix24.com/v1/guide

`GET /v1/openapi.json` — OpenAPI specification

Returns the machine-readable OpenAPI 3.1 specification of the Vibecode platform.

Terminal
curl -H "X-Api-Key: vibe_live_abc123..." \
  https://vibecode.bitrix24.com/v1/openapi.json

`GET /v1/portals` — Bitrix24 account list

Returns the Bitrix24 accounts the user has access to, along with the user's role in each.

Terminal
curl -H "X-Api-Key: vibe_live_abc123..." \
  https://vibecode.bitrix24.com/v1/portals

`GET /v1/keys` — API key list for a Bitrix24 account

The portalId parameter is required. The response lists the management key owner's keys in the specified Bitrix24 account — both personal vibe_api_ keys and authorization vibe_app_ keys. Key values are never returned: you recognize your own key in the list by its prefix and suffix fields.

Terminal
curl -H "X-Api-Key: vibe_live_abc123..." \
  "https://vibecode.bitrix24.com/v1/keys?portalId=portal-uuid"
Field Type Description
data[].id string Identifier of the key record. Accepted by endpoints that need a key as a resource — for example targetApiKeyId in bot ownership transfer
data[].name string Key name given at creation
data[].prefix string Beginning of the key value
data[].suffix string Last characters of the key value
data[].type string Key type. For Bitrix24 account keys — APP
data[].userId string Identifier of the key owner
data[].portalId string Identifier of the Bitrix24 portal
data[].clientId string | null Identifier of the OAuth app for an authorization key, null for a personal key
data[].scopes array Key scopes
data[].ipWhitelist array Allowed IP addresses, an empty array means no restriction
data[].rateLimit number | null Custom request limit, null means the platform-wide limit
data[].status string ACTIVE, REVOKED or BLOCKED
data[].accessMode string READWRITE or READONLY
data[].issuedVia string | null The channel that issued the key's webhook: per-portal and cloud-shared — the connector module on the account, dev_key — the owner's developer key, legacy — registration through Bitrix24 Network, none — no webhook was created, the key carries vibe:* scopes only. null for keys issued before the field existed
data[].expiresAt string | null Expiration date, null means no expiry
data[].lastUsedAt string | null Date of the last request made with this key
data[].createdAt string Creation date
data[].updatedAt string Date of the last change
JSON
{
  "success": true,
  "data": [
    {
      "id": "3f9a1c20-5e6b-4d18-9a77-0c2b8e4f1d33",
      "name": "Support bot",
      "prefix": "vibe_api_XXXXXXXXX",
      "suffix": "XXXX",
      "type": "APP",
      "userId": "a02e7b64-91c3-4f5a-8d20-7e1b3c95a4dc",
      "portalId": "d41f0b93-6c85-42e7-9a13-58bd0e7c2f46",
      "clientId": null,
      "scopes": ["imbot"],
      "ipWhitelist": [],
      "rateLimit": null,
      "status": "ACTIVE",
      "accessMode": "READWRITE",
      "issuedVia": "legacy",
      "expiresAt": null,
      "lastUsedAt": "2026-07-29T09:12:44.301Z",
      "createdAt": "2026-07-14T08:03:17.118Z",
      "updatedAt": "2026-07-14T08:03:17.118Z"
    }
  ]
}

Rejections of this request:

HTTP Code When returned
400 MISSING_PORTAL_ID The required portalId parameter was not provided
401 WRONG_KEY_TYPE The request was sent with a portal key — the key list is served to a management key only
403 NOT_PORTAL_MEMBER The key owner is not a member of the portal with the given portalId
403 PORTAL_ACCESS_BLOCKED The key owner's access to that portal is blocked
401 KEY_INACTIVE The management key is revoked or blocked
401 KEY_EXPIRED The management key's validity period has ended
403 MANAGEMENT_SCOPE_REQUIRED The key does not carry the vibe:mgmt:keys scope

`POST /v1/keys` — create an API key

Creates a new API key (vibe_api_) for the specified Bitrix24 account. Pass portalId, a name, and a list of scopes in the body. The full key is returned in the rawKey field once — save it immediately.

Terminal
curl -X POST \
  -H "X-Api-Key: vibe_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"portalId": "portal-uuid", "name": "My Key", "scopes": ["crm", "task"]}' \
  https://vibecode.bitrix24.com/v1/keys

By default four platform scopes are added to the requested ones: vibe:infra, vibe:ai, vibe:search, vibe:storage. The key in the example above gets crm, task, and those four.

On an account where the administrator has turned server management off, vibe:infra is silently dropped from that default — the key is issued with the other three. The 403 INFRA_DISABLED_FOR_PORTAL refusal comes back only for an explicitly requested scope.

To get a key with exactly the scopes you listed, pass exactScopes: true:

Terminal
curl -X POST \
  -H "X-Api-Key: vibe_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"portalId": "portal-uuid", "name": "Storage only", "scopes": ["crm", "vibe:storage"], "exactScopes": true}' \
  https://vibecode.bitrix24.com/v1/keys

Such a key gets only crm and vibe:storage, and answers 403 to POST /v1/infra/servers and to AI calls. Its scopes are treated as final: the platform does not widen them at request time, so GET /v1/me returns exactly what was stored at issue time.

Field Type Description
exactScopes boolean Optional, false by default. true — store exactly the listed scopes, without the four platform ones

Additional error codes:

Code HTTP When returned
MISSING_PORTAL_ID 400 portalId not provided in the request body
BILLING_MODE_NOT_SUPPORTED 400 The body carries billing: "subscription". Subscription-billed Cowork/Code keys are issued from the Vibecode dashboard only — see Your own agent on the subscription
NOT_PORTAL_MEMBER 403 The key owner is not a member of the specified portal
PORTAL_NOT_LINKED 400 The portal is not connected to Bitrix24 Network — the key cannot be created
PERSONAL_KEY_WEBHOOK_SCOPES_INVALID 400 No data scope is left in scopes. A portal key is backed by a Bitrix24 incoming webhook, while placement, entity, and userfieldtype require an application context and are unavailable to a personal key. Add at least one data scope, for example crm or user_brief, or register an OAuth application for application features
INVALID_SCOPES 400 Some of the requested scopes are unavailable on the Bitrix24 account
INFRA_DISABLED_FOR_PORTAL 403 scopes explicitly asks for vibe:infra and the Bitrix24 account administrator has turned server management off. The key is not created. A request without that scope goes through on a closed account as well
INT_TARIFF_REQUIRED 402 The portal is on a free Bitrix24 plan. For accounts where access is narrowed to the Vibe+ plan line, infrastructure and key issuance require a Vibe+ plan, and an ordinary commercial plan is declined with INT_VIBE_PLUS_REQUIRED
REST_REGISTRATION_FAILED 400 Bitrix24 refused to register the inbound webhook and gave no reason. The response carries error.details.incidentCode — a six-character support reference that locates the log entry
INT_TARIFF_REQUIRED 403 The account's Bitrix24 plan does not grant access, so the webhook is not issued. The response carries no upgrade link
PORTAL_TARIFF_UNREADABLE 403 The account plan could not be read, and the response does not name the plan that is missing: error.details.requiredTariffs is empty and the button points to support. Buying a plan does not clear this refusal
B24_INSUFFICIENT_SCOPE 403 The owner's developer key lacks the required rights on the account. Reconnect the account so the developer key is re-issued
B24_ACCESS_DENIED 403 Bitrix24 did not issue the webhook because of the employee's rights
CONNECTOR_KEY_ISSUE_FORBIDDEN 403 The account bars this employee from issuing keys. The right is granted by an account administrator. More — Creation rights
CONNECTOR_MODULE_NOT_INSTALLED 409 The connector module is not installed on the account, so a key cannot be issued through it. The state is permanent — retrying without installing the module will not help
B24_USER_DELETED 409 The key owner has been deleted from the Bitrix24 account — the key is not created
STALE_DEVELOPER_KEY 410 The owner's developer key is invalid and cannot be re-issued automatically. Reconnect the account
RECOVERY_FAILED 502 Re-issuing the developer key failed. The state is transient — retry the request
CONNECTOR_REST_UNAVAILABLE 502 The account's plan or trial period is active, but Bitrix24 refused the issuance. The original reason arrives in error.details.reason, and the state is transient
CONNECTOR_PLAN_REQUIRED 502 The Bitrix24 account plan does not include Vibecode, and there is nothing to offer — a self-hosted account, an account already on a paid plan, an unrecognized region. The human-readable cause arrives in error.userMessage. The state is permanent: retrying will not help until the plan changes
CONNECTOR_KEY_ISSUE_FAILED 502 Another refusal from the connector module, or its transport was unreachable. The original reason arrives in error.details.reason
DEVKEY_MINT_FAILED 502 Another issuance failure through the developer key. Diagnostics arrive in error.details.b24Code and error.details.b24Status
BITRIX_UNAVAILABLE 502 Bitrix24 did not respond to the incoming webhook registration

The 403, 409, 410 and 502 issuance refusals from the table above also arrive on POST /v1/keys/:id/rotate — both methods issue the key through the same path. The exception is 403 PORTAL_TARIFF_UNREADABLE: it is an outcome of the platform access check, which does not apply to rotation. A 402 reaches rotation only from the issuance itself — the second check described below — because the platform access check does not apply to rotation. The body of such a refusal carries an optional error.reason field with the exact cause in the platform's taxonomy, while error.code stays as it was. Branch on error.code, not on the message text.

The 402 INT_TARIFF_REQUIRED refusal comes from the Bitrix24 account access check: a commercial Bitrix24 plan grants full access, a trial plan grants limited access, and an account on a free plan is refused. That check applies to issuing a new key only: rotation via POST /v1/keys/:id/rotate, automatic key recovery and ownership handover are not subject to it, and already issued keys keep working. The same check has one outcome with status 403: when the account plan could not be read at all, it answers PORTAL_TARIFF_UNREADABLE, and in that state the platform has nothing to name as the required plan.

A second check runs later, and its reach is WIDER: Bitrix24 itself refuses the issuance because the account plan does not include Vibecode. It fires on everything that actually issues a key — creation, rotation via POST /v1/keys/:id/rotate, automatic key recovery and ownership handover. Where access can be purchased, the answer is 402 INT_VIBE_PLUS_REQUIRED; where there is nothing to offer, it is 502 CONNECTOR_PLAN_REQUIRED from the table above. Either code is terminal: retrying will not help until the Bitrix24 plan changes.

The placement, entity, and userfieldtype scopes are not kept on the success path either: a created personal key does not return them in the response scopes, even when they were sent alongside data scopes. userfieldconfig remains available.

`GET /v1/keys/:id` — single key data

Returns a single key record without its value. The field set is the same as for GET /v1/keys above.

Terminal
curl -H "X-Api-Key: vibe_live_abc123..." \
  https://vibecode.bitrix24.com/v1/keys/key-uuid

`PATCH /v1/keys/:id` — update a key

Any of the fields below can be changed (all optional — pass only what you are changing):

Field Type Description
name string Key name in the Vibecode dashboard
scopes string[] List of scopes — see Scopes
status "ACTIVE" | "REVOKED" Activate or revoke the key
ipWhitelist string[] List of allowed IP addresses
rateLimit number | null Custom request limit per second
expiresAt ISO-8601 | null Key expiration (null — never expires)

The new scopes list goes through the same check as on creation: if no data scope is left once placement, entity, and userfieldtype are dropped, 400 PERSONAL_KEY_WEBHOOK_SCOPES_INVALID arrives.

Keys the platform issues on its own endpoints come back into service under special rules. A key billed against the subscription is made active again through status and extended through expiresAt only while the issuance checks pass: a failing check answers 403 with its own code — the same five as on rotation; their table is in the POST /v1/keys/:id/rotate section below. The other such keys — a Cowork/Code desktop key, an agent key, a project deploy key — do not come back into service here at all: they are issued again where they were issued.

Code HTTP When returned
SYSTEM_KEY_REACTIVATE_FORBIDDEN 403 The request activates or extends the expiry of a key the platform issues on its own endpoint: a Cowork/Code desktop key, an agent key, a project deploy key. The response text says where that particular key is issued again
INFRA_DISABLED_FOR_PORTAL 403 The new scopes list adds vibe:infra, which the key did not carry, and the Bitrix24 account administrator has turned server management off. The key's scopes do not change. What counts is the addition, not the presence of the scope in the body: editing a key that already carries it goes through on a closed account too, and removing the scope is always allowed

Shortening the expiry, revoking and editing the other fields work as before — they stop a key rather than hand one out. Ordinary dashboard keys are unaffected by these checks.

Terminal
curl -X PATCH \
  -H "X-Api-Key: vibe_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"status": "REVOKED"}' \
  https://vibecode.bitrix24.com/v1/keys/key-uuid

`DELETE /v1/keys/:id` — delete a key

Deletes the key. If the key has active servers, 409 KEY_HAS_ACTIVE_SERVERS is returned — the servers must be deleted first. If an agent, a managed bot, or a regular chat-bot, including a disabled Bot Platform row, is managed through the key, deletion returns 409 KEY_HAS_LINKED_AGENT with details.linkedAgentCount, details.linkedBotCount (managed + regular chat-bots), a details.agents list, and details.bots (up to 10 regular chat-bots). For DELETE /v1/bots/:botId, take the numeric bitrixBotId from the matching details.bots item in the 409 response.

Terminal
curl -X DELETE \
  -H "X-Api-Key: vibe_live_abc123..." \
  https://vibecode.bitrix24.com/v1/keys/key-uuid

`POST /v1/keys/:id/rotate` — rotate a key

Creates a new key with the same settings and gives the old one a 24-hour transition period. After rotation, the old key automatically becomes invalid. The scopes are carried over from the previous key as they are — a new set is not passed here.

If the previous Bitrix24 account key is left with only application-context scopes — placement, entity, userfieldtype — rotation fails. The scope set is checked before the account is contacted, so every account receives the same refusal, 400 PERSONAL_KEY_WEBHOOK_SCOPES_INVALID. Add a data scope to the previous key through PATCH /v1/keys/:id first.

Rotation is subject to the same Bitrix24 plan requirement as key creation: on an account whose plan does not grant access, it answers 403 INT_TARIFF_REQUIRED. Every other issuance refusal is the same as on creation — see the code table under POST /v1/keys above. Only the 402 variant of INT_TARIFF_REQUIRED is out of scope for rotation: the platform access check applies to issuing a new key. Already issued keys keep working, and rotation resumes as soon as the account is on a qualifying plan.

Terminal
curl -X POST \
  -H "X-Api-Key: vibe_live_abc123..." \
  https://vibecode.bitrix24.com/v1/keys/key-uuid/rotate

Keys the platform issues on its own endpoints rotate under special rules. For a key billed against the subscription, the scope carry-over is not unconditional: before rotation the same checks run as when the key was issued, and a failing check answers 403 with its own code. The other such keys — a Cowork/Code desktop key, an agent key, a project deploy key — are not rotated here at all: they are issued again where they were issued. In all these cases the previous key keeps working.

Code HTTP When returned
SYSTEM_KEY_ROTATE_FORBIDDEN 403 The key being rotated is one the platform issues on its own endpoint: a Cowork/Code desktop key, an agent key, a project deploy key. The response text says where that particular key is issued again
COWORK_HARNESS_DISABLED 403 Issuing subscription keys for third-party agents is disabled on the platform
COWORK_PLATFORM_DISABLED 403 Cowork/Code is disabled at the platform level
COWORK_ACCESS_REQUIRED 403 The key owner has not been granted Cowork/Code access
COWORK_EXTERNAL_CLIENTS_DISABLED 403 The account administrator has disallowed third-party clients
COWORK_SUBSCRIPTION_INACTIVE 403 The Cowork/Code subscription is paused or cancelled

Ordinary dashboard keys are unaffected by these checks — they rotate as before. What a subscription key can do and how to issue one — Your own agent on the subscription.

`GET /v1/feedback` — feedback ticket list

Returns all feedback tickets on the platform. Supports filters by status, category, and Bitrix24 account, plus pagination.

Terminal
curl -H "X-Api-Key: vibe_live_abc123..." \
  "https://vibecode.bitrix24.com/v1/feedback?status=NEW&page=1&limit=50"

`GET /v1/feedback/:id` — ticket card

Returns the ticket with the full comment thread.

`PATCH /v1/feedback/:id` — update a ticket

Changes the ticket status and resolution.

`POST /v1/feedback/:id/comments` — comment on a ticket

Adds a team comment to the thread and changes the status at the same time. Used by AI models to reply to the user.

Ticket statuses

Status When applied
NEW The user has just submitted the ticket, no one has looked at it yet
REVIEWING The team has started working on the ticket, the user is not yet receiving updates
AWAITING_USER The team asked the user a clarifying question — awaiting a reply (the user receives an email)
NEEDS_REVIEW The user replied to the clarification — the team reads the new comment and decides the next step
RESOLVED The fix is published in the production environment, the user has been notified
ARCHIVED Closed without a code change (duplicate, off-topic, not reproducible)
WITHDRAWN The author withdrew the ticket themselves, no triage is needed

A user's reply moves a ticket out of AWAITING_USER into NEEDS_REVIEW. A resolved ticket (RESOLVED) is brought back into the queue by an author reply — the status also becomes NEEDS_REVIEW, the closure stamp (resolvedAt, resolvedBy) is cleared, and the resolution text is kept. On NEW, REVIEWING and NEEDS_REVIEW the status is preserved, because the next move is the team's anyway. The updatedAt field is always refreshed, so a queue sorted by it surfaces new replies regardless of status.

Ticket categories

BUG, SUGGESTION, DOCS, CHAT, BOTS, OTHER.

List filters

?status=NEW&category=BUG&portalId=<uuid>&page=1&limit=50. The limit parameter is capped at 100.

Quickstart

  1. Create a management key in the Vibecode dashboard (the "Management Keys" section)
  2. Get the Bitrix24 account list: GET /v1/portals
  3. View the existing keys in the target Bitrix24 account: GET /v1/keys?portalId=<id>
  4. Create an API key with the required scopes: POST /v1/keys { portalId, name, scopes }
  5. Use the resulting API key (vibe_api_…) to work with Bitrix24 data

Limitations

  • Management keys cannot call Bitrix24 entity endpoints (/v1/deals, /v1/tasks, and others)
  • To work with data, use an API key (vibe_api_) or an authorization key (vibe_app_)
  • An attempt to call an unsupported endpoint returns 403 MANAGEMENT_KEY_NO_ENTITY_ACCESS

See also