Skip to main content
Every public API request must include your API key as a bearer token in the Authorization header:
The public API base URL is:
Example:
Only send API keys over HTTPS. Do not expose API keys in browser code, mobile app bundles, client-side logs, screenshots, or support tickets.

Manage keys

Create, rotate, and revoke API keys from the API Keys page in the dashboard. Keys are shown once when created or rotated. Store the value securely before leaving the page. The same bearer API keys authenticate the MCP action endpoint. Its advertised tool list is filtered by these scopes. That endpoint also accepts OAuth 2.1, which is the better fit for a hosted AI assistant: the user approves the scopes in a browser instead of pasting a key into a chat. The scopes below are the same ones the consent screen grants. See MCP action tools for the flow. Agency admins can manage keys for their own agency.

Scopes

API keys are scoped by module. Launch scopes are: For module scopes with both read and write variants, write scope also covers the same module’s read scope. For example, agents:write covers agents:read. If a key is missing the required scope, the API returns:
Branch on error and read the missing scope from requiredScope. message is for people and its wording can change. See Conventions for the error shape.
Sensitive operations use explicit write, delete, or release scopes in addition to the existing role, tenant, ownership, billing, and resource-state checks.
Some scopes in the table cover modules that are not yet in the public reference, such as webhooks:*, events:read, configuration:*, whitelabel:* and dashboard:write. They are issuable and enforced today, and no published endpoint requires them. See What is not here.

Rate limits

Every request counts against per-key, per-key-and-IP and per-IP limits, and the RateLimit-* headers on each response tell you where you stand. The numbers and the headers are in Conventions.

Next steps