Environment actions
The environment plane is everything inside one environment: its organizations, users, applications, APIs, keys, sign-in configuration and governance. It is served on the environment's own host.
Every row below is one action, reached through four doors that run the same code, with the same authorization, validation, approvals and Audit log entry: the console, the REST API, the MCP server and the cbox CLI. See Actions for how that works and Planes and hosts for where each plane is served.
|
|
| REST |
https://<environment-host>/api/v1/… with Authorization: Bearer cbid_env_… (a secret key of that environment), or a token a person delegated. At the platform root, a team member's token names the environment in a Cbox-Environment header |
| MCP |
/mcp on the environment's host. At the platform root's /mcp, every environment tool takes an environment argument (an id or slug from whoami) |
| CLI |
cbox login, cbox id use <environment>, then the command below — or CBOX_ID_ENDPOINT + CBOX_ID_TOKEN=cbid_env_… for CI |
| OpenAPI |
/api/v1/environment/openapi.yaml on the host above — public, no key needed (source); every operation carries x-action, x-scope and x-danger |
Danger is how much harm the action can do in the wrong hands: read only reads; write changes something another write can undo; destructive removes or revokes; critical mints credentials, takes over access or changes how people sign in. MCP clients are told a destructive or critical tool is destructive, the CLI asks before running one, and an approval policy keys on it.
Contents
| Area |
Actions |
| Admin Portal |
organizations.portal_links.create, organizations.portal_links.list, organizations.portal_links.revoke |
| API keys |
api_keys.list, api_keys.revoke |
| APIs |
apis.create, apis.delete, apis.get, apis.list, apis.scopes.define, apis.scopes.remove, apis.update |
| App audit logs |
audit_logs.events.create, audit_logs.events.list, audit_logs.exports.create, audit_logs.exports.get, audit_logs.schemas.create, audit_logs.schemas.delete, audit_logs.schemas.get, audit_logs.schemas.list, audit_logs.schemas.update, audit_logs.settings.get, audit_logs.settings.update, audit_logs.verify |
| Applications |
apps.blueprint, apps.copy, apps.create, apps.delete, apps.get, apps.list, apps.manifest.set, apps.manifest.sync, apps.scopes.set, apps.secrets.list, apps.secrets.revoke, apps.secrets.rotate, apps.settings.api_key_prefix, apps.settings.backchannel_logout, apps.settings.token_exchange, apps.settings.token_lifetime, apps.update |
| Approvals |
approvals.deny, approvals.list |
| Audit log |
audit.list |
| Branding |
branding.appearance.get, branding.appearance.set, branding.whitelabel.get, branding.whitelabel.set |
| Directory Sync |
directories.connect, directories.create, directories.delete, directories.get, directories.groups.list, directories.groups.map, directories.list, directories.status.set, directories.token.rotate, directories.update |
| Domains |
domains.add, domains.get, domains.remove, domains.verify |
| Enterprise SSO |
sso.connections.activate, sso.connections.certificates.activate, sso.connections.certificates.list, sso.connections.certificates.stage, sso.connections.create, sso.connections.delete, sso.connections.disable, sso.connections.get, sso.connections.list, sso.connections.require_sso, sso.connections.update, sso.domains.capture, sso.domains.create, sso.domains.delete, sso.domains.list, sso.domains.verify, sso.saml_metadata.import |
| Events |
events.list |
| Governance |
access_reviews.close, access_reviews.create, access_reviews.get, access_reviews.items.decide, access_reviews.items.list, access_reviews.list, sod_policies.create, sod_policies.delete, sod_policies.get, sod_policies.list, sod_policies.status.set |
| Hooks |
hooks.create, hooks.delete, hooks.get, hooks.list, hooks.update |
| Invitations |
invitations.list, invitations.resend, invitations.revoke, invitations.send |
| Legacy login |
legacy_login.approve, legacy_login.get, legacy_login.probe, legacy_login.revoke |
| Log streams |
log_streams.create, log_streams.delete, log_streams.get, log_streams.list, log_streams.test, log_streams.update |
| Members |
members.add, members.list, members.remove, members.update |
| Organizations |
organizations.create, organizations.delete, organizations.domains.add, organizations.domains.capture, organizations.domains.list, organizations.domains.remove, organizations.domains.verify, organizations.get, organizations.list, organizations.reactivate, organizations.suspend, organizations.transfer_ownership, organizations.update |
| Outbound provisioning |
provisioning.targets.create, provisioning.targets.delete, provisioning.targets.get, provisioning.targets.list, provisioning.targets.status.set |
| Publishable keys |
frontend_keys.create, frontend_keys.list, frontend_keys.revoke, frontend_keys.set_origins |
| Roles |
members.roles.grant, members.roles.list, members.roles.revoke, permissions.create, permissions.delete, permissions.list, permissions.update, roles.create, roles.delete, roles.get, roles.list, roles.permissions.grant, roles.permissions.revoke, roles.update, users.environment_roles.get, users.environment_roles.grant, users.environment_roles.list, users.environment_roles.revoke |
| SAML apps |
saml_apps.create, saml_apps.delete, saml_apps.get, saml_apps.list, saml_apps.update |
| Secret keys |
keys.create, keys.list, keys.revoke, keys.rotate |
| Sign-in |
signin.policy.get, signin.policy.inherit, signin.policy.update, signin.self_service_signup.set, signin.social.delete, signin.social.list, signin.social.set |
| Support sessions |
support_sessions.end, support_sessions.start |
| Token vault |
token_vault.grants.create, token_vault.grants.delete, token_vault.secrets.create, token_vault.secrets.get, token_vault.secrets.list, token_vault.secrets.revoke, token_vault.secrets.rotate |
| Users |
users.create, users.deactivate, users.erase, users.get, users.list, users.mfa.reset, users.password.set, users.password_reset.send, users.reactivate, users.sessions.list, users.sessions.revoke, users.sessions.revoke_all, users.update, users.verification.send, users.verify |
| Webhooks |
webhooks.create, webhooks.delete, webhooks.get, webhooks.list, webhooks.pause, webhooks.resume, webhooks.secret.rotate, webhooks.signature_scheme.change, webhooks.update |
Admin Portal
organizations.portal_links.create
Create a one-time Admin Portal link an organization's IT administrator uses to set up SSO, directory sync, domain verification, log streams or SAML certificate renewal, or to read its audit logs, without an account. The URL is shown once.
|
|
| REST |
POST /api/v1/organizations/{organization_id}/portal-links → 201 |
| Scope |
portal_links:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
organizations_portal_links_create |
| CLI |
cbox id organizations portal_links create <organization_id> |
| Secret |
data.url — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization the link sets up. At most 64 characters. |
intents |
list of string |
yes |
What the link may set up: sso (connection and email domains), dsync (directory sync over SCIM), domain_verification, log_streams, certificate_renewal (a SAML connection's signing certificate), audit_logs (the organization's audit events, read-only, with CSV export). At least 1 items. |
expires_in_minutes |
integer, nullable |
no |
How long the link may wait to be opened, in minutes — 5 to 10080 (a week). Left out, the deployment's default (30). At least 5. At most 10080. |
email |
string (email), nullable |
no |
Mail the link to this address — the customer's IT contact. Left out, nothing is sent. At most 254 characters. |
locale |
string, nullable |
no |
The language of that mail. Left out, the environment's default language. One of en, da, de, sv, nb, fr. |
organizations.portal_links.list
List an organization's Admin Portal links from the last 30 days, newest first: what each opens, who minted it, whom it was mailed to, and whether it is pending, in use, completed, expired or revoked. Never the URL.
|
|
| REST |
GET /api/v1/organizations/{organization_id}/portal-links → 200 |
| Scope |
portal_links:read — required of the key or token. |
| Danger |
read |
| MCP tool |
organizations_portal_links_list |
| CLI |
cbox id organizations portal_links list <organization_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
organizations.portal_links.revoke
Withdraw an Admin Portal link: it can no longer be opened, and a setup session it already opened ends on its next request. What was already set up through it stays.
|
|
| REST |
DELETE /api/v1/organizations/{organization_id}/portal-links/{id} → 204 |
| Scope |
portal_links:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
organizations_portal_links_revoke |
| CLI |
cbox id organizations portal_links revoke <organization_id> <id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
id |
string (path) |
yes |
The portal link's id. At most 64 characters. |
API keys
api_keys.list
List the API keys an organization's members created for your apps, a page at a time. Never the key material.
|
|
| REST |
GET /api/v1/organizations/{organization_id}/api-keys → 200 |
| Scope |
api_keys:read — required of the key or token. |
| Danger |
read |
| MCP tool |
api_keys_list |
| CLI |
cbox id api_keys list <organization_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
client_id |
string |
no |
Only the keys for this app's API. At most 255 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
api_keys.revoke
Revoke an API key an organization's member created for your app. Whatever uses it stops working at once.
|
|
| REST |
DELETE /api/v1/api-keys/{id} → 204 |
| Scope |
api_keys:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
api_keys_revoke |
| CLI |
cbox id api_keys revoke <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The API key id. At most 64 characters. |
organization_id |
string, nullable |
no |
The organization it must belong to; a key elsewhere is not found. At most 64 characters. |
APIs
apis.create
Register an API (resource server): its identifier becomes the access token audience, and it owns its scopes.
|
|
| REST |
POST /api/v1/apis → 201 |
| Scope |
apis:write — required of the key or token. |
| Danger |
write |
| MCP tool |
apis_create |
| CLI |
cbox id apis create |
| Input |
Type |
Required |
Description |
identifier |
string (uri) |
yes |
An absolute URI (RFC 8707), for example https://api.example.com. Becomes the token aud. At most 255 characters. |
name |
string |
yes |
At most 120 characters. |
organization_id |
string, nullable |
no |
Make it one organization's API. Left out, the environment owns it. At most 64 characters. |
client_id |
string, nullable |
no |
The app whose roles and permissions the API enforces. Must have the API's owner. At most 255 characters. |
scopes |
list of object |
no |
At most 200 items. |
scopes[].key |
string |
yes |
The scope key, unique across the environment: tax:assess. At most 128 characters. |
scopes[].description |
string, nullable |
no |
What the scope lets an app do, in plain words. At most 255 characters. |
scopes[].tenant_requestable |
boolean |
no |
Whether organizations' own apps may request it. Default true. |
apis.delete
Delete an API and its scopes. Existing tokens keep their audience until they expire.
|
|
| REST |
DELETE /api/v1/apis/{id} → 204 |
| Scope |
apis:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
apis_delete |
| CLI |
cbox id apis delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The API id. |
apis.get
Get one registered API and its scopes.
|
|
| REST |
GET /api/v1/apis/{id} → 200 |
| Scope |
apis:read — required of the key or token. |
| Danger |
read |
| MCP tool |
apis_get |
| CLI |
cbox id apis get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The API id. |
apis.list
List the APIs (resource servers) registered in this environment, with their scopes.
|
|
| REST |
GET /api/v1/apis → 200 |
| Scope |
apis:read — required of the key or token. |
| Danger |
read |
| MCP tool |
apis_list |
| CLI |
cbox id apis list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
apis.scopes.define
Add a scope to an API, or change the description or tenant access of one it owns.
|
|
| REST |
PUT /api/v1/apis/{id}/scopes/{key} → 200 |
| Scope |
apis:write — required of the key or token. |
| Danger |
write |
| MCP tool |
apis_scopes_define |
| CLI |
cbox id apis scopes define <id> <key> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The API id. |
key |
string (path) |
yes |
The scope key: tax:assess. At most 128 characters. |
description |
string, nullable |
no |
At most 255 characters. |
tenant_requestable |
boolean |
no |
Whether organizations' own apps may request it. Default true. |
apis.scopes.remove
Remove a scope from an API. Apps holding it keep it as a plain scope that no longer reaches the API.
|
|
| REST |
DELETE /api/v1/apis/{id}/scopes/{key} → 204 |
| Scope |
apis:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
apis_scopes_remove |
| CLI |
cbox id apis scopes remove <id> <key> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The API id. |
key |
string (path) |
yes |
The scope key. At most 128 characters. |
apis.update
Rename an API, link or unlink its app, and optionally replace its complete scope set.
|
|
| REST |
PATCH /api/v1/apis/{id} → 200 |
| Scope |
apis:write — required of the key or token. |
| Danger |
write |
| MCP tool |
apis_update |
| CLI |
cbox id apis update <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The API id. |
name |
string |
no |
At most 120 characters. |
client_id |
string, nullable |
no |
The app to link; null unlinks it. Left out, the link is unchanged. At most 255 characters. |
scopes |
list of object |
no |
The COMPLETE scope set afterwards. Left out, scopes are unchanged. At most 200 items. |
scopes[].key |
string |
yes |
The scope key, unique across the environment: tax:assess. At most 128 characters. |
scopes[].description |
string, nullable |
no |
What the scope lets an app do, in plain words. At most 255 characters. |
scopes[].tenant_requestable |
boolean |
no |
Whether organizations' own apps may request it. Default true. |
App audit logs
audit_logs.events.create
Record 1–100 audit events your app's users caused, each for one of your organizations (customers); checked against the action's schema when it has one and appended to that organization's tamper-evident chain. Send an Idempotency-Key.
|
|
| REST |
POST /api/v1/audit-logs/events → 201 |
| Scope |
audit_logs:write — required of the key or token. |
| Danger |
write |
| MCP tool |
audit_logs_events_create |
| CLI |
cbox id audit_logs events create |
| Input |
Type |
Required |
Description |
events |
list of object |
yes |
1–100 events, recorded all together or not at all. At least 1 items. At most 100 items. |
events[].organization_id |
string |
yes |
The organization (your customer) the event happened in. At most 64 characters. |
events[].action |
string |
yes |
What happened, as dotted words: invoice.voided, user.signed_in. At most 190 characters. |
events[].occurred_at |
string (date-time) |
yes |
When it happened: ISO 8601 with a time zone, to the millisecond. |
events[].actor |
object |
yes |
|
events[].actor.id |
string |
yes |
Your id for whoever did it. At most 190 characters. |
events[].actor.type |
string |
yes |
What kind of actor: user, api_key, system. At most 100 characters. |
events[].actor.name |
string, nullable |
no |
A name a person reads in the log. At most 190 characters. |
events[].actor.metadata |
object |
no |
Up to 50 names to strings, numbers, booleans or null. |
events[].targets |
list of object |
no |
What it was done to. At most 50 items. |
events[].targets[].id |
string |
yes |
At most 190 characters. |
events[].targets[].type |
string |
yes |
What kind of thing: invoice, user, report. At most 100 characters. |
events[].targets[].name |
string, nullable |
no |
At most 190 characters. |
events[].targets[].metadata |
object |
no |
|
events[].context |
object |
no |
|
events[].context.location |
string, nullable |
no |
Where it came from — usually the client's IP address. At most 64 characters. |
events[].context.user_agent |
string, nullable |
no |
At most 512 characters. |
events[].metadata |
object |
no |
Up to 50 names to strings, numbers, booleans or null; values up to 500 characters. |
audit_logs.events.list
Read audit events newest first, for one organization or the whole environment, filtered by action, actor, target and time range; pass next_cursor as after to page.
|
|
| REST |
GET /api/v1/audit-logs/events → 200 |
| Scope |
audit_logs:read — required of the key or token. |
| Danger |
read |
| MCP tool |
audit_logs_events_list |
| CLI |
cbox id audit_logs events list |
| Input |
Type |
Required |
Description |
organization_id |
string |
no |
Only this organization's events. Required in effect for an organization's own administrator, whose events are the only ones they see. At most 64 characters. |
actions |
list of string |
no |
Only these actions, e.g. invoice.voided. At most 50 items. |
actor_id |
string |
no |
Only events this actor caused. At most 190 characters. |
target_id |
string |
no |
Only events naming this target. At most 190 characters. |
range_start |
string (date-time) |
no |
Only events that occurred at or after this time. |
range_end |
string (date-time) |
no |
Only events that occurred before this time. |
order |
string |
no |
desc (default) for newest first, asc for oldest first. One of desc, asc. |
limit |
integer |
no |
Events per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. At most 200 characters. |
audit_logs.exports.create
Start a CSV export of audit events (same filters as the list). It is written on the queue: poll audit_logs.exports.get until state is ready, then download from its short-lived url.
|
|
| REST |
POST /api/v1/audit-logs/exports → 201 |
| Scope |
audit_logs:export — required of the key or token. |
| Danger |
write |
| MCP tool |
audit_logs_exports_create |
| CLI |
cbox id audit_logs exports create |
| Secret |
data.url — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
organization_id |
string |
no |
Only this organization's events. Required in effect for an organization's own administrator, whose events are the only ones they see. At most 64 characters. |
actions |
list of string |
no |
Only these actions, e.g. invoice.voided. At most 50 items. |
actor_id |
string |
no |
Only events this actor caused. At most 190 characters. |
target_id |
string |
no |
Only events naming this target. At most 190 characters. |
range_start |
string (date-time) |
no |
Only events that occurred at or after this time. |
range_end |
string (date-time) |
no |
Only events that occurred before this time. |
audit_logs.exports.get
Read an audit-log export's state; once ready it carries a signed download url valid for a few minutes (read it again for a fresh one).
|
|
| REST |
GET /api/v1/audit-logs/exports/{id} → 200 |
| Scope |
audit_logs:read — required of the key or token. |
| Danger |
read |
| MCP tool |
audit_logs_exports_get |
| CLI |
cbox id audit_logs exports get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The export id. At most 64 characters. |
audit_logs.schemas.create
Define the schema one audit-log action's events must match — allowed target types and metadata schemas (a subset of JSON Schema). Events of that action are then validated on arrival.
|
|
| REST |
POST /api/v1/audit-logs/schemas → 201 |
| Scope |
audit_logs:manage — required of the key or token. |
| Danger |
write |
| MCP tool |
audit_logs_schemas_create |
| CLI |
cbox id audit_logs schemas create |
| Input |
Type |
Required |
Description |
action |
string |
yes |
The action this schema is for, e.g. invoice.voided. At most 190 characters. |
targets |
list of object, nullable |
no |
The target types this action's events may name, each with an optional metadata schema. Leave out to allow any. At most 50 items. |
targets[].type |
string |
yes |
A target type events of this action may name. At most 100 characters. |
targets[].metadata |
object |
no |
A metadata schema for targets of this type. |
actor_metadata |
object |
no |
A metadata schema (a subset of JSON Schema) for the actor's metadata. |
metadata |
object |
no |
A metadata schema (a subset of JSON Schema) for the event's own metadata. |
audit_logs.schemas.delete
Delete an audit-log action's schema. Its events are then accepted unchecked — or refused, if the environment is in strict mode.
|
|
| REST |
DELETE /api/v1/audit-logs/schemas/{action} → 204 |
| Scope |
audit_logs:manage — required of the key or token. |
| Danger |
destructive |
| MCP tool |
audit_logs_schemas_delete |
| CLI |
cbox id audit_logs schemas delete <action> |
| Input |
Type |
Required |
Description |
action |
string (path) |
yes |
The action whose schema to delete. At most 190 characters. |
audit_logs.schemas.get
Read the schema one audit-log action's events are validated against.
|
|
| REST |
GET /api/v1/audit-logs/schemas/{action} → 200 |
| Scope |
audit_logs:read — required of the key or token. |
| Danger |
read |
| MCP tool |
audit_logs_schemas_get |
| CLI |
cbox id audit_logs schemas get <action> |
| Input |
Type |
Required |
Description |
action |
string (path) |
yes |
The action, e.g. invoice.voided. At most 190 characters. |
audit_logs.schemas.list
List the audit-log schemas this environment validates events against, one per action.
|
|
| REST |
GET /api/v1/audit-logs/schemas → 200 |
| Scope |
audit_logs:read — required of the key or token. |
| Danger |
read |
| MCP tool |
audit_logs_schemas_list |
| CLI |
cbox id audit_logs schemas list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
audit_logs.schemas.update
Replace an audit-log action's schema with a new version (omitted parts are removed). Recorded events keep the version they were checked against.
|
|
| REST |
PUT /api/v1/audit-logs/schemas/{action} → 200 |
| Scope |
audit_logs:manage — required of the key or token. |
| Danger |
write |
| MCP tool |
audit_logs_schemas_update |
| CLI |
cbox id audit_logs schemas update <action> |
| Input |
Type |
Required |
Description |
action |
string (path) |
yes |
The action whose schema to replace. At most 190 characters. |
targets |
list of object, nullable |
no |
The target types this action's events may name, each with an optional metadata schema. Leave out to allow any. At most 50 items. |
targets[].type |
string |
yes |
A target type events of this action may name. At most 100 characters. |
targets[].metadata |
object |
no |
A metadata schema for targets of this type. |
actor_metadata |
object |
no |
A metadata schema (a subset of JSON Schema) for the actor's metadata. |
metadata |
object |
no |
A metadata schema (a subset of JSON Schema) for the event's own metadata. |
audit_logs.settings.get
Read this environment's audit-log settings: retention in days and whether strict schemas are on.
|
|
| REST |
GET /api/v1/audit-logs/settings → 200 |
| Scope |
audit_logs:read — required of the key or token. |
| Danger |
read |
| MCP tool |
audit_logs_settings_get |
| CLI |
cbox id audit_logs settings get |
Takes no input.
audit_logs.settings.update
Change this environment's audit-log retention (days, 1–3650) and strict mode. Shortening retention deletes older events at the next daily prune — irreversibly.
|
|
| REST |
PATCH /api/v1/audit-logs/settings → 200 |
| Scope |
audit_logs:manage — required of the key or token. |
| Danger |
destructive |
| MCP tool |
audit_logs_settings_update |
| CLI |
cbox id audit_logs settings update |
| Input |
Type |
Required |
Description |
retention_days |
integer |
no |
Keep events this many days after they arrive. At least 1. At most 3650. |
strict_schemas |
boolean |
no |
Refuse events whose action has no schema. |
audit_logs.verify
Re-hash one organization's audit-event chain (from the oldest event retention kept, or from_sequence) and report whether every event is unchanged and in place.
|
|
| REST |
GET /api/v1/audit-logs/verify → 200 |
| Scope |
audit_logs:read — required of the key or token. |
| Danger |
read |
| MCP tool |
audit_logs_verify |
| CLI |
cbox id audit_logs verify |
| Input |
Type |
Required |
Description |
organization_id |
string |
no |
The organization whose chain to verify. An organization's own administrator may leave it out. At most 64 characters. |
from_sequence |
integer |
no |
Start here rather than at the oldest event kept. At least 1. |
limit |
integer |
no |
Verify at most this many events. Default 10,000. At least 1. At most 10000. |
Applications
apps.blueprint
Export an app's configuration as a blueprint — no client id, secret, key set or owner — to register the same app in another environment.
|
|
| REST |
GET /api/v1/apps/{id}/blueprint → 200 |
| Scope |
apps:read — required of the key or token. |
| Danger |
read |
| MCP tool |
apps_blueprint |
| CLI |
cbox id apps blueprint <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
apps.copy
Copy an app into another environment of this project, with a new client id and secret there. A person on the environment console only; a key exports the blueprint instead.
|
|
| REST |
POST /api/v1/apps/{id}/copy → 201 |
| Scope |
apps:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
apps_copy |
| CLI |
cbox id apps copy <id> |
| Secret |
data.client_secret — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
environment_id |
string |
yes |
The environment to copy into: another environment of this project. At most 64 characters. |
name |
string |
yes |
What to call the copy there. At least 1 characters. At most 190 characters. |
redirect_uris |
list of string |
no |
Its redirect URIs there — staging's callback is rarely production's. Left out, none. At most 50 items. |
apps.create
Register an app (OAuth client) from a short form (name and type) or from another environment's blueprint. A confidential app's client_secret is returned once.
|
|
| REST |
POST /api/v1/apps → 201 |
| Scope |
apps:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
apps_create |
| CLI |
cbox id apps create |
| Secret |
data.client_secret — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
blueprint |
object |
no |
A blueprint document from GET /apps/{id}/blueprint. Left out, the short form below describes the app. |
name |
string |
no |
Required without a blueprint; beside one, it replaces the blueprint's. At most 190 characters. |
type |
string |
no |
The kind of app. Default web. One of web, spa, cli, service, agent, advanced. |
client_type |
string |
no |
Required for advanced. One of public, confidential. |
grant_types |
list of string |
no |
Required for advanced. |
redirect_uris |
list of string |
no |
At most 50 items. |
post_logout_redirect_uris |
list of string |
no |
At most 50 items. |
scopes |
list of string |
no |
Left out, the kind's default scopes. At most 100 items. |
first_party |
boolean |
no |
Skips the consent screen. Default false. |
manifest_url |
string (uri), nullable |
no |
Where the app publishes its roles-and-permissions manifest. At most 500 characters. |
organization_id |
string, nullable |
no |
The owning organization; null for the environment's own app. At most 64 characters. |
jwks |
object |
no |
A public JWK Set, for a private_key_jwt app. Never part of a blueprint. |
apps.delete
Delete an app and every secret it holds. Anything signing in as it stops working immediately.
|
|
| REST |
DELETE /api/v1/apps/{id} → 204 |
| Scope |
apps:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
apps_delete |
| CLI |
cbox id apps delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
apps.get
Get one app (OAuth client) by its id or its client_id: its kind, grants, redirect URIs, scopes and settings. Never a secret.
|
|
| REST |
GET /api/v1/apps/{id} → 200 |
| Scope |
apps:read — required of the key or token. |
| Danger |
read |
| MCP tool |
apps_get |
| CLI |
cbox id apps get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
apps.list
List the apps (OAuth clients) registered in this environment. Never a secret.
|
|
| REST |
GET /api/v1/apps → 200 |
| Scope |
apps:read — required of the key or token. |
| Danger |
read |
| MCP tool |
apps_list |
| CLI |
cbox id apps list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
apps.manifest.set
Set or clear the URL an app publishes its roles-and-permissions manifest at. Does not fetch it; apps.manifest.sync does.
|
|
| REST |
PUT /api/v1/apps/{id}/manifest → 200 |
| Scope |
apps:write — required of the key or token. |
| Danger |
write |
| MCP tool |
apps_manifest_set |
| CLI |
cbox id apps manifest set <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
manifest_url |
string (uri), nullable |
no |
An absolute URL; null or left out clears it. At most 500 characters. |
apps.manifest.sync
Fetch an app's published manifest now and sync the roles and permissions it declares.
|
|
| REST |
POST /api/v1/apps/{id}/manifest/sync → 200 |
| Scope |
apps:write — required of the key or token. |
| Danger |
write |
| MCP tool |
apps_manifest_sync |
| CLI |
cbox id apps manifest sync <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
apps.scopes.set
Replace an app's complete scope set — the ceiling of what it may request, applied from its next token.
|
|
| REST |
PUT /api/v1/apps/{id}/scopes → 200 |
| Scope |
apps:write — required of the key or token. |
| Danger |
write |
| MCP tool |
apps_scopes_set |
| CLI |
cbox id apps scopes set <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
scopes |
list of string |
no |
Required. The COMPLETE scope set afterwards; an empty list removes every scope. At most 200 items. |
apps.secrets.list
List an app's live client secrets — ids, last characters and dates, never the secrets themselves.
|
|
| REST |
GET /api/v1/apps/{id}/secrets → 200 |
| Scope |
apps:read — required of the key or token. |
| Danger |
read |
| MCP tool |
apps_secrets_list |
| CLI |
cbox id apps secrets list <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
apps.secrets.revoke
Revoke one of an app's client secrets immediately. Never its last live secret — rotate that instead.
|
|
| REST |
DELETE /api/v1/apps/{id}/secrets/{secret_id} → 204 |
| Scope |
apps:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
apps_secrets_revoke |
| CLI |
cbox id apps secrets revoke <id> <secret_id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
secret_id |
string (path) |
yes |
The secret's id, from GET /apps/{id}/secrets. At most 64 characters. |
apps.secrets.rotate
Mint a new client secret for an app and retire the current ones after grace_seconds (0 = at once). The new secret is returned once.
|
|
| REST |
POST /api/v1/apps/{id}/secrets → 201 |
| Scope |
apps:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
apps_secrets_rotate |
| CLI |
cbox id apps secrets rotate <id> |
| Secret |
data.client_secret — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
grace_seconds |
integer |
yes |
How long the current secrets keep working, in seconds. 0 stops them at once. At least 0. At most 2592000. |
apps.settings.api_key_prefix
Set the prefix of an app's customer API keys (acme_live), which lets its users create keys for it, or null to stop new keys.
|
|
| REST |
PUT /api/v1/apps/{id}/settings/api-key-prefix → 200 |
| Scope |
apps:write — required of the key or token. |
| Danger |
write |
| MCP tool |
apps_settings_api_key_prefix |
| CLI |
cbox id apps settings api_key_prefix <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
prefix |
string, nullable |
no |
2–16 lowercase letters or digits starting with a letter, then _live or _test. Null or left out: no new keys. At most 32 characters. |
apps.settings.backchannel_logout
Set or clear the URI an app is sent a logout token at when somebody signs out (OIDC Back-Channel Logout).
|
|
| REST |
PUT /api/v1/apps/{id}/settings/backchannel-logout → 200 |
| Scope |
apps:write — required of the key or token. |
| Danger |
write |
| MCP tool |
apps_settings_backchannel_logout |
| CLI |
cbox id apps settings backchannel_logout <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
uri |
string (uri), nullable |
no |
HTTPS (HTTP on localhost only). Null or left out: the app is not told. At most 2000 characters. |
session_required |
boolean |
no |
Every logout token carries sid. Default false. |
apps.settings.token_exchange
Turn token exchange (RFC 8693) on or off for a confidential app.
|
|
| REST |
PUT /api/v1/apps/{id}/settings/token-exchange → 200 |
| Scope |
apps:write — required of the key or token. |
| Danger |
write |
| MCP tool |
apps_settings_token_exchange |
| CLI |
cbox id apps settings token_exchange <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
enabled |
boolean |
yes |
|
apps.settings.token_lifetime
Set how long an app's access tokens live, in seconds, or null for the install's default.
|
|
| REST |
PUT /api/v1/apps/{id}/settings/token-lifetime → 200 |
| Scope |
apps:write — required of the key or token. |
| Danger |
write |
| MCP tool |
apps_settings_token_lifetime |
| CLI |
cbox id apps settings token_lifetime <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
access_token_ttl |
integer, nullable |
no |
Seconds, from 60 to the install's ceiling. Null or left out: the install's default. |
apps.update
Rename an app and replace its redirect URIs or sign-out redirect URIs. Fields left out are unchanged.
|
|
| REST |
PATCH /api/v1/apps/{id} → 200 |
| Scope |
apps:write — required of the key or token. |
| Danger |
write |
| MCP tool |
apps_update |
| CLI |
cbox id apps update <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The app's id, or its client_id. |
name |
string |
no |
At least 1 characters. At most 190 characters. |
redirect_uris |
list of string |
no |
The COMPLETE list afterwards. At most 50 items. |
post_logout_redirect_uris |
list of string |
no |
The COMPLETE list afterwards. At most 50 items. |
Approvals
approvals.deny
Deny a pending approval request (CIBA) for the person it was raised for: the agent gets access_denied and no token.
|
|
| REST |
POST /api/v1/agent-requests/{request_id}/deny → 204 |
| Scope |
approvals:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
approvals_deny |
| CLI |
cbox id approvals deny <request_id> |
| Input |
Type |
Required |
Description |
request_id |
string (path) |
yes |
|
approvals.list
List the pending requests from agents to act as one of this environment's people (CIBA): which app, for whom, and what it asks.
|
|
| REST |
GET /api/v1/agent-requests → 200 |
| Scope |
approvals:read — required of the key or token. |
| Danger |
read |
| MCP tool |
approvals_list |
| CLI |
cbox id approvals list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
Audit log
audit.list
Read this environment's audit trail oldest first, optionally narrowed by action, actor type or organization; pass the last id as after to page.
|
|
| REST |
GET /api/v1/audit-log → 200 |
| Scope |
audit:read — required of the key or token. |
| Danger |
read |
| MCP tool |
audit_list |
| CLI |
cbox id audit list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
action |
string |
no |
Only this action, e.g. webhook.created. At most 190 characters. |
actor_type |
string |
no |
Only entries by this kind of actor; service is a management key or an app. One of user, service, system, operator, organization_member. |
organization_id |
string |
no |
Only this organization's entries. At most 64 characters. |
Branding
branding.appearance.get
Read the hosted sign-in theme: the environment default, or one organization's own.
|
|
| REST |
GET /api/v1/branding/appearance → 200 |
| Scope |
branding:read — required of the key or token. |
| Danger |
read |
| MCP tool |
branding_appearance_get |
| CLI |
cbox id branding appearance get |
| Input |
Type |
Required |
Description |
organization_id |
string |
no |
Read this organization's theme. Left out, the environment default. At most 64 characters. |
branding.appearance.set
Set the hosted sign-in theme (preset, colours, corners, type, logo) for the environment default or one organization.
|
|
| REST |
PUT /api/v1/branding/appearance → 200 |
| Scope |
branding:write — required of the key or token. |
| Danger |
write |
| MCP tool |
branding_appearance_set |
| CLI |
cbox id branding appearance set |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
Theme this organization. Left out, the environment default. At most 64 characters. |
theme |
object |
yes |
The theme. Both modes must be readable: text needs 4.5:1 against the background, muted text 3:1. |
theme.preset |
string |
no |
A preset id: cbox, midnight, minimal, warm, contrast. At most 64 characters. |
theme.radius |
string |
no |
Corner radius: 0rem, 0.25rem, 0.375rem, 0.5rem, 0.75rem, 1rem. At most 32 characters. |
theme.font |
string |
no |
Type family: system, geometric, serif. At most 32 characters. |
theme.light |
object |
no |
Colours as #rrggbb. One left out takes the preset's. |
theme.light.primary |
string |
no |
At most 32 characters. |
theme.light.background |
string |
no |
At most 32 characters. |
theme.light.foreground |
string |
no |
At most 32 characters. |
theme.light.muted |
string |
no |
At most 32 characters. |
theme.dark |
object |
no |
Colours as #rrggbb. One left out takes the preset's. |
theme.dark.primary |
string |
no |
At most 32 characters. |
theme.dark.background |
string |
no |
At most 32 characters. |
theme.dark.foreground |
string |
no |
At most 32 characters. |
theme.dark.muted |
string |
no |
At most 32 characters. |
logo |
string (uri), nullable |
no |
An https URL for the logo; null removes it, left out keeps it. At most 2048 characters. |
branding.whitelabel.get
Read the white-label branding (palette, app name, email sender, logo) of the environment default or one organization.
|
|
| REST |
GET /api/v1/branding/whitelabel → 200 |
| Scope |
branding:read — required of the key or token. |
| Danger |
read |
| MCP tool |
branding_whitelabel_get |
| CLI |
cbox id branding whitelabel get |
| Input |
Type |
Required |
Description |
organization_id |
string |
no |
Read this organization's branding. Left out, the environment default. At most 64 characters. |
branding.whitelabel.set
Save the white-label branding (palette, app name, email sender, welcome email) of the environment default or one organization.
|
|
| REST |
PUT /api/v1/branding/whitelabel → 200 |
| Scope |
branding:write — required of the key or token. |
| Danger |
write |
| MCP tool |
branding_whitelabel_set |
| CLI |
cbox id branding whitelabel set |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
Brand this organization. Left out, the environment default. At most 64 characters. |
palette |
object |
no |
Colours as hex (#0a2540) or oklch(…), by token: primary, accent, ring, foreground, background. Sent, it is the complete palette; a token left out or blank is unset. |
palette.primary |
string, nullable |
no |
At most 100 characters. |
palette.accent |
string, nullable |
no |
At most 100 characters. |
palette.ring |
string, nullable |
no |
At most 100 characters. |
palette.foreground |
string, nullable |
no |
At most 100 characters. |
palette.background |
string, nullable |
no |
At most 100 characters. |
app_name |
string, nullable |
no |
The product name shown in place of Cbox ID; null to unset. At most 120 characters. |
email_from_name |
string, nullable |
no |
The sender name on mail; null to unset. At most 120 characters. |
email_template |
string, nullable |
no |
The welcome email body; blank or null to use the default. At most 5000 characters. |
Directory Sync
directories.connect
Connect a Google Workspace or Microsoft Entra directory to sync an organization's people from, verifying the credentials first. Runs the first sync.
|
|
| REST |
POST /api/v1/directories/connect → 201 |
| Scope |
directory_sync:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
directories_connect |
| CLI |
cbox id directories connect |
| Input |
Type |
Required |
Description |
organization_id |
string |
yes |
The organization whose people it provisions. At most 64 characters. |
provider |
string |
yes |
google_workspace or microsoft_entra. One of google_workspace, microsoft_entra. |
credentials |
object |
yes |
The provider's credentials. Write-only: sealed, never returned. |
credentials.service_account_json |
string |
no |
Google: the service account's JSON key, whole. At most 20000 characters. |
credentials.admin_email |
string |
no |
Google: the administrator the service account acts as. At most 190 characters. |
credentials.tenant_id |
string |
no |
Entra: the directory (tenant) id. At most 190 characters. |
credentials.client_id |
string |
no |
Entra: the app registration's client id. At most 190 characters. |
credentials.client_secret |
string |
no |
Entra: the app registration's client secret. At most 500 characters. |
directories.create
Register a SCIM directory for an organization. Answers the SCIM base URL and a bearer token, shown once.
|
|
| REST |
POST /api/v1/directories → 201 |
| Scope |
directory_sync:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
directories_create |
| CLI |
cbox id directories create |
| Secret |
data.bearer_token — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
organization_id |
string |
yes |
The organization whose people it provisions. At most 64 characters. |
name |
string |
yes |
What administrators call it: "Okta SCIM". At most 120 characters. |
directories.delete
Delete an inbound directory. Its token stops working; the people it provisioned keep their accounts.
|
|
| REST |
DELETE /api/v1/directories/{id} → 204 |
| Scope |
directory_sync:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
directories_delete |
| CLI |
cbox id directories delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The directory's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
directories.get
Read one inbound directory: its provider, status, SCIM base URL and last sync error. Never its token or credentials.
|
|
| REST |
GET /api/v1/directories/{id} → 200 |
| Scope |
directory_sync:read — required of the key or token. |
| Danger |
read |
| MCP tool |
directories_get |
| CLI |
cbox id directories get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The directory's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
directories.groups.list
List the groups a directory has synced, with the role ids each group is mapped onto.
|
|
| REST |
GET /api/v1/directories/{id}/groups → 200 |
| Scope |
directory_sync:read — required of the key or token. |
| Danger |
read |
| MCP tool |
directories_groups_list |
| CLI |
cbox id directories groups list <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The directory's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
directories.groups.map
Map a directory group onto a role (everyone in the group holds it as membership syncs), or unmap it.
|
|
| REST |
POST /api/v1/directories/{id}/group-roles → 200 |
| Scope |
directory_sync:write — required of the key or token. |
| Danger |
write |
| MCP tool |
directories_groups_map |
| CLI |
cbox id directories groups map <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The directory's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
group_id |
string |
yes |
One of the directory's groups. At most 64 characters. |
role_id |
string |
yes |
A role the organization's own people may hold. At most 64 characters. |
mapped |
boolean |
yes |
true to map the group onto the role, false to unmap it. |
directories.list
List the directories (SCIM, Google Workspace, Microsoft Entra) syncing people in, optionally for one organization, with their last sync error.
|
|
| REST |
GET /api/v1/directories → 200 |
| Scope |
directory_sync:read — required of the key or token. |
| Danger |
read |
| MCP tool |
directories_list |
| CLI |
cbox id directories list |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
Only this organization's. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
directories.status.set
Pause or resume an inbound directory's provisioning.
|
|
| REST |
POST /api/v1/directories/{id}/status → 200 |
| Scope |
directory_sync:write — required of the key or token. |
| Danger |
write |
| MCP tool |
directories_status_set |
| CLI |
cbox id directories status set <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The directory's id. |
active |
boolean |
yes |
true to resume provisioning, false to pause it. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
directories.token.rotate
Issue a new bearer token for a SCIM directory, returned once. The old token stops working immediately.
|
|
| REST |
POST /api/v1/directories/{id}/rotate → 200 |
| Scope |
directory_sync:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
directories_token_rotate |
| CLI |
cbox id directories token rotate <id> |
| Secret |
data.bearer_token — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The directory's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
directories.update
Rename an inbound directory.
|
|
| REST |
PATCH /api/v1/directories/{id} → 200 |
| Scope |
directory_sync:write — required of the key or token. |
| Danger |
write |
| MCP tool |
directories_update |
| CLI |
cbox id directories update <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The directory's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
name |
string |
yes |
The new name. At most 120 characters. |
Domains
domains.add
Start serving this environment on a custom domain: returns the DNS TXT record that proves you control it.
|
|
| REST |
POST /api/v1/domains → 200 |
| Scope |
domains:write — required of the key or token. |
| Danger |
write |
| MCP tool |
domains_add |
| CLI |
cbox id domains add |
| Input |
Type |
Required |
Description |
domain |
string |
yes |
The domain, for example login.example.com. At most 253 characters. |
domains.get
Read this environment's custom domain, and the DNS TXT record that proves a pending one.
|
|
| REST |
GET /api/v1/domains → 200 |
| Scope |
domains:read — required of the key or token. |
| Danger |
read |
| MCP tool |
domains_get |
| CLI |
cbox id domains get |
Takes no input.
domains.remove
Stop serving this environment on its custom domain. Anything using that domain stops reaching the environment.
|
|
| REST |
DELETE /api/v1/domains → 204 |
| Scope |
domains:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
domains_remove |
| CLI |
cbox id domains remove |
Takes no input.
domains.verify
Look for the pending domain's DNS TXT record and, once it is visible, serve this environment on that domain.
|
|
| REST |
POST /api/v1/domains/verify → 200 |
| Scope |
domains:write — required of the key or token. |
| Danger |
write |
| MCP tool |
domains_verify |
| CLI |
cbox id domains verify |
Takes no input.
Enterprise SSO
sso.connections.activate
Activate an SSO connection: people whose email domain routes to it start signing in through it.
|
|
| REST |
POST /api/v1/sso/connections/{id}/activate → 200 |
| Scope |
sso:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
sso_connections_activate |
| CLI |
cbox id sso connections activate <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The connection's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
sso.connections.certificates.activate
Make a staged SAML signing certificate the connection's primary. The certificate it replaces stops being trusted.
|
|
| REST |
POST /api/v1/sso/connections/{id}/certificates/activate → 200 |
| Scope |
sso:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
sso_connections_certificates_activate |
| CLI |
cbox id sso connections certificates activate <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The connection's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
fingerprint_sha256 |
string |
yes |
The staged certificate's SHA-256 fingerprint, as the certificate list gives it. At most 200 characters. |
sso.connections.certificates.list
List a SAML connection's signing certificates — primary and staged — with each one's fingerprint and expiry.
|
|
| REST |
GET /api/v1/sso/connections/{id}/certificates → 200 |
| Scope |
sso:read — required of the key or token. |
| Danger |
read |
| MCP tool |
sso_connections_certificates_list |
| CLI |
cbox id sso connections certificates list <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The connection's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
sso.connections.certificates.stage
Stage a SAML connection's new IdP signing certificate (PEM or IdP metadata) beside the current one, so a renewal has no outage. Activate it once the IdP signs with it.
|
|
| REST |
POST /api/v1/sso/connections/{id}/certificates → 200 |
| Scope |
sso:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
sso_connections_certificates_stage |
| CLI |
cbox id sso connections certificates stage <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The connection's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
certificate |
string, nullable |
no |
The new signing certificate, PEM. Send this or metadata. At most 20000 characters. |
metadata |
string, nullable |
no |
The identity provider's metadata XML, or the https URL it is published at. Send this or certificate. At most 500000 characters. |
sso.connections.create
Connect an organization's SAML or OIDC identity provider as a draft. Activate it to start signing people in through it.
|
|
| REST |
POST /api/v1/sso/connections → 201 |
| Scope |
sso:write — required of the key or token. |
| Danger |
write |
| MCP tool |
sso_connections_create |
| CLI |
cbox id sso connections create |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
The organization the connection belongs to. Send this or environment_wide. At most 64 characters. |
environment_wide |
boolean |
no |
True to make the connection the environment's own rather than one organization's. Send this or organization_id. |
name |
string |
yes |
What administrators call it: "Okta", "Entra ID". At most 120 characters. |
type |
string |
yes |
saml or oidc. The config fields of that type are required, unless pending_idp. One of saml, oidc. |
pending_idp |
boolean |
no |
True to create the draft before the identity provider's details are known: the answer's service_provider is what to paste into it. Complete it with update before activating. |
idp_entity_id |
string, nullable |
no |
SAML: the identity provider's entity id. At most 500 characters. |
idp_sso_url |
string (uri), nullable |
no |
SAML: the identity provider's single sign-on URL. At most 500 characters. |
idp_x509cert |
string, nullable |
no |
SAML: the identity provider's signing certificate (PEM). Write-only. At most 20000 characters. |
sp_entity_id |
string, nullable |
no |
SAML: the entity id this environment presents as the service provider. Left out on create, this connection's own. At most 500 characters. |
sp_acs_url |
string (uri), nullable |
no |
SAML: where the identity provider posts its assertions. Left out on create, this connection's own ACS URL. At most 500 characters. |
issuer |
string (uri), nullable |
no |
OIDC: the provider's issuer URL; its endpoints are discovered from it. At most 500 characters. |
client_id |
string, nullable |
no |
OIDC: the client id registered at the provider. At most 500 characters. |
client_secret |
string, nullable |
no |
OIDC: the client secret. Write-only. At most 500 characters. |
signing_key |
string, nullable |
no |
OIDC, optional: the provider's ID-token signing key (an RS256 public key, PEM). Leave it out for any provider whose discovery document publishes a jwks_uri — the keys are read from there and follow its rotations. Needed only when it does not. Write-only. At most 20000 characters. |
sso.connections.delete
Delete an SSO connection and its settings. Where SSO is required, its people cannot sign in until another is activated.
|
|
| REST |
DELETE /api/v1/sso/connections/{id} → 204 |
| Scope |
sso:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
sso_connections_delete |
| CLI |
cbox id sso connections delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The connection's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
sso.connections.disable
Disable an SSO connection without deleting it. Where SSO is required, its people cannot sign in until it is re-activated.
|
|
| REST |
POST /api/v1/sso/connections/{id}/disable → 200 |
| Scope |
sso:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
sso_connections_disable |
| CLI |
cbox id sso connections disable <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The connection's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
sso.connections.get
Read one SSO connection: its type, status, entity ids, URLs, issuer and client id. Never a certificate or secret.
|
|
| REST |
GET /api/v1/sso/connections/{id} → 200 |
| Scope |
sso:read — required of the key or token. |
| Danger |
read |
| MCP tool |
sso_connections_get |
| CLI |
cbox id sso connections get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The connection's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
sso.connections.list
List the SAML and OIDC connections organizations sign in through, optionally for one organization. Never a certificate or secret.
|
|
| REST |
GET /api/v1/sso/connections → 200 |
| Scope |
sso:read — required of the key or token. |
| Danger |
read |
| MCP tool |
sso_connections_list |
| CLI |
cbox id sso connections list |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
Only this organization's. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
sso.connections.require_sso
Require single sign-on for the organization an SSO connection belongs to. Ends every password session there.
|
|
| REST |
POST /api/v1/sso/connections/{id}/require-sso → 200 |
| Scope |
sso:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
sso_connections_require_sso |
| CLI |
cbox id sso connections require_sso <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The connection's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
sso.connections.update
Change an SSO connection's name or identity-provider settings. Secrets left out keep the ones on file.
|
|
| REST |
PATCH /api/v1/sso/connections/{id} → 200 |
| Scope |
sso:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
sso_connections_update |
| CLI |
cbox id sso connections update <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The connection's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
name |
string |
no |
A new name. At most 120 characters. |
idp_entity_id |
string, nullable |
no |
SAML: the identity provider's entity id. At most 500 characters. |
idp_sso_url |
string (uri), nullable |
no |
SAML: the identity provider's single sign-on URL. At most 500 characters. |
idp_x509cert |
string, nullable |
no |
SAML: the identity provider's signing certificate (PEM). Write-only. At most 20000 characters. |
sp_entity_id |
string, nullable |
no |
SAML: the entity id this environment presents as the service provider. Left out on create, this connection's own. At most 500 characters. |
sp_acs_url |
string (uri), nullable |
no |
SAML: where the identity provider posts its assertions. Left out on create, this connection's own ACS URL. At most 500 characters. |
issuer |
string (uri), nullable |
no |
OIDC: the provider's issuer URL; its endpoints are discovered from it. At most 500 characters. |
client_id |
string, nullable |
no |
OIDC: the client id registered at the provider. At most 500 characters. |
client_secret |
string, nullable |
no |
OIDC: the client secret. Write-only. At most 500 characters. |
signing_key |
string, nullable |
no |
OIDC, optional: the provider's ID-token signing key (an RS256 public key, PEM). Leave it out for any provider whose discovery document publishes a jwks_uri — the keys are read from there and follow its rotations. Needed only when it does not. Write-only. At most 20000 characters. |
sso.domains.capture
Turn capture on or off for a verified domain: captured, everyone with an address at it must sign in through the organization's SSO.
|
|
| REST |
POST /api/v1/sso/domains/{id}/capture → 200 |
| Scope |
sso:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
sso_domains_capture |
| CLI |
cbox id sso domains capture <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The domain's id. |
capture |
boolean |
yes |
true to capture the domain, false to release it. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
sso.domains.create
Claim an email domain for an organization's single sign-on, and get the DNS TXT record to publish to prove it.
|
|
| REST |
POST /api/v1/sso/domains → 201 |
| Scope |
sso:write — required of the key or token. |
| Danger |
write |
| MCP tool |
sso_domains_create |
| CLI |
cbox id sso domains create |
| Input |
Type |
Required |
Description |
organization_id |
string |
yes |
The organization claiming it. At most 64 characters. |
domain |
string |
yes |
The email domain, e.g. acme.com. At most 253 characters. |
sso.domains.delete
Remove a claimed email domain. Its people stop being routed to the organization's SSO connection.
|
|
| REST |
DELETE /api/v1/sso/domains/{id} → 204 |
| Scope |
sso:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
sso_domains_delete |
| CLI |
cbox id sso domains delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The domain's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
sso.domains.list
List the email domains organizations claimed for single sign-on, whether each is verified and captured, and the DNS record that proves an unverified one.
|
|
| REST |
GET /api/v1/sso/domains → 200 |
| Scope |
sso:read — required of the key or token. |
| Danger |
read |
| MCP tool |
sso_domains_list |
| CLI |
cbox id sso domains list |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
Only this organization's. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
sso.domains.verify
Check a claimed domain's DNS TXT record now. Answers the domain, with verified true once the record is found.
|
|
| REST |
POST /api/v1/sso/domains/{id}/verify → 200 |
| Scope |
sso:write — required of the key or token. |
| Danger |
write |
| MCP tool |
sso_domains_verify |
| CLI |
cbox id sso domains verify <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The domain's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
Parse an identity provider's SAML metadata (XML or a metadata URL) into the entity id, SSO URL and certificate a SAML connection needs. Stores nothing.
|
|
| REST |
POST /api/v1/sso/saml-metadata → 200 |
| Scope |
sso:write — required of the key or token. |
| Danger |
write |
| MCP tool |
sso_saml_metadata_import |
| CLI |
cbox id sso saml_metadata import |
| Input |
Type |
Required |
Description |
metadata |
string |
yes |
The IdP metadata XML, or an https URL it is published at. At most 500000 characters. |
Events
events.list
Read this environment's domain events (the facts webhooks deliver) oldest first; pass the last id as after to poll for new ones.
|
|
| REST |
GET /api/v1/events → 200 |
| Scope |
events:read — required of the key or token. |
| Danger |
read |
| MCP tool |
events_list |
| CLI |
cbox id events list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
types |
list of string |
no |
Only these event types, e.g. user.created. At most 50 items. |
organization_id |
string |
no |
Only this organization's events. At most 64 characters. |
Governance
access_reviews.close
Close an access review and apply it: every revoke is carried out, and undecided items get the review's pending policy (revoke by default).
|
|
| REST |
POST /api/v1/access-reviews/{id}/close → 200 |
| Scope |
governance:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
access_reviews_close |
| CLI |
cbox id access_reviews close <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The review's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
access_reviews.create
Open an access review of one organization's roles and memberships — or of staff roles — for someone to certify or revoke.
|
|
| REST |
POST /api/v1/access-reviews → 201 |
| Scope |
governance:write — required of the key or token. |
| Danger |
write |
| MCP tool |
access_reviews_create |
| CLI |
cbox id access_reviews create |
| Input |
Type |
Required |
Description |
name |
string |
yes |
What the review is: "Q3 finance access". At most 190 characters. |
covers |
string |
no |
organization (default): one organization's access, named by organization_id. staff: every environment-wide staff grant. One of organization, staff. |
organization_id |
string, nullable |
no |
The organization to review. Required unless covers is staff. At most 64 characters. |
due_in_days |
integer |
no |
Days until it is due. Default 7. At least 1. At most 365. |
access_reviews.get
Read one access review: its status, due date, pending-item policy and item count.
|
|
| REST |
GET /api/v1/access-reviews/{id} → 200 |
| Scope |
governance:read — required of the key or token. |
| Danger |
read |
| MCP tool |
access_reviews_get |
| CLI |
cbox id access_reviews get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The review's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
access_reviews.items.decide
Certify or revoke one item of an open access review. Revokes are applied when the review closes.
|
|
| REST |
POST /api/v1/access-reviews/{id}/items/{item_id} → 200 |
| Scope |
governance:write — required of the key or token. |
| Danger |
write |
| MCP tool |
access_reviews_items_decide |
| CLI |
cbox id access_reviews items decide <id> <item_id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The review's id. |
item_id |
string (path) |
yes |
The item's id. |
decision |
string |
yes |
certified keeps the access; revoked takes it away when the review closes. One of certified, revoked. |
note |
string, nullable |
no |
Why, for whoever audits the review. At most 1000 characters. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
access_reviews.items.list
List the items an access review asks someone to certify or revoke: who holds what, and the decision on each.
|
|
| REST |
GET /api/v1/access-reviews/{id}/items → 200 |
| Scope |
governance:read — required of the key or token. |
| Danger |
read |
| MCP tool |
access_reviews_items_list |
| CLI |
cbox id access_reviews items list <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The review's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
access_reviews.list
List access reviews (certification campaigns), open and closed, optionally those covering one organization.
|
|
| REST |
GET /api/v1/access-reviews → 200 |
| Scope |
governance:read — required of the key or token. |
| Danger |
read |
| MCP tool |
access_reviews_list |
| CLI |
cbox id access_reviews list |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
Only reviews covering this organization: its own and the staff reviews. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
sod_policies.create
Define a role-conflict rule: two or more roles no one person may hold together. Enforced on every grant from now on.
|
|
| REST |
POST /api/v1/sod-policies → 201 |
| Scope |
governance:write — required of the key or token. |
| Danger |
write |
| MCP tool |
sod_policies_create |
| CLI |
cbox id sod_policies create |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
The organization the rule belongs to. Send this or environment_wide. At most 64 characters. |
environment_wide |
boolean |
no |
True to make the rule the environment's own rather than one organization's. Send this or organization_id. |
name |
string |
yes |
What the rule is for: "Payments maker/checker". At most 190 characters. |
description |
string, nullable |
no |
Why the roles conflict. At most 500 characters. |
role_ids |
list of string |
yes |
The roles no one person may hold together; at least two. At least 2 items. At most 50 items. |
sod_policies.delete
Remove a role-conflict rule. Grants it refused are allowed from then on.
|
|
| REST |
DELETE /api/v1/sod-policies/{id} → 204 |
| Scope |
governance:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
sod_policies_delete |
| CLI |
cbox id sod_policies delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The rule's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
sod_policies.get
Read one role-conflict rule: the roles no one person may hold together, and whether it is enforced.
|
|
| REST |
GET /api/v1/sod-policies/{id} → 200 |
| Scope |
governance:read — required of the key or token. |
| Danger |
read |
| MCP tool |
sod_policies_get |
| CLI |
cbox id sod_policies get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The rule's id. |
organization_id |
string, nullable |
no |
Only if it binds this organization (its own, or environment-wide); anything else is a 404. At most 64 characters. |
sod_policies.list
List role-conflict (segregation of duties) rules: sets of roles no one person may hold together. Optionally those binding one organization.
|
|
| REST |
GET /api/v1/sod-policies → 200 |
| Scope |
governance:read — required of the key or token. |
| Danger |
read |
| MCP tool |
sod_policies_list |
| CLI |
cbox id sod_policies list |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
Only the rules binding this organization: its own and the environment-wide ones. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
sod_policies.status.set
Enforce a role-conflict rule, or stop enforcing it — switched off, grants that break it are allowed again.
|
|
| REST |
POST /api/v1/sod-policies/{id}/status → 200 |
| Scope |
governance:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
sod_policies_status_set |
| CLI |
cbox id sod_policies status set <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The rule's id. |
active |
boolean |
yes |
true to enforce the rule, false to stop enforcing it. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
Hooks
hooks.create
Register a hook at a hook point (token minting, login, registration, password change). Returns its signing secret once.
|
|
| REST |
POST /api/v1/hooks → 201 |
| Scope |
hooks:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
hooks_create |
| CLI |
cbox id hooks create |
| Secret |
data.secret — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
hook_point |
string |
yes |
When it is called. One of token_minting, post_login, pre_registration, post_registration, pre_password_change, post_password_change. |
url |
string (uri) |
yes |
A public HTTPS URL, called in the middle of the operation. At most 500 characters. |
organization_id |
string, nullable |
no |
The organization it belongs to; it carries that organization's traffic only. Send this or environment_wide. At most 64 characters. |
environment_wide |
boolean |
no |
True to make it the environment's own, carrying EVERY organization's traffic. Send this or organization_id. |
hooks.delete
Remove a hook. It is no longer called at its hook point.
|
|
| REST |
DELETE /api/v1/hooks/{id} → 204 |
| Scope |
hooks:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
hooks_delete |
| CLI |
cbox id hooks delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The hook id. |
hooks.get
Get one hook: its URL, hook point, owner and whether it is active. Never its signing secret.
|
|
| REST |
GET /api/v1/hooks/{id} → 200 |
| Scope |
hooks:read — required of the key or token. |
| Danger |
read |
| MCP tool |
hooks_get |
| CLI |
cbox id hooks get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The hook id. |
hooks.list
List the hooks — endpoints called during sign-in and token issuance — with their hook point, owner and whether each is active.
|
|
| REST |
GET /api/v1/hooks → 200 |
| Scope |
hooks:read — required of the key or token. |
| Danger |
read |
| MCP tool |
hooks_list |
| CLI |
cbox id hooks list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
hooks.update
Pause (active: false) or activate (active: true) a hook.
|
|
| REST |
PATCH /api/v1/hooks/{id} → 200 |
| Scope |
hooks:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
hooks_update |
| CLI |
cbox id hooks update <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The hook id. |
active |
boolean |
yes |
True to call it at its hook point; false to pause it. |
Invitations
invitations.list
List an organization's pending invitations, a page at a time, with the roles each will grant and the app it leads back to.
|
|
| REST |
GET /api/v1/organizations/{organization_id}/invitations → 200 |
| Scope |
invitations:read — required of the key or token. |
| Danger |
read |
| MCP tool |
invitations_list |
| CLI |
cbox id invitations list <organization_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
invitations.resend
Re-send a pending invitation on a fresh link. The answer is the new invitation; the old id and link stop working.
|
|
| REST |
POST /api/v1/organizations/{organization_id}/invitations/{invitation_id}/resend → 200 |
| Scope |
invitations:write — required of the key or token. |
| Danger |
write |
| MCP tool |
invitations_resend |
| CLI |
cbox id invitations resend <organization_id> <invitation_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
invitation_id |
string (path) |
yes |
The invitation id. At most 64 characters. |
invitations.revoke
Withdraw a pending invitation: its link stops working and the roles parked for it are dropped.
|
|
| REST |
DELETE /api/v1/organizations/{organization_id}/invitations/{invitation_id} → 204 |
| Scope |
invitations:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
invitations_revoke |
| CLI |
cbox id invitations revoke <organization_id> <invitation_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
invitation_id |
string (path) |
yes |
The invitation id. At most 64 characters. |
invitations.send
Invite someone into an organization by email, on a tier and with access roles (by id, or manifest key with client_id), optionally leading back to an app.
|
|
| REST |
POST /api/v1/organizations/{organization_id}/invitations → 201 |
| Scope |
invitations:write — required of the key or token. |
| Danger |
write |
| MCP tool |
invitations_send |
| CLI |
cbox id invitations send <organization_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
email |
string (email) |
yes |
At most 190 characters. |
role |
string |
no |
The tier. Default member; ownership is never given by invitation. One of admin, member. |
roles |
list of string |
no |
Access roles granted on acceptance: ids, or manifest keys of client_id's app. Never a staff role. At most 50 items. |
client_id |
string, nullable |
no |
The app the invitation comes from, and leads back to. At most 255 characters. |
return_to |
string, nullable |
no |
Where the person lands after accepting — on one of that app's registered redirect-URI origins. At most 2048 characters. |
inviter_name |
string, nullable |
no |
Who the mail says it is from. Default: the app's name, else the environment's. At most 120 characters. |
Legacy login
legacy_login.approve
Approve the declared legacy login endpoint: sign-ins for people not yet migrated, with their passwords, go to that URL.
|
|
| REST |
POST /api/v1/legacy-login/approve → 200 |
| Scope |
signin:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
legacy_login_approve |
| CLI |
cbox id legacy_login approve |
Takes no input.
legacy_login.get
Read the legacy login endpoint an app declared for migration, and whether it is approved to receive sign-ins.
|
|
| REST |
GET /api/v1/legacy-login → 200 |
| Scope |
signin:read — required of the key or token. |
| Danger |
read |
| MCP tool |
legacy_login_get |
| CLI |
cbox id legacy_login get |
Takes no input.
legacy_login.probe
Ask the declared legacy login endpoint whether it knows an address — your own — to test it before approving. Sends no password.
|
|
| REST |
POST /api/v1/legacy-login/probe → 200 |
| Scope |
signin:write — required of the key or token. |
| Danger |
write |
| MCP tool |
legacy_login_probe |
| CLI |
cbox id legacy_login probe |
| Input |
Type |
Required |
Description |
email |
string (email) |
yes |
An address that exists in your old system — your own. At most 254 characters. |
legacy_login.revoke
Withdraw the legacy login approval. People not yet migrated can no longer sign in; the declaration stays on file.
|
|
| REST |
POST /api/v1/legacy-login/revoke → 200 |
| Scope |
signin:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
legacy_login_revoke |
| CLI |
cbox id legacy_login revoke |
Takes no input.
Log streams
log_streams.create
Stream the audit trail to a SIEM (Splunk, Elastic, Graylog, CEF, JSON), Datadog, or an S3 or GCS bucket. A generated HMAC key is returned once.
|
|
| REST |
POST /api/v1/log-streams → 201 |
| Scope |
log_streams:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
log_streams_create |
| CLI |
cbox id log_streams create |
| Secret |
data.secret — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
name |
string |
yes |
At most 190 characters. |
destination |
string |
yes |
One of splunk_hec, elastic_ecs, graylog_gelf, cef_http, generic_json, datadog, s3, gcs. |
endpoint_url |
string (uri), nullable |
no |
An HTTP collector: the public URL entries are POSTed to (required). Datadog, S3 and GCS: leave out for the destination's own endpoint, or an https URL of an S3-compatible store (MinIO, R2). At most 2048 characters. |
auth |
string |
no |
An HTTP collector: how the endpoint is authenticated. Left out, the destination's default. The cloud destinations authenticate their own way. One of none, bearer, splunk, hmac. |
secret |
string, nullable |
no |
The credential, never echoed: the bearer or Splunk token (HTTP collectors; left out with hmac, a key is generated and returned once), the Datadog API key, the S3 secret access key (none with role_arn), or the GCS service-account JSON key. At most 8192 characters. |
options |
object |
no |
Datadog, S3 and GCS only: the destination's settings. An HTTP collector takes none. |
options.site |
string, nullable |
no |
Datadog: the site your account lives on — the domain you sign in at, e.g. datadoghq.eu for EU1. Default datadoghq.com (US1). An API key only works on its own site. One of datadoghq.com, us3.datadoghq.com, us5.datadoghq.com, datadoghq.eu, ap1.datadoghq.com, ap2.datadoghq.com, ddog-gov.com. |
options.service |
string, nullable |
no |
Datadog: the service attribute on every entry. Default: this platform's name. At most 100 characters. |
options.source |
string, nullable |
no |
Datadog: the ddsource attribute. Default cbox. At most 100 characters. |
options.tags |
list of string, nullable |
no |
Datadog: key:value tags (ddtags) on every entry, e.g. env:prod. At most 100 items. |
options.hostname |
string, nullable |
no |
Datadog: the hostname attribute. Default: this platform's host. At most 255 characters. |
options.bucket |
string, nullable |
no |
S3 and GCS: the bucket objects are written to. At most 222 characters. |
options.region |
string, nullable |
no |
S3: the bucket's AWS Region, e.g. eu-west-1 (auto for Cloudflare R2). At most 32 characters. |
options.prefix |
string, nullable |
no |
S3 and GCS: the object key prefix, e.g. cbox/audit. Objects are written to {prefix}/{yyyy}/{mm}/{dd}/{hh}/{batch}.ndjson.gz. At most 512 characters. |
options.access_key_id |
string, nullable |
no |
S3 with an access key: the IAM access key ID. Its secret access key is the stream's secret. At most 128 characters. |
options.role_arn |
string, nullable |
no |
S3 with an assumed role: the IAM role the platform assumes. No secret is stored; the role's trust policy must require the stream's external_id. At most 2048 characters. |
options.sse |
string, nullable |
no |
S3: server-side encryption requested on every object. Left out, the bucket's default. One of AES256, aws:kms. |
options.kms_key_id |
string, nullable |
no |
S3 with aws:kms: the KMS key ID, alias or ARN. At most 2048 characters. |
options.path_style |
boolean, nullable |
no |
S3: path-style addressing. Default: virtual-hosted on AWS, path-style on a custom endpoint (MinIO, R2). |
options.gzip |
boolean, nullable |
no |
S3 and GCS: gzip each object (.ndjson.gz). Default true. |
organization_id |
string, nullable |
no |
The organization it belongs to; it carries that organization's traffic only. Send this or environment_wide. At most 64 characters. |
environment_wide |
boolean |
no |
True to make it the environment's own, carrying EVERY organization's traffic. Send this or organization_id. |
log_streams.delete
Delete an audit log stream. Nothing more is delivered to its endpoint.
|
|
| REST |
DELETE /api/v1/log-streams/{id} → 204 |
| Scope |
log_streams:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
log_streams_delete |
| CLI |
cbox id log_streams delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The log stream id. |
log_streams.get
Get one audit log stream: destination, endpoint, auth scheme, owner and health. Never its secret.
|
|
| REST |
GET /api/v1/log-streams/{id} → 200 |
| Scope |
log_streams:read — required of the key or token. |
| Danger |
read |
| MCP tool |
log_streams_get |
| CLI |
cbox id log_streams get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The log stream id. |
log_streams.list
List the SIEM destinations this environment's audit trail is streamed to, and whether each is enabled. Never a secret.
|
|
| REST |
GET /api/v1/log-streams → 200 |
| Scope |
log_streams:read — required of the key or token. |
| Danger |
read |
| MCP tool |
log_streams_list |
| CLI |
cbox id log_streams list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
log_streams.test
Send one test event to a log stream now and report whether the destination accepted it, and if not, why.
|
|
| REST |
POST /api/v1/log-streams/{id}/test → 200 |
| Scope |
log_streams:write — required of the key or token. |
| Danger |
write |
| MCP tool |
log_streams_test |
| CLI |
cbox id log_streams test <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The log stream's id. |
log_streams.update
Change an audit log stream's name, destination, endpoint, options or credential (re-validated; resets its circuit breaker), or disable (enabled: false) / resume (enabled: true) it.
|
|
| REST |
PATCH /api/v1/log-streams/{id} → 200 |
| Scope |
log_streams:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
log_streams_update |
| CLI |
cbox id log_streams update <id> |
| Secret |
data.secret — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The log stream id. |
name |
string |
no |
At most 190 characters. |
destination |
string |
no |
Changing it starts the stream's options and credential afresh. One of splunk_hec, elastic_ecs, graylog_gelf, cef_http, generic_json, datadog, s3, gcs. |
endpoint_url |
string (uri), nullable |
no |
An HTTP collector's URL; for Datadog, S3 and GCS empty means the destination's own endpoint. At most 2048 characters. |
auth |
string |
no |
An HTTP collector only. One of none, bearer, splunk, hmac. |
secret |
string, nullable |
no |
A new credential (token, API key, secret access key or service-account JSON key). Left out, the current one is kept. Never echoed. At most 8192 characters. |
options |
object |
no |
Datadog, S3 and GCS only: the destination's settings. An HTTP collector takes none. |
options.site |
string, nullable |
no |
Datadog: the site your account lives on — the domain you sign in at, e.g. datadoghq.eu for EU1. Default datadoghq.com (US1). An API key only works on its own site. One of datadoghq.com, us3.datadoghq.com, us5.datadoghq.com, datadoghq.eu, ap1.datadoghq.com, ap2.datadoghq.com, ddog-gov.com. |
options.service |
string, nullable |
no |
Datadog: the service attribute on every entry. Default: this platform's name. At most 100 characters. |
options.source |
string, nullable |
no |
Datadog: the ddsource attribute. Default cbox. At most 100 characters. |
options.tags |
list of string, nullable |
no |
Datadog: key:value tags (ddtags) on every entry, e.g. env:prod. At most 100 items. |
options.hostname |
string, nullable |
no |
Datadog: the hostname attribute. Default: this platform's host. At most 255 characters. |
options.bucket |
string, nullable |
no |
S3 and GCS: the bucket objects are written to. At most 222 characters. |
options.region |
string, nullable |
no |
S3: the bucket's AWS Region, e.g. eu-west-1 (auto for Cloudflare R2). At most 32 characters. |
options.prefix |
string, nullable |
no |
S3 and GCS: the object key prefix, e.g. cbox/audit. Objects are written to {prefix}/{yyyy}/{mm}/{dd}/{hh}/{batch}.ndjson.gz. At most 512 characters. |
options.access_key_id |
string, nullable |
no |
S3 with an access key: the IAM access key ID. Its secret access key is the stream's secret. At most 128 characters. |
options.role_arn |
string, nullable |
no |
S3 with an assumed role: the IAM role the platform assumes. No secret is stored; the role's trust policy must require the stream's external_id. At most 2048 characters. |
options.sse |
string, nullable |
no |
S3: server-side encryption requested on every object. Left out, the bucket's default. One of AES256, aws:kms. |
options.kms_key_id |
string, nullable |
no |
S3 with aws:kms: the KMS key ID, alias or ARN. At most 2048 characters. |
options.path_style |
boolean, nullable |
no |
S3: path-style addressing. Default: virtual-hosted on AWS, path-style on a custom endpoint (MinIO, R2). |
options.gzip |
boolean, nullable |
no |
S3 and GCS: gzip each object (.ndjson.gz). Default true. |
enabled |
boolean |
no |
True to deliver; false to stop, keeping what is pending. |
Members
members.add
Add an existing user to an organization on a tier (admin or member), optionally with access roles. Name them by user_id or email.
|
|
| REST |
POST /api/v1/organizations/{organization_id}/members → 201 |
| Scope |
members:write — required of the key or token. |
| Danger |
write |
| MCP tool |
members_add |
| CLI |
cbox id members add <organization_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
user_id |
string |
no |
The user to add. Or name them by email. At most 64 characters. |
email |
string (email) |
no |
The address of the user to add, instead of user_id. At most 190 characters. |
role |
string |
no |
The tier. Default member; ownership moves with transfer-ownership. One of admin, member. |
roles |
list of string |
no |
Access roles to grant in the organization: ids, or manifest keys of client_id's app. At most 50 items. |
client_id |
string, nullable |
no |
The app whose manifest keys roles are. At most 255 characters. |
members.list
List an organization's members, a page at a time, with each one's tier, status, name and email.
|
|
| REST |
GET /api/v1/organizations/{organization_id}/members → 200 |
| Scope |
members:read — required of the key or token. |
| Danger |
read |
| MCP tool |
members_list |
| CLI |
cbox id members list <organization_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
members.remove
Remove a member from an organization, with every role they held there. The last owner cannot be removed.
|
|
| REST |
DELETE /api/v1/organizations/{organization_id}/members/{user_id} → 204 |
| Scope |
members:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
members_remove |
| CLI |
cbox id members remove <organization_id> <user_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
user_id |
string (path) |
yes |
The member's user id. At most 64 characters. |
members.update
Change a member's tier to admin or member. Ownership moves with transfer-ownership; the last owner cannot be demoted.
|
|
| REST |
PATCH /api/v1/organizations/{organization_id}/members/{user_id} → 200 |
| Scope |
members:write — required of the key or token. |
| Danger |
write |
| MCP tool |
members_update |
| CLI |
cbox id members update <organization_id> <user_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
user_id |
string (path) |
yes |
The member's user id. At most 64 characters. |
role |
string |
yes |
One of admin, member. |
Organizations
organizations.create
Create an organization in this environment, optionally with an existing user as its owner, a parent and metadata.
|
|
| REST |
POST /api/v1/organizations → 201 |
| Scope |
organizations:write — required of the key or token. |
| Danger |
write |
| MCP tool |
organizations_create |
| CLI |
cbox id organizations create |
| Input |
Type |
Required |
Description |
name |
string |
yes |
At most 190 characters. |
slug |
string, nullable |
no |
Letters, digits, dashes and underscores. Send your own to make a retry fail with slug_taken instead of creating a second one. At most 190 characters. |
type |
string |
no |
Default customer. One of customer, reseller. |
parent_id |
string, nullable |
no |
An organization of this environment to nest it under. At most 64 characters. |
owner_user_id |
string, nullable |
no |
An existing user of this environment, who becomes its owner. At most 64 characters. |
metadata |
object |
no |
Free-form text values the integrator keeps on the organization. |
organizations.delete
Archive an organization: everyone in it loses access at once. The records are kept for the audit trail.
|
|
| REST |
DELETE /api/v1/organizations/{id} → 200 |
| Scope |
organizations:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
organizations_delete |
| CLI |
cbox id organizations delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The organization id. At most 64 characters. |
organizations.domains.add
Claim an email domain (acme.com) for an organization. Returns the DNS TXT record to publish before verifying it.
|
|
| REST |
POST /api/v1/organizations/{organization_id}/domains → 201 |
| Scope |
organizations:write — required of the key or token. |
| Danger |
write |
| MCP tool |
organizations_domains_add |
| CLI |
cbox id organizations domains add <organization_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
domain |
string |
yes |
A domain name — acme.com, not an address or a URL. At most 190 characters. |
organizations.domains.capture
Turn capture on or off for a verified domain: with it on, everyone with an address there signs in through the organization's SSO.
|
|
| REST |
PUT /api/v1/organizations/{organization_id}/domains/{domain_id}/capture → 200 |
| Scope |
organizations:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
organizations_domains_capture |
| CLI |
cbox id organizations domains capture <organization_id> <domain_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
domain_id |
string (path) |
yes |
The claimed domain's id. At most 64 characters. |
enabled |
boolean |
yes |
Whether the domain captures sign-ins. |
organizations.domains.list
List the email domains an organization claims, whether each is verified and captured, and the DNS TXT record that proves it.
|
|
| REST |
GET /api/v1/organizations/{organization_id}/domains → 200 |
| Scope |
organizations:read — required of the key or token. |
| Danger |
read |
| MCP tool |
organizations_domains_list |
| CLI |
cbox id organizations domains list <organization_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
organizations.domains.remove
Remove a claimed email domain from an organization. Capture on it ends.
|
|
| REST |
DELETE /api/v1/organizations/{organization_id}/domains/{domain_id} → 204 |
| Scope |
organizations:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
organizations_domains_remove |
| CLI |
cbox id organizations domains remove <organization_id> <domain_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
domain_id |
string (path) |
yes |
The claimed domain's id. At most 64 characters. |
organizations.domains.verify
Check a claimed domain's DNS TXT record and mark the domain verified if it is published.
|
|
| REST |
POST /api/v1/organizations/{organization_id}/domains/{domain_id}/verify → 200 |
| Scope |
organizations:write — required of the key or token. |
| Danger |
write |
| MCP tool |
organizations_domains_verify |
| CLI |
cbox id organizations domains verify <organization_id> <domain_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
domain_id |
string (path) |
yes |
The claimed domain's id. At most 64 characters. |
organizations.get
Get one organization of this environment by id.
|
|
| REST |
GET /api/v1/organizations/{id} → 200 |
| Scope |
organizations:read — required of the key or token. |
| Danger |
read |
| MCP tool |
organizations_get |
| CLI |
cbox id organizations get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The organization id. At most 64 characters. |
organizations.list
List the organizations in this environment, a page at a time. Narrow by a q fragment of the name or slug, or by status.
|
|
| REST |
GET /api/v1/organizations → 200 |
| Scope |
organizations:read — required of the key or token. |
| Danger |
read |
| MCP tool |
organizations_list |
| CLI |
cbox id organizations list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
q |
string |
no |
Only organizations whose name or slug contains this. At most 190 characters. |
status |
string |
no |
Only organizations in this state. One of active, suspended, deleted. |
organizations.reactivate
Lift an organization's suspension so its members can sign in again.
|
|
| REST |
POST /api/v1/organizations/{id}/reactivate → 200 |
| Scope |
organizations:write — required of the key or token. |
| Danger |
write |
| MCP tool |
organizations_reactivate |
| CLI |
cbox id organizations reactivate <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The organization id. At most 64 characters. |
organizations.suspend
Suspend an organization: its members cannot sign in to it until it is reactivated.
|
|
| REST |
POST /api/v1/organizations/{id}/suspend → 200 |
| Scope |
organizations:write — required of the key or token. |
| Danger |
write |
| MCP tool |
organizations_suspend |
| CLI |
cbox id organizations suspend <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The organization id. At most 64 characters. |
organizations.transfer_ownership
Make a member the owner of an organization. Every current owner stays on as an admin; from inside the organization, only its owner may hand it over.
|
|
| REST |
POST /api/v1/organizations/{id}/transfer-ownership → 200 |
| Scope |
organizations:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
organizations_transfer_ownership |
| CLI |
cbox id organizations transfer_ownership <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The organization id. At most 64 characters. |
user_id |
string |
yes |
The member who becomes the owner — an active member already. At most 64 characters. |
organizations.update
Rename an organization, change its slug, or replace its metadata. Only what is sent changes.
|
|
| REST |
PATCH /api/v1/organizations/{id} → 200 |
| Scope |
organizations:write — required of the key or token. |
| Danger |
write |
| MCP tool |
organizations_update |
| CLI |
cbox id organizations update <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The organization id. At most 64 characters. |
name |
string |
no |
At least 1 characters. At most 190 characters. |
slug |
string |
no |
Letters, digits, dashes and underscores. At least 1 characters. At most 190 characters. |
metadata |
object |
no |
Replaces the metadata as a whole; null or {} clears it. |
Outbound provisioning
provisioning.targets.create
Register a downstream app this platform pushes an organization's people to over SCIM, or every organization's with environment_wide.
|
|
| REST |
POST /api/v1/provisioning-targets → 201 |
| Scope |
provisioning:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
provisioning_targets_create |
| CLI |
cbox id provisioning targets create |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
The organization the target belongs to. Send this or environment_wide. At most 64 characters. |
environment_wide |
boolean |
no |
True to make the target the environment's own rather than one organization's. Send this or organization_id. |
name |
string |
yes |
What administrators call it: "Slack", "Salesforce". At most 190 characters. |
base_url |
string (uri) |
yes |
The target's SCIM base URL. Must be a public address. At most 500 characters. |
auth_scheme |
string |
yes |
bearer (a long-lived token the app issued you) or oauth2_client_credentials (a token fetched before each batch). One of bearer, oauth2_client_credentials. |
secret |
string |
yes |
The bearer token, or the OAuth client secret. Write-only. At most 4096 characters. |
token_url |
string (uri), nullable |
no |
oauth2_client_credentials: the token endpoint. At most 2048 characters. |
client_id |
string, nullable |
no |
oauth2_client_credentials: the client id. At most 400 characters. |
scope |
string, nullable |
no |
oauth2_client_credentials: the scope to ask for, if the app wants one. At most 400 characters. |
provisioning.targets.delete
Delete a downstream SCIM target. Nothing more is pushed to it.
|
|
| REST |
DELETE /api/v1/provisioning-targets/{id} → 204 |
| Scope |
provisioning:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
provisioning_targets_delete |
| CLI |
cbox id provisioning targets delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The target's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
provisioning.targets.get
Read one downstream SCIM target: its URL, auth scheme, status and last error. Never its credential.
|
|
| REST |
GET /api/v1/provisioning-targets/{id} → 200 |
| Scope |
provisioning:read — required of the key or token. |
| Danger |
read |
| MCP tool |
provisioning_targets_get |
| CLI |
cbox id provisioning targets get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The target's id. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
provisioning.targets.list
List the downstream SCIM targets people are provisioned to, optionally for one organization, with their failures. Never their credentials.
|
|
| REST |
GET /api/v1/provisioning-targets → 200 |
| Scope |
provisioning:read — required of the key or token. |
| Danger |
read |
| MCP tool |
provisioning_targets_list |
| CLI |
cbox id provisioning targets list |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
Only this organization's. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
provisioning.targets.status.set
Pause or resume pushing people to a downstream SCIM target.
|
|
| REST |
POST /api/v1/provisioning-targets/{id}/status → 200 |
| Scope |
provisioning:write — required of the key or token. |
| Danger |
write |
| MCP tool |
provisioning_targets_status_set |
| CLI |
cbox id provisioning targets status set <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The target's id. |
active |
boolean |
yes |
true to resume pushing, false to pause. |
organization_id |
string, nullable |
no |
Only if it is this organization's; anything else is a 404. At most 64 characters. |
Publishable keys
frontend_keys.create
Create a publishable frontend key for a browser app, usable only from the origins listed. The key is public by design.
|
|
| REST |
POST /api/v1/frontend-keys → 201 |
| Scope |
frontend_keys:write — required of the key or token. |
| Danger |
write |
| MCP tool |
frontend_keys_create |
| CLI |
cbox id frontend_keys create |
| Input |
Type |
Required |
Description |
name |
string |
yes |
What the key is for, so a person recognises it later. At most 120 characters. |
mode |
string |
yes |
test or live; it is in the key's prefix. One of test, live. |
origins |
list of string |
yes |
The exact origins (scheme, host, port) allowed to present the key, for example https://app.example.com. At least one. At least 1 items. At most 50 items. |
frontend_keys.list
List the publishable frontend keys browser apps present to the Frontend API, in full, with their allowed origins.
|
|
| REST |
GET /api/v1/frontend-keys → 200 |
| Scope |
frontend_keys:read — required of the key or token. |
| Danger |
read |
| MCP tool |
frontend_keys_list |
| CLI |
cbox id frontend_keys list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
frontend_keys.revoke
Revoke a publishable frontend key. Pages still holding it stop working immediately.
|
|
| REST |
DELETE /api/v1/frontend-keys/{id} → 204 |
| Scope |
frontend_keys:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
frontend_keys_revoke |
| CLI |
cbox id frontend_keys revoke <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The key's id. |
frontend_keys.set_origins
Replace the exact list of origins allowed to present a publishable frontend key. Live on the next request.
|
|
| REST |
PUT /api/v1/frontend-keys/{id}/origins → 200 |
| Scope |
frontend_keys:write — required of the key or token. |
| Danger |
write |
| MCP tool |
frontend_keys_set_origins |
| CLI |
cbox id frontend_keys set_origins <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The key's id. |
origins |
list of string |
yes |
The exact origins (scheme, host, port) allowed to present the key, for example https://app.example.com. At least one. At least 1 items. At most 50 items. |
Roles
members.roles.grant
Grant a member an access role inside one organization, with the environment's authority (staff-only roles included) — or, from inside the organization, one its administrators may hand out. Name the role by id, or by manifest key with client_id.
|
|
| REST |
PUT /api/v1/organizations/{organization_id}/members/{user_id}/roles/{role_id} → 200 |
| Scope |
roles:write — required of the key or token. |
| Danger |
write |
| MCP tool |
members_roles_grant |
| CLI |
cbox id members roles grant <organization_id> <user_id> <role_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
user_id |
string (path) |
yes |
The member's user id. At most 64 characters. |
role_id |
string (path) |
yes |
The role id, or its manifest key with client_id. At most 190 characters. |
client_id |
string |
no |
The app whose manifest key role_id is. At most 255 characters. |
members.roles.list
List the access roles a member holds inside one organization (staff roles held everywhere are listed under the user).
|
|
| REST |
GET /api/v1/organizations/{organization_id}/members/{user_id}/roles → 200 |
| Scope |
roles:read — required of the key or token. |
| Danger |
read |
| MCP tool |
members_roles_list |
| CLI |
cbox id members roles list <organization_id> <user_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
user_id |
string (path) |
yes |
The member's user id. At most 64 characters. |
members.roles.revoke
Take an access role back from a member inside one organization. Name the role by id, or by manifest key with client_id.
|
|
| REST |
DELETE /api/v1/organizations/{organization_id}/members/{user_id}/roles/{role_id} → 204 |
| Scope |
roles:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
members_roles_revoke |
| CLI |
cbox id members roles revoke <organization_id> <user_id> <role_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization id. At most 64 characters. |
user_id |
string (path) |
yes |
The member's user id. At most 64 characters. |
role_id |
string (path) |
yes |
The role id, or its manifest key with client_id. At most 190 characters. |
client_id |
string |
no |
The app whose manifest key role_id is. At most 255 characters. |
permissions.create
Author a manual feature:action permission, shared with the environment (organization_id null) or one organization's own.
|
|
| REST |
POST /api/v1/permissions → 201 |
| Scope |
role_definitions:write — required of the key or token. |
| Danger |
write |
| MCP tool |
permissions_create |
| CLI |
cbox id permissions create |
| Input |
Type |
Required |
Description |
name |
string |
yes |
The key: a feature and an action joined by a colon, like invoices:create. At most 120 characters. |
description |
string, nullable |
no |
At most 500 characters. |
organization_id |
string, nullable |
no |
The organization it belongs to; null for the environment's shared tier. At most 64 characters. |
tenant_assignable |
boolean |
no |
Shared tier only: whether organizations may compose it into their own roles. Default false; always true on an organization's own. |
permissions.delete
Delete a manual permission: every role carrying it loses it first.
|
|
| REST |
DELETE /api/v1/permissions/{id} → 204 |
| Scope |
role_definitions:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
permissions_delete |
| CLI |
cbox id permissions delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The permission id. At most 64 characters. |
permissions.list
List the permission catalogue roles are composed from, a page at a time. Narrow by client_id (one app's), organization_id (what it can see) or a q fragment.
|
|
| REST |
GET /api/v1/permissions → 200 |
| Scope |
roles:read — required of the key or token. |
| Danger |
read |
| MCP tool |
permissions_list |
| CLI |
cbox id permissions list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
organization_id |
string |
no |
Also the permissions this organization authored for itself. At most 64 characters. |
client_id |
string |
no |
Only the permissions this app declared. At most 255 characters. |
q |
string |
no |
Only permissions whose key or description contains this. At most 120 characters. |
permissions.update
Change a manual permission's description, and on the shared tier whether organizations may use it. The key itself never changes.
|
|
| REST |
PATCH /api/v1/permissions/{id} → 200 |
| Scope |
role_definitions:write — required of the key or token. |
| Danger |
write |
| MCP tool |
permissions_update |
| CLI |
cbox id permissions update <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The permission id. At most 64 characters. |
description |
string, nullable |
no |
At most 500 characters. |
tenant_assignable |
boolean |
no |
Shared tier only: whether organizations may compose it into their own roles. |
roles.create
Define a role for one organization, or (organization_id null) for the whole environment, optionally scoped to one app, with its opening permissions.
|
|
| REST |
POST /api/v1/roles → 201 |
| Scope |
role_definitions:write — required of the key or token. |
| Danger |
write |
| MCP tool |
roles_create |
| CLI |
cbox id roles create |
| Input |
Type |
Required |
Description |
name |
string |
yes |
At most 120 characters. |
description |
string, nullable |
no |
At most 500 characters. |
organization_id |
string, nullable |
no |
The organization it belongs to; null defines it for every organization in the environment. At most 64 characters. |
client_id |
string, nullable |
no |
The app whose tokens it is stamped into; null for every app. At most 190 characters. |
permissions |
list of string |
no |
Permission ids to grant it from the start. At most 200 items. |
roles.delete
Delete a role: everyone who holds it loses it. An app-declared role is removed from the app's manifest instead.
|
|
| REST |
DELETE /api/v1/roles/{id} → 204 |
| Scope |
role_definitions:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
roles_delete |
| CLI |
cbox id roles delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The role id. At most 64 characters. |
roles.get
Get one role and the permissions it carries. Name it by id, or by manifest key with client_id.
|
|
| REST |
GET /api/v1/roles/{id} → 200 |
| Scope |
roles:read — required of the key or token. |
| Danger |
read |
| MCP tool |
roles_get |
| CLI |
cbox id roles get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The role id, or its manifest key with client_id. At most 190 characters. |
client_id |
string |
no |
The app whose manifest key id is. At most 255 characters. |
roles.list
List the roles that can be granted in this environment, with their permissions. Narrow by client_id (one app's) or organization_id (grantable there).
|
|
| REST |
GET /api/v1/roles → 200 |
| Scope |
roles:read — required of the key or token. |
| Danger |
read |
| MCP tool |
roles_list |
| CLI |
cbox id roles list |
| Input |
Type |
Required |
Description |
client_id |
string |
no |
Only the roles this app declared. At most 255 characters. |
organization_id |
string |
no |
Only the roles that can be granted in this organization. At most 64 characters. |
roles.permissions.grant
Add a permission to a role: everyone holding the role gains it. The permission must be unscoped or declared by the role's own app.
|
|
| REST |
PUT /api/v1/roles/{id}/permissions/{permission_id} → 200 |
| Scope |
role_definitions:write — required of the key or token. |
| Danger |
write |
| MCP tool |
roles_permissions_grant |
| CLI |
cbox id roles permissions grant <id> <permission_id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The role id. At most 64 characters. |
permission_id |
string (path) |
yes |
The permission id. At most 64 characters. |
roles.permissions.revoke
Remove a permission from a role: everyone holding the role loses it.
|
|
| REST |
DELETE /api/v1/roles/{id}/permissions/{permission_id} → 200 |
| Scope |
role_definitions:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
roles_permissions_revoke |
| CLI |
cbox id roles permissions revoke <id> <permission_id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The role id. At most 64 characters. |
permission_id |
string (path) |
yes |
The permission id. At most 64 characters. |
roles.update
Rename a role or change its description. An app-declared role is changed in the app's manifest instead.
|
|
| REST |
PATCH /api/v1/roles/{id} → 200 |
| Scope |
role_definitions:write — required of the key or token. |
| Danger |
write |
| MCP tool |
roles_update |
| CLI |
cbox id roles update <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The role id. At most 64 characters. |
name |
string |
no |
At least 1 characters. At most 120 characters. |
description |
string, nullable |
no |
At most 500 characters. |
users.environment_roles.get
Whether a user holds a role everywhere in this environment: the grant, or 404. Name the role by id, or by manifest key with client_id.
|
|
| REST |
GET /api/v1/users/{id}/environment-roles/{role_id} → 200 |
| Scope |
roles:read — required of the key or token. |
| Danger |
read |
| MCP tool |
users_environment_roles_get |
| CLI |
cbox id users environment_roles get <id> <role_id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
role_id |
string (path) |
yes |
The role id, or its manifest key with client_id. At most 190 characters. |
client_id |
string |
no |
The app whose manifest key role_id is. At most 255 characters. |
users.environment_roles.grant
Grant a user a staff role: held everywhere in this environment, in every organization. Name the role by id, or by manifest key with client_id.
|
|
| REST |
PUT /api/v1/users/{id}/environment-roles/{role_id} → 200 |
| Scope |
roles:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
users_environment_roles_grant |
| CLI |
cbox id users environment_roles grant <id> <role_id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
role_id |
string (path) |
yes |
The role id, or its manifest key with client_id. At most 190 characters. |
client_id |
string |
no |
The app whose manifest key role_id is. At most 255 characters. |
users.environment_roles.list
List the staff roles a user holds everywhere in this environment (not those held inside one organization).
|
|
| REST |
GET /api/v1/users/{id}/environment-roles → 200 |
| Scope |
roles:read — required of the key or token. |
| Danger |
read |
| MCP tool |
users_environment_roles_list |
| CLI |
cbox id users environment_roles list <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
users.environment_roles.revoke
Take a staff role (held everywhere in this environment) back from a user.
|
|
| REST |
DELETE /api/v1/users/{id}/environment-roles/{role_id} → 204 |
| Scope |
roles:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
users_environment_roles_revoke |
| CLI |
cbox id users environment_roles revoke <id> <role_id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
role_id |
string (path) |
yes |
The role id, or its manifest key with client_id. At most 190 characters. |
client_id |
string |
no |
The app whose manifest key role_id is. At most 255 characters. |
SAML apps
saml_apps.create
Register a SAML app that signs people in with their account here. Decides where assertions — and their attributes — are sent.
|
|
| REST |
POST /api/v1/saml-apps → 201 |
| Scope |
saml_apps:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
saml_apps_create |
| CLI |
cbox id saml_apps create |
| Input |
Type |
Required |
Description |
entity_id |
string |
yes |
The application's SAML EntityID, unique in this environment. At most 500 characters. |
acs_url |
string (uri) |
yes |
Where assertions are posted: https (http only on localhost), absolute, no fragment. At most 1000 characters. |
name_id_format |
string |
no |
The NameID format URN. Default emailAddress. One of urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress, urn:oasis:names:tc:SAML:2.0:nameid-format:persistent, urn:oasis:names:tc:SAML:2.0:nameid-format:transient, urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified. |
name_id_attribute |
string |
no |
The person's field the NameID is read from. Default email. At most 120 characters. |
attribute_mappings |
list of object |
no |
The attributes the assertion carries. Sent, it is the COMPLETE list afterwards. At most 100 items. |
attribute_mappings[].attribute |
string |
yes |
The attribute name the assertion emits: email, displayName. At most 190 characters. |
attribute_mappings[].field |
string |
yes |
The person's field it is read from: email, name. At most 190 characters. |
want_authn_requests_signed |
boolean |
no |
Verify the application's signature on every AuthnRequest. Needs a certificate. |
certificate |
string, nullable |
no |
The application's signing certificate (PEM). Write-only; left out or null keeps the one on file. At most 20000 characters. |
organization_id |
string, nullable |
no |
The organization that owns the application: only its active members are signed in to it, and the assertion names it. Null makes it environment-wide — every person in the environment may sign in to it. At most 64 characters. |
saml_apps.delete
Remove a SAML app. People can no longer sign in to it with their account here.
|
|
| REST |
DELETE /api/v1/saml-apps/{id} → 204 |
| Scope |
saml_apps:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
saml_apps_delete |
| CLI |
cbox id saml_apps delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The SAML app's id. |
saml_apps.get
Read one SAML app: its entity id, ACS URL, NameID and attribute mappings. Never its certificate.
|
|
| REST |
GET /api/v1/saml-apps/{id} → 200 |
| Scope |
saml_apps:read — required of the key or token. |
| Danger |
read |
| MCP tool |
saml_apps_get |
| CLI |
cbox id saml_apps get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The SAML app's id. |
saml_apps.list
List the SAML apps that trust this environment as their identity provider.
|
|
| REST |
GET /api/v1/saml-apps → 200 |
| Scope |
saml_apps:read — required of the key or token. |
| Danger |
read |
| MCP tool |
saml_apps_list |
| CLI |
cbox id saml_apps list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
saml_apps.update
Change a SAML app's entity id, ACS URL, NameID, attribute mappings, signing certificate or owning organization.
|
|
| REST |
PATCH /api/v1/saml-apps/{id} → 200 |
| Scope |
saml_apps:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
saml_apps_update |
| CLI |
cbox id saml_apps update <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The SAML app's id. |
entity_id |
string |
no |
The application's SAML EntityID, unique in this environment. At most 500 characters. |
acs_url |
string (uri) |
no |
Where assertions are posted: https (http only on localhost), absolute, no fragment. At most 1000 characters. |
name_id_format |
string |
no |
The NameID format URN. Default emailAddress. One of urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress, urn:oasis:names:tc:SAML:2.0:nameid-format:persistent, urn:oasis:names:tc:SAML:2.0:nameid-format:transient, urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified. |
name_id_attribute |
string |
no |
The person's field the NameID is read from. Default email. At most 120 characters. |
attribute_mappings |
list of object |
no |
The attributes the assertion carries. Sent, it is the COMPLETE list afterwards. At most 100 items. |
attribute_mappings[].attribute |
string |
yes |
The attribute name the assertion emits: email, displayName. At most 190 characters. |
attribute_mappings[].field |
string |
yes |
The person's field it is read from: email, name. At most 190 characters. |
want_authn_requests_signed |
boolean |
no |
Verify the application's signature on every AuthnRequest. Needs a certificate. |
certificate |
string, nullable |
no |
The application's signing certificate (PEM). Write-only; left out or null keeps the one on file. At most 20000 characters. |
organization_id |
string, nullable |
no |
The organization that owns the application: only its active members are signed in to it, and the assertion names it. Null makes it environment-wide — every person in the environment may sign in to it. At most 64 characters. |
Secret keys
keys.create
Mint a management key for this environment, at most as wide as the caller. The value is returned once, as token.
|
|
| REST |
POST /api/v1/keys → 201 |
| Scope |
keys:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
keys_create |
| CLI |
cbox id keys create |
| Secret |
data.token — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
name |
string |
yes |
At most 120 characters. |
scopes |
list of string |
yes |
The scopes the key carries. From a key: a subset of its own. At least 1 items. At most 64 items. |
expires_at |
string (date-time), nullable |
no |
When it stops working. From a key: required to be no later than the parent; defaults to the latest allowed. |
description |
string, nullable |
no |
What it is for — shown beside it in the console. At most 500 characters. |
require_approval |
object |
no |
Which of this key's actions need its owner's approval on their device first. From a key: never weaker than its own. |
require_approval.min_danger |
string, nullable |
no |
Every action at or above this danger waits for a person's approval. One of write, destructive, critical. |
require_approval.actions |
list of string |
no |
These actions wait for approval whatever their danger. At most 100 items. |
keys.list
List this environment's management keys (names, scopes, parents, expiry, last use — never their values).
|
|
| REST |
GET /api/v1/keys → 200 |
| Scope |
keys:read — required of the key or token. |
| Danger |
read |
| MCP tool |
keys_list |
| CLI |
cbox id keys list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
keys.revoke
Revoke a management key and every key it minted, immediately.
|
|
| REST |
DELETE /api/v1/keys/{id} → 204 |
| Scope |
keys:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
keys_revoke |
| CLI |
cbox id keys revoke <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The key to revoke. |
keys.rotate
Rotate a management key: mint a successor with the same scopes and retire the old one after a grace period.
|
|
| REST |
POST /api/v1/keys/{id}/rotate → 201 |
| Scope |
keys:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
keys_rotate |
| CLI |
cbox id keys rotate <id> |
| Secret |
data.token — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The key to rotate. |
grace_hours |
integer |
no |
How long the old key keeps working. Default 24. At least 0. At most 168. |
Sign-in
signin.policy.get
Read the authentication policy (password, MFA, SSO, lockout): the environment baseline, or one organization's effective rules and override.
|
|
| REST |
GET /api/v1/sign-in/policy → 200 |
| Scope |
signin:read — required of the key or token. |
| Danger |
read |
| MCP tool |
signin_policy_get |
| CLI |
cbox id signin policy get |
| Input |
Type |
Required |
Description |
organization_id |
string |
no |
Read one organization's rules. Left out, the environment baseline. At most 64 characters. |
signin.policy.inherit
Drop one organization's authentication policy override, so it inherits the environment baseline again.
|
|
| REST |
DELETE /api/v1/sign-in/policy/organizations/{organization_id} → 204 |
| Scope |
signin:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
signin_policy_inherit |
| CLI |
cbox id signin policy inherit <organization_id> |
| Input |
Type |
Required |
Description |
organization_id |
string (path) |
yes |
The organization whose override to drop. At most 64 characters. |
signin.policy.update
Change the authentication policy of the environment baseline, or tighten one organization's override. Requiring SSO signs out password sessions.
|
|
| REST |
PATCH /api/v1/sign-in/policy → 200 |
| Scope |
signin:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
signin_policy_update |
| CLI |
cbox id signin policy update |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
Write this organization's override. Left out, the environment baseline. At most 64 characters. |
min_length |
integer |
no |
Minimum password length. At least 8. At most 128. |
require_breach_check |
boolean |
no |
Refuse passwords that appear in known breaches. |
max_age_days |
integer, nullable |
no |
Days before a password must be changed; null for no limit. At least 1. At most 3650. |
reuse_history |
integer |
no |
How many previous passwords may not be reused. At least 0. At most 24. |
mfa |
string |
no |
Whether a second factor is off, optional or required. One of off, optional, required. |
sso |
string |
no |
Whether SSO is off, preferred, or required — required refuses every other way in and signs out password sessions. One of off, preferred, required. |
lockout_threshold |
integer, nullable |
no |
Failed attempts before an account is locked; null for the deployment default (10 inside 15 minutes unless CBOX_ID_LOCKOUT_THRESHOLD says otherwise). At least 3. At most 100. |
signin.self_service_signup.set
Switch self-service sign-up on or off: whether people can create an account and their own organization in this environment.
|
|
| REST |
PUT /api/v1/sign-in/self-service-signup → 200 |
| Scope |
signin:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
signin_self_service_signup_set |
| CLI |
cbox id signin self_service_signup set |
| Input |
Type |
Required |
Description |
enabled |
boolean |
yes |
On: anyone may create an account and their own organization. Off: people join by invitation. |
signin.social.delete
Stop offering a social login provider. People who used it keep their accounts.
|
|
| REST |
DELETE /api/v1/sign-in/social-providers/{id} → 204 |
| Scope |
signin:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
signin_social_delete |
| CLI |
cbox id signin social delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The provider's id. |
organization_id |
string, nullable |
no |
Only remove it if it is this organization's. At most 64 characters. |
signin.social.list
List the social login providers (Google, GitHub, Apple…) enabled in this environment, optionally for one organization.
|
|
| REST |
GET /api/v1/sign-in/social-providers → 200 |
| Scope |
signin:read — required of the key or token. |
| Danger |
read |
| MCP tool |
signin_social_list |
| CLI |
cbox id signin social list |
| Input |
Type |
Required |
Description |
organization_id |
string |
no |
Only this organization's providers. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
signin.social.set
Enable a social login provider (Google, GitHub, Apple…) for one organization with its client credentials. The secret is never returned.
|
|
| REST |
POST /api/v1/sign-in/social-providers → 201 |
| Scope |
signin:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
signin_social_set |
| CLI |
cbox id signin social set |
| Input |
Type |
Required |
Description |
organization_id |
string |
yes |
The organization whose sign-in page offers it. At most 64 characters. |
provider |
string |
yes |
The catalogue key: google, microsoft, okta, auth0, keycloak, gitlab, slack, github, discord, apple, facebook, linkedin, bitbucket, xero, intuit. At most 100 characters. |
client_id |
string |
yes |
The client id from your own account with the provider. For Apple, the Services ID. At most 400 characters. |
client_secret |
string, nullable |
no |
The client secret. Write-only. Not used by Apple, which signs its own. At most 5000 characters. |
parameters |
object |
no |
What the chosen provider needs besides its client credentials — Microsoft's directory, Okta's domain, Apple's team id, key id and private key. |
parameters.directory |
string, nullable |
no |
Directory (tenant) ID (Microsoft Entra ID). At most 5000 characters. |
parameters.domain |
string, nullable |
no |
Okta domain (Okta). At most 5000 characters. |
parameters.host |
string, nullable |
no |
Keycloak host (Keycloak). At most 5000 characters. |
parameters.key_id |
string, nullable |
no |
Key ID (Apple). At most 5000 characters. |
parameters.private_key |
string, nullable |
no |
Private key (.p8) (Apple). At most 5000 characters. |
parameters.realm |
string, nullable |
no |
Realm (Keycloak). At most 5000 characters. |
parameters.team_id |
string, nullable |
no |
Team ID (Apple). At most 5000 characters. |
Support sessions
support_sessions.end
End a support session now: every token it issued is revoked.
|
|
| REST |
DELETE /api/v1/support-sessions/{id} → 204 |
| Scope |
support:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
support_sessions_end |
| CLI |
cbox id support_sessions end <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The support session id. At most 64 characters. |
support_sessions.start
Start a support session: a staff member holding the app's support:impersonate acts as a customer's user in that app, for a reason and at most an hour. Optionally returns the first authorization code.
|
|
| REST |
POST /api/v1/support-sessions → 201 |
| Scope |
support:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
support_sessions_start |
| CLI |
cbox id support_sessions start |
| Secret |
data.code — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
user_id |
string |
yes |
The customer's user to act as. At most 64 characters. |
organization_id |
string |
yes |
The organization they are acted as in — one they are an active member of. At most 64 characters. |
client_id |
string |
yes |
The first-party app the session signs in to. At most 255 characters. |
actor_user_id |
string |
yes |
The staff member acting. They must hold the app's support:impersonate everywhere. At most 64 characters. |
reason |
string |
yes |
Why — on both audit trails and shown to the customer. At most 500 characters. |
ttl_minutes |
integer |
no |
How long it lasts. Default and maximum: the configured limit. At least 1. At most 60. |
scopes |
list of string |
no |
The scopes its tokens carry; settled to what one API can be audienced. At most 50 items. |
redirect_uri |
string |
no |
With code_challenge: return the session's first authorization code for this redirect URI. At most 2048 characters. |
code_challenge |
string |
no |
An S256 PKCE challenge: 43 base64url characters. At most 43 characters. |
nonce |
string, nullable |
no |
At most 255 characters. |
Token vault
token_vault.grants.create
Grant an app (by OAuth client id) the right to lease a stored credential.
|
|
| REST |
POST /api/v1/token-vault/secrets/{id}/grants → 200 |
| Scope |
token_vault:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
token_vault_grants_create |
| CLI |
cbox id token_vault grants create <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The secret's id. |
organization_id |
string, nullable |
no |
The organization whose vault this is. Left out: the environment's own secrets, a separate collection. At most 64 characters. |
client_id |
string |
yes |
The OAuth client id of the app that may lease it. At most 190 characters. |
token_vault.grants.delete
Withdraw an app's right to lease a stored credential.
|
|
| REST |
DELETE /api/v1/token-vault/secrets/{id}/grants/{client_id} → 204 |
| Scope |
token_vault:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
token_vault_grants_delete |
| CLI |
cbox id token_vault grants delete <id> <client_id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The secret's id. |
client_id |
string (path) |
yes |
The OAuth client id whose grant is withdrawn. At most 190 characters. |
organization_id |
string, nullable |
no |
The organization whose vault this is. Left out: the environment's own secrets, a separate collection. At most 64 characters. |
token_vault.secrets.create
Store a downstream credential (a third-party API key) in an organization's token vault, or the environment's own. The value is sealed and never returned.
|
|
| REST |
POST /api/v1/token-vault/secrets → 201 |
| Scope |
token_vault:write — required of the key or token. |
| Danger |
write |
| MCP tool |
token_vault_secrets_create |
| CLI |
cbox id token_vault secrets create |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
The organization whose vault this is. Left out: the environment's own secrets, a separate collection. At most 64 characters. |
name |
string |
yes |
What it is: "Stripe live key". At most 190 characters. |
provider |
string |
yes |
Whose credential it is: "stripe", "openai". At most 190 characters. |
secret |
string |
yes |
The credential. Write-only: sealed, never returned. At most 20000 characters. |
token_vault.secrets.get
Read one stored credential and the client ids granted to lease it. Never its value.
|
|
| REST |
GET /api/v1/token-vault/secrets/{id} → 200 |
| Scope |
token_vault:read — required of the key or token. |
| Danger |
read |
| MCP tool |
token_vault_secrets_get |
| CLI |
cbox id token_vault secrets get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The secret's id. |
organization_id |
string, nullable |
no |
The organization whose vault this is. Left out: the environment's own secrets, a separate collection. At most 64 characters. |
token_vault.secrets.list
List the downstream credentials stored in an organization's token vault (or the environment's own): names, providers, status. Never a value.
|
|
| REST |
GET /api/v1/token-vault/secrets → 200 |
| Scope |
token_vault:read — required of the key or token. |
| Danger |
read |
| MCP tool |
token_vault_secrets_list |
| CLI |
cbox id token_vault secrets list |
| Input |
Type |
Required |
Description |
organization_id |
string, nullable |
no |
The organization whose vault this is. Left out: the environment's own secrets, a separate collection. At most 64 characters. |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
token_vault.secrets.revoke
Revoke a stored credential permanently. No app can lease it again.
|
|
| REST |
POST /api/v1/token-vault/secrets/{id}/revoke → 200 |
| Scope |
token_vault:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
token_vault_secrets_revoke |
| CLI |
cbox id token_vault secrets revoke <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The secret's id. |
organization_id |
string, nullable |
no |
The organization whose vault this is. Left out: the environment's own secrets, a separate collection. At most 64 characters. |
token_vault.secrets.rotate
Replace a stored credential's value. Every later lease hands out the new one. The value is never returned.
|
|
| REST |
POST /api/v1/token-vault/secrets/{id}/rotate → 200 |
| Scope |
token_vault:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
token_vault_secrets_rotate |
| CLI |
cbox id token_vault secrets rotate <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The secret's id. |
organization_id |
string, nullable |
no |
The organization whose vault this is. Left out: the environment's own secrets, a separate collection. At most 64 characters. |
secret |
string |
yes |
The new value. Write-only: sealed, never returned. At most 20000 characters. |
Users
users.create
Create a user in this environment, optionally with a password, and optionally mail them a one-click sign-in link.
|
|
| REST |
POST /api/v1/users → 201 |
| Scope |
users:write — required of the key or token. |
| Danger |
write |
| MCP tool |
users_create |
| CLI |
cbox id users create |
| Input |
Type |
Required |
Description |
email |
string (email) |
yes |
At most 190 characters. |
name |
string, nullable |
no |
At most 190 characters. |
password |
string, nullable |
no |
Checked against this environment's password policy. Leave out for a user who signs in another way. At least 8 characters. At most 255 characters. |
send_sign_in_link |
boolean |
no |
Mail the new user a one-click sign-in link. Default false. |
users.deactivate
Deactivate a user: they can no longer sign in, and every OAuth grant they hold is revoked. Never deletes them.
|
|
| REST |
DELETE /api/v1/users/{id} → 200 |
| Scope |
users:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
users_deactivate |
| CLI |
cbox id users deactivate <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
users.erase
Erase a person (GDPR Art. 17): revoke their sessions and tokens, delete their credentials, memberships and personal data, and pseudonymise their account. Cannot be undone.
|
|
| REST |
POST /api/v1/users/{id}/erase → 200 |
| Scope |
users:erase — required of the key or token. |
| Danger |
critical |
| MCP tool |
users_erase |
| CLI |
cbox id users erase <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user's id. |
users.get
Get one user of this environment by id.
|
|
| REST |
GET /api/v1/users/{id} → 200 |
| Scope |
users:read — required of the key or token. |
| Danger |
read |
| MCP tool |
users_get |
| CLI |
cbox id users get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
users.list
List the users in this environment, a page at a time. Narrow by exact email, a q fragment of the address or name, or status.
|
|
| REST |
GET /api/v1/users → 200 |
| Scope |
users:read — required of the key or token. |
| Danger |
read |
| MCP tool |
users_list |
| CLI |
cbox id users list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
email |
string |
no |
Only the user with exactly this address (case-insensitive). At most 190 characters. |
q |
string |
no |
Only users whose address or name contains this. At most 190 characters. |
status |
string |
no |
Only users in this state. One of active, disabled, locked. |
users.mfa.reset
Reset a user's two-factor authentication: their authenticator and recovery codes are removed and they must enrol again.
|
|
| REST |
DELETE /api/v1/users/{id}/mfa → 204 |
| Scope |
users:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
users_mfa_reset |
| CLI |
cbox id users mfa reset <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
users.password.set
Set a user's password, temporary by default, and mail it to them unless told not to. Signs them out according to revoke.
|
|
| REST |
POST /api/v1/users/{id}/password → 200 |
| Scope |
users:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
users_password_set |
| CLI |
cbox id users password set <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
password |
string |
yes |
The new password. Checked against this environment's password policy. At most 200 characters. |
reason |
string |
yes |
Why — recorded on the audit trail. At most 200 characters. |
temporary |
boolean |
no |
The user must choose a new password at their next sign-in. Default true. |
expires_in_hours |
integer |
no |
A temporary password stops working after this many hours. 0 or absent: until changed. At least 0. At most 8760. |
revoke |
string |
no |
How much existing access to end. Default sessions_and_tokens. One of sessions_and_tokens, sessions_only, nothing. |
send_email |
boolean |
no |
Mail the password to the user. Default true. |
users.password_reset.send
Mail a user a password-reset link at their own address.
|
|
| REST |
POST /api/v1/users/{id}/password-reset → 204 |
| Scope |
users:write — required of the key or token. |
| Danger |
write |
| MCP tool |
users_password_reset_send |
| CLI |
cbox id users password_reset send <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
users.reactivate
Reactivate a deactivated user so they can sign in again. Grants revoked on deactivation stay revoked.
|
|
| REST |
POST /api/v1/users/{id}/reactivate → 200 |
| Scope |
users:write — required of the key or token. |
| Danger |
write |
| MCP tool |
users_reactivate |
| CLI |
cbox id users reactivate <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
List a user's live sign-in sessions, most recently active first: device, IP and whether somebody else opened it as them.
|
|
| REST |
GET /api/v1/users/{id}/sessions → 200 |
| Scope |
users:read — required of the key or token. |
| Danger |
read |
| MCP tool |
users_sessions_list |
| CLI |
cbox id users sessions list <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
End one of a user's sign-in sessions.
|
|
| REST |
DELETE /api/v1/users/{id}/sessions/{session_id} → 204 |
| Scope |
users:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
users_sessions_revoke |
| CLI |
cbox id users sessions revoke <id> <session_id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
session_id |
string (path) |
yes |
The session id, from GET /users/{id}/sessions. At most 64 characters. |
Sign a user out everywhere: end every session and revoke every OAuth grant they hold.
|
|
| REST |
DELETE /api/v1/users/{id}/sessions → 204 |
| Scope |
users:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
users_sessions_revoke_all |
| CLI |
cbox id users sessions revoke_all <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
users.update
Change a user's name and/or email address. A changed address must be verified again.
|
|
| REST |
PATCH /api/v1/users/{id} → 200 |
| Scope |
users:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
users_update |
| CLI |
cbox id users update <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
name |
string, nullable |
no |
At most 190 characters. |
email |
string (email) |
no |
The new address. Its verification is cleared. At most 190 characters. |
users.verification.send
Mail a user the link that verifies their email address. Does nothing for an address already verified.
|
|
| REST |
POST /api/v1/users/{id}/verification → 204 |
| Scope |
users:write — required of the key or token. |
| Danger |
write |
| MCP tool |
users_verification_send |
| CLI |
cbox id users verification send <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
users.verify
Mark a user's email address verified without the emailed link. It can then be used to recover the account.
|
|
| REST |
POST /api/v1/users/{id}/verify → 200 |
| Scope |
users:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
users_verify |
| CLI |
cbox id users verify <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The user id. At most 64 characters. |
Webhooks
webhooks.create
Register a webhook endpoint for one organization or the whole environment. Returns its signing secret once.
|
|
| REST |
POST /api/v1/webhooks → 201 |
| Scope |
webhooks:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
webhooks_create |
| CLI |
cbox id webhooks create |
| Secret |
data.secret — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
url |
string (uri) |
yes |
A public HTTPS URL. Signed deliveries are POSTed here. At most 500 characters. |
event_types |
list of string |
yes |
The events it receives. At least 1 items. |
signature_scheme |
string |
no |
How deliveries are signed: cbox (X-Cbox-Signature, the default) or standard_webhooks (webhook-id / webhook-timestamp / webhook-signature, verifiable with any Standard Webhooks library; the secret is a whsec_ secret). One of cbox, standard_webhooks. |
organization_id |
string, nullable |
no |
The organization it belongs to; it carries that organization's traffic only. Send this or environment_wide. At most 64 characters. |
environment_wide |
boolean |
no |
True to make it the environment's own, carrying EVERY organization's traffic. Send this or organization_id. |
webhooks.delete
Delete a webhook endpoint. It stops receiving events at once.
|
|
| REST |
DELETE /api/v1/webhooks/{id} → 204 |
| Scope |
webhooks:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
webhooks_delete |
| CLI |
cbox id webhooks delete <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The webhook endpoint id. |
webhooks.get
Get one webhook endpoint: URL, owner, subscribed events, health. Never its signing secret.
|
|
| REST |
GET /api/v1/webhooks/{id} → 200 |
| Scope |
webhooks:read — required of the key or token. |
| Danger |
read |
| MCP tool |
webhooks_get |
| CLI |
cbox id webhooks get <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The webhook endpoint id. |
webhooks.list
List the webhook endpoints registered in this environment: URL, owner, subscribed events and whether each is active.
|
|
| REST |
GET /api/v1/webhooks → 200 |
| Scope |
webhooks:read — required of the key or token. |
| Danger |
read |
| MCP tool |
webhooks_list |
| CLI |
cbox id webhooks list |
| Input |
Type |
Required |
Description |
limit |
integer |
no |
Items per page, 1–100. Default 50. |
after |
string |
no |
The next_cursor of the previous page. |
webhooks.pause
Pause a webhook endpoint: it stops receiving events until resumed.
|
|
| REST |
POST /api/v1/webhooks/{id}/pause → 200 |
| Scope |
webhooks:write — required of the key or token. |
| Danger |
write |
| MCP tool |
webhooks_pause |
| CLI |
cbox id webhooks pause <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The webhook endpoint id. |
webhooks.resume
Resume a paused webhook endpoint: it receives events again.
|
|
| REST |
POST /api/v1/webhooks/{id}/resume → 200 |
| Scope |
webhooks:write — required of the key or token. |
| Danger |
write |
| MCP tool |
webhooks_resume |
| CLI |
cbox id webhooks resume <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The webhook endpoint id. |
webhooks.secret.rotate
Issue a new signing secret for a webhook endpoint, returned once. The old secret stops verifying immediately.
|
|
| REST |
POST /api/v1/webhooks/{id}/rotate → 200 |
| Scope |
webhooks:write — required of the key or token. |
| Danger |
critical |
| MCP tool |
webhooks_secret_rotate |
| CLI |
cbox id webhooks secret rotate <id> |
| Secret |
data.secret — shown once, never kept for an idempotent replay |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The webhook endpoint id. |
webhooks.signature_scheme.change
Change how a webhook endpoint's deliveries are signed (cbox or standard_webhooks). No new secret is issued: a hex secret is used as whsec_ + base64 of itself. Update the receiver first.
|
|
| REST |
POST /api/v1/webhooks/{id}/signature-scheme → 200 |
| Scope |
webhooks:write — required of the key or token. |
| Danger |
destructive |
| MCP tool |
webhooks_signature_scheme_change |
| CLI |
cbox id webhooks signature_scheme change <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The webhook endpoint id. |
signature_scheme |
string |
yes |
The scheme deliveries are signed with from the next attempt. The secret is unchanged: under standard_webhooks a 64-hex secret is used as whsec_ + base64 of the hex string. Update the receiver before you switch. One of cbox, standard_webhooks. |
webhooks.update
Change a webhook endpoint's URL and/or the events it subscribes to.
|
|
| REST |
PATCH /api/v1/webhooks/{id} → 200 |
| Scope |
webhooks:write — required of the key or token. |
| Danger |
write |
| MCP tool |
webhooks_update |
| CLI |
cbox id webhooks update <id> |
| Input |
Type |
Required |
Description |
id |
string (path) |
yes |
The webhook endpoint id. |
url |
string (uri) |
no |
A public HTTPS URL. Left out, unchanged. At most 500 characters. |
event_types |
list of string |
no |
The COMPLETE set of events afterwards. Left out, unchanged. At least 1 items. |