Skip to main content
Languages: every operation supports cURL, Node.js (TypeScript), Python, Go, Ruby, and PHP. The first 15 operations on this page show all six languages; the remaining 5 show cURL and TypeScript — the two most-used.

Settings API

Workspace settings, API keys, and team membership Base path: /api/v1/settings Endpoint count: 20

List per-agent per-channel concurrency caps

GET /api/v1/settings/agent-channel-caps
Return every configured per-agent per-channel max-concurrent cap for the tenant. Optionally narrow to a single agent with ?agent_user_id=. A missing (agent, channel) row means “no cap, fail-OPEN”; a row with max_concurrent=0 blocks that agent from that channel entirely. Owner/admin only.
string
Narrow the list to one agent’s caps.

List Messenger personas

GET /api/v1/settings/channels/messenger/personas
Lists the virtual sender personas configured on the connected Messenger Page. The Page access token is held server-side and never exposed to the browser.

Read whether verbatim AI-turn audit logging is enabled

GET /api/v1/settings/compliance/ai-turn-audit
Return whether the org has opted in to verbatim AI-turn audit logging. When enabled, each turn’s system prompt, user prompt and assistant response are recorded to the org’s AI-turn audit log. Default OFF (fail-closed): audit logging is off until the org explicitly turns it on. Available to any member. (This is the Settings surface — distinct from GET /api/v1/agents/ai-turn-audit, which reads the recorded turns.)

GET /api/v1/settings/compliance/consent-default-policy
Return the org’s default consent policy — the policy Orbit applies when a contact has NO recorded consent. permit_on_missing (default, US TCPA legitimate-relationship posture) lets a send through on a missing record; deny_on_missing (EU GDPR affirmative opt-in posture) treats an unrecorded contact as a refusal. Universal legal protections (revoked consent, right-to-be-forgotten, opted-out) are never overridden by this setting. Available to any member.

Read the org’s per-channel and voice fraud velocity / spend caps

GET /api/v1/settings/compliance/fraud-caps
Return the org’s per-channel fraud velocity (per-minute) and daily-spend (cents) cap overrides plus the platform-wide FLOOR for each channel, and the parallel voice spend / velocity overrides. These caps are enforced on every outbound send. An override is null when no org override is set (the platform floor applies). Available to any member.

Read the org’s inbox-AI privacy toggles and spam-handling action

GET /api/v1/settings/compliance/inbox-ai-privacy
Return whether the two default-ON inbox-AI behaviours are enabled and the spam action. auto_categorize governs whether inbound messages are automatically categorized; auto_summarize governs whether conversations are summarized when closed. Both default ON — an org that never opted out reads as enabled. spam_action is the action applied when a message is classified as spam with high confidence (none tags the message as spam but takes no further action). Available to any member.

GET /api/v1/settings/compliance/unknown-marketing-policy
Return the org’s unknown_marketing_policy — the policy Orbit applies to a marketing send when a contact’s consent state is unknown. refuse (default, GDPR/PECR/LGPD-conservative) never sends; allow_with_logging (US double-opt-out / B2B legitimate-interest) sends and records a per-contact audit entry. Available to any member.

Get your current IP address

GET /api/v1/settings/ip-allowlist/current-ip
Returns your current IP address as the API sees it, plus whether IP-allowlist enforcement is active for your account. Use it to add the correct IP to your allowlist without locking yourself out. ip is null when your IP address cannot be determined; enforced is false when allowlist enforcement is not applied in the current environment.

Create an API key

POST /api/v1/settings/api-keys
Mint a new tenant API key. The key value is returned ONLY on this response (Cache-Control: no-store) — store it immediately. mode: 'test' activates sandbox-mode (no real provider hits, no billing). Optional per-key allowed_ips enforces an IP allowlist at auth time.
string
required
Human-readable label shown in the dashboard. Not used for authentication.
string (enum: secret|public)
secret = server-only dv_*_sk_* key; public = browser-safe pk_* key for the embed SDK.
string[]
API key permission scopes (e.g. messages:write). At least one scope is required for keys minted after 2026-08-01; empty-scope keys are deprecated and treated as least-privilege (viewer) / will be rejected after the grandfather deadline.
string (enum: live|test)
test keys never deliver messages and never bill; useful for CI/staging.
string (enum: never|30d|90d|1y)
string[]
Optional IP/CIDR allowlist. Auth middleware rejects requests from a non-allowlisted source.

Create a Messenger persona

POST /api/v1/settings/channels/messenger/personas
Creates a new virtual sender persona on the connected Messenger Page. Meta mints the id; the supplied name and avatar are echoed back so the UI can render the row without a refetch.
string
required
Display name shown to the recipient.
string
required
HTTPS avatar URL. Meta fetches it at create time and rejects non-https schemes.

Record a completed self-service password change

POST /api/v1/settings/security/password-changed
Record a completed password change for the authenticated user and send them the matching security alert — an in-app notification, a security email, and a mobile push. Call this after a self-service password change succeeds so the user is notified that their credentials were updated. Only the authenticated caller is ever notified, so the endpoint cannot raise an alert on another account. The request body is optional and ignored; the response returns ok and the changed_at timestamp of the recorded change.

Upsert one per-agent per-channel concurrency cap

PUT /api/v1/settings/agent-channel-caps
Set the maximum simultaneous open interactions of one channel an agent can be routed (e.g. agent X = 3 chats). max_concurrent=0 opts the agent OUT of that channel entirely; a positive value caps concurrency; deleting the row reverts to “no cap”. Idempotent upsert keyed on (agent_user_id, channel). Owner/admin only.
string
required
any
required
integer
required

Bulk upsert per-agent per-channel concurrency caps

PUT /api/v1/settings/agent-channel-caps/bulk
Upsert a batch of (agent_user_id, channel, max_concurrent) caps in one call — the team-members cap-matrix save. Idempotent: re-sending an (agent, channel) pair updates its existing cap instead of creating a duplicate. Up to 500 rows; duplicate (agent, channel) keys in the payload keep the last value. Owner/admin only.
object[]
required

Opt the org in/out of verbatim AI-turn audit logging

PUT /api/v1/settings/compliance/ai-turn-audit
Enable or disable verbatim AI-turn audit logging. Owner only — the setting governs whether the full system prompt, user prompt and assistant response of every AI turn is recorded to the org’s AI-turn audit log (a multi-year verbatim store of PII).
boolean
required

Upsert the org’s per-channel and/or voice fraud caps

PUT /api/v1/settings/compliance/fraud-caps
Upsert per-channel fraud cap overrides. Owner only — it governs the outbound velocity / spend limits enforced on every send. caps is a sparse map keyed by messaging channel; only channels present are touched. A leaf number SETs the override; a leaf null REMOVEs it (reverting to the platform floor). voice carries the parallel per-org voice overrides, with country_max_per_min a per-destination-country calls/min map that REPLACES the stored map wholesale (an empty map clears it). Other fraud-protection settings (e.g. the country allowlist) are left untouched.

PATCH /api/v1/settings/compliance/consent-default-policy
Switch the default consent policy between permit_on_missing and deny_on_missing. Owner only — it changes whether a message reaches a contact with no recorded consent. The change takes effect immediately.

Update the org’s inbox-AI privacy toggles and/or spam action

PATCH /api/v1/settings/compliance/inbox-ai-privacy
Opt the org in/out of inbox auto-categorize and/or auto-summarize, and/or set the spam action. Owner only. Each field is optional so a single toggle can be flipped without resending the others — at least one of auto_categorize, auto_summarize or spam_action must be present. A change can take up to a minute to take effect. The response reflects the merged state of all three fields.
boolean
boolean
string (enum: none|archive|close)

PATCH /api/v1/settings/compliance/unknown-marketing-policy
Switch the marketing posture for unknown-state contacts between refuse and allow_with_logging. Owner only — flipping to allow_with_logging widens who the platform will lawfully market to, so it requires a documented decision: reason (a written justification of at least 10 characters) and lawful_basis are BOTH mandatory when setting allow_with_logging. The change — including the previous value, the administrator, the reason, and the lawful basis — is recorded in the tamper-evident audit chain. Tightening back to refuse needs neither field.
string (enum: refuse|allow_with_logging)
required
string
Written justification for the change. Required (minimum 10 characters) when unknown_marketing_policy is allow_with_logging; recorded in the audit trail.
string (enum: legitimate_interest|existing_business_relationship|consent|contract|other)
The lawful basis relied on for the looser posture. Required when unknown_marketing_policy is allow_with_logging.

Clear a per-agent per-channel concurrency cap

DELETE /api/v1/settings/agent-channel-caps/{agentUserId}/{channel}
Remove the cap row for one (agent, channel) pair, reverting it to the “no cap, fail-OPEN” default. Returns 404 when no cap was configured for that pair. Owner/admin only.
string
required
any
required

Delete a Messenger persona

DELETE /api/v1/settings/channels/messenger/personas/{personaId}
Removes a virtual sender persona from the connected Messenger Page by its Meta object id. Returns 204 on success.
string
required
Meta persona object id (numeric string).
Response: 204 No Content