Skip to main content

Account API

The authenticated user’s profile, preferences, and speed-dial favorites Base path: /api/v1/me Endpoint count: 14

Get the authenticated user

GET /api/v1/me/
Returns the authenticated user plus the active tenant and the list of organizations the user belongs to. The mobile client uses this to bootstrap post-login (replaces the legacy EXPO_PUBLIC_ORBIT_TENANT_ID env-var hack). The dashboard uses the same shape for the org-picker + Settings → Profile cards.

Get the caller’s saved AI campaign drafts

GET /api/v1/me/campaign-drafts
Returns the authenticated user’s saved AI Studio → Brief to draft campaign drafts (or an empty list). Each entry is { id, name, brief, draft, channels, createdAt, updatedAt }, where draft is the generated campaign blueprint or null when only the brief was saved. History is saved to your account (not browser storage), so it survives clearing your browser or signing in from another device.

GET /api/v1/me/favorites

GET /api/v1/me/favorites

Get the caller’s saved generated-report history

GET /api/v1/me/generated-reports
Returns the authenticated user’s saved Insights → Reports history — report metadata only (id, name, type, generatedAt, columns); the underlying report rows are never stored on your account. History is saved to your account, so it survives clearing your browser or signing in from another device.

Get the caller’s saved Recommendations tester draft

GET /api/v1/me/recommendations-draft
Returns the authenticated user’s saved Audience → Recommendations tester draft — the candidate catalog, profile signals, and scoring controls the operator was editing. draft is null when nothing has been saved yet. The draft is saved to your account, so it survives clearing your browser or signing in from another device.

Get the caller’s distinctive-ring rules

GET /api/v1/me/ring-rules
Returns the authenticated user’s distinctive-ring rules plus the ring-pattern catalog for the picker. Each rule assigns a ring pattern (VIP, priority, urgent, …) to an exact caller number (pstn) or an E.164 prefix (prefix) so an important inbound call can be told apart by sound. Rules are saved to your account (not browser storage), so they survive clearing your browser or signing in from another device.

POST /api/v1/me/favorites

POST /api/v1/me/favorites
string (enum: pstn|extension|contact_id|sip)
required
What kind of dial target this favorite points at — pstn for an E.164 phone number, sip for a sip: URI, extension for an internal extension, or contact_id for a saved contact.
string
required
The dial target itself, matching target_kind: an E.164 number for pstn (e.g. +14155552671), a sip: URI for sip, or a free-form identifier for extension / contact_id (1–512 characters).
string | null
Optional display label shown next to the favorite in the dialpad (up to 64 characters). Omit or send null for no label.
integer
Optional position used to order favorites in the dialpad, lowest first. Defaults to 0; range 0–100000.

Replace the caller’s saved AI campaign drafts

PUT /api/v1/me/campaign-drafts
Replaces the authenticated user’s saved AI Studio → Brief to draft campaign drafts in a single call. Send the full list in drafts (array, up to 50 entries), each { id, name, brief, draft, channels, createdAt, updatedAt } — this is a full replace, not per-item updates. The list is re-validated and re-bounded (max 50 entries, size-capped) server-side before it is saved.
any[]
required

Replace the caller’s saved generated-report history

PUT /api/v1/me/generated-reports
Replaces the authenticated user’s saved Insights → Reports history in a single call. Send the full list in reports (array, up to 50 entries), each { id, name, type, generatedAt, columns } — this is a full replace, not per-item updates. Report metadata is validated and capped (max 50 reports) server-side; report rows are never accepted or stored.
object[]
required

Replace the caller’s saved Recommendations tester draft

PUT /api/v1/me/recommendations-draft
Replaces the authenticated user’s saved Audience → Recommendations tester draft in a single call. Send the full editable state under draftcatalog (non-empty, max 200 items), signals (max 200), profileId, limitRaw, halfLifeRaw, suppressPurchased, and weightsRaw. This is a full replace, not a per-field patch; the payload is re-validated and re-bounded server-side before it is saved.
any
required

Replace the caller’s distinctive-ring rules

PUT /api/v1/me/ring-rules
Replaces the authenticated user’s distinctive-ring rules in a single call. Send the full list in rules (array, up to 50 entries), each { match_kind, match_value, pattern, label? } — this is a full replace, not per-item updates. Every rule is re-validated server-side (E.164 for pstn, a leading-+ E.164 prefix for prefix, a known pattern) and de-duplicated by target before it is saved.
any[]
required

Update per-user preferences

PATCH /api/v1/me/
Partial update of the authenticated user’s preferences. Only fields supplied in the body are written. Returns the updated subset so the FE can confirm the persisted value without a second GET.
string | null (enum: compact_bottom_bar|floating_panel|side_panel|null)
Softphone widget layout. NULL resets to the platform default.
boolean
When TRUE every voicemail assigned to this user triggers an audio-attached email via the dispatcher scheduler.
string | null
Alternate routing address. NULL clears to users.email.
string | null
Operator signature block (≤ 2 000 chars). NULL or whitespace-only string clears the persisted value.

PATCH /api/v1/me/favorites/

PATCH /api/v1/me/favorites/{id}
string
required
string | null
New display label for the favorite (up to 64 characters). Send null to clear the existing label.
integer
New position used to order favorites in the dialpad, lowest first. Range 0–100000.

DELETE /api/v1/me/favorites/

DELETE /api/v1/me/favorites/{id}
string
required