Skip to content

Authentication and scopes

bk_live_* keys, the key lifecycle and the scope matrix required per operation.

1 min read 3 sections

Every request is made with an Authorization: Bearer bk_live_… header. The Developer API only accepts live keys; there is no sandbox key or separate test data path.

http
Authorization: Bearer bk_live_…

Ownership#

The gateway has the Auth service verify the key and forwards only the verified key owner to the Link API. An ownerId, userId or extra scope values in the request body or query cannot change ownership; every query and mutation is limited to the key owner's resources.

Scope matrix#

OperationRequired scope
Reading links, trees, boards, folders and routes; reading QR; platform cataloglinks:read
Create/update, route condition/target/feature changes, writing QRlinks:write
Deleting links, trees, boards, folders and route sub-resourceslinks:delete
GET /api/v1/links/:id/analyticsanalytics:read
Reading domain metadatadomains:read

If a scope is missing, 403 is returned. Undefined public paths are rejected by default (deny-by-default).

Key lifecycle#

MethodPathDescription
GET/v1/developer/api-keysMetadata list of your keys (no secrets).
POST/v1/developer/api-keysNew key with name, scopes and an optional expiresAt.
POST/v1/developer/api-keys/:id/rotateInvalidates the old key and issues a new secret with the same scopes/expiry.
DELETE/v1/developer/api-keys/:idRevokes the key.

These endpoints are session-protected; the Developer console performs the same operations from the UI. You can have multiple active keys; if expiresAt is not provided, the key never expires.

Do not write the secret to browser storage, logs or URLs. When contacting support, share the X-Request-Id from the response instead of the key.

Is something missing or wrong? Write to the support team; including the X-Request-Id value from the response speeds up the fix.