Endpoint reference

All paths are relative to https://<your-api-host>/api/v1. Every list endpoint uses cursor pagination and returns newest-first.

Workspace

GET/ping

Establishes the session cookie and returns a CSRF token and the signed-in user. The only endpoint you may call before authenticating.

GET/workspacesession

The workspace name, inbound number, agent mode and timezone.

PATCH/workspaceowner, admin

Update the workspace name, timezone or transcript retention window.

Calls & transcripts

GET/callscalls:read

List calls, newest first.

FieldTypeDescription
outcomestringhot, qualified, review, not_suitable, no_intent.
from / todateInclusive bounds on started_at.
qstringMatches caller name, phone or intent.
limit / cursorint / stringStandard pagination.
GET/calls/{call_id}calls:read

A single call with its summary, captured fields, next action and full transcript.

json
{
  "id": "call_9f21",
  "started_at": "2026-09-09T08:42:00Z",
  "duration_seconds": 214,
  "caller": { "name": "Denise Okafor", "phone": "+447700900123" },
  "intent": "Selling a probate property",
  "outcome": "hot",
  "summary": "Three-bed semi in Walsall held in probate...",
  "captured": { "Postcode": "WS3 2NX", "Bedrooms": "3" },
  "next_action": "Call back today before 5pm",
  "transcript": [
    { "speaker": "agent", "at_second": 0, "text": "Good morning..." },
    { "speaker": "caller", "at_second": 4, "text": "Hi, I've got a house..." }
  ]
}
GET/calls/{call_id}/recordingcalls:read

Returns a short-lived signed URL for the audio, when a recording exists and retention has not expired.

Opportunities

GET/opportunitiesopportunities:read

Scored acquisition opportunities extracted from calls.

FieldTypeDescription
outcomestringhot, qualified, review, not_suitable.
min_scoreinteger0–100 buy-box score floor.
postcodestringFull or partial postcode prefix.
GET/opportunities/{opportunity_id}opportunities:read

Full property detail, the score breakdown, and the call it came from.

PATCH/opportunities/{opportunity_id}opportunities:write

Assign an owner, override the outcome, or add a desk note.

json
{ "owner": "usr_2", "outcome": "qualified", "note": "Viewing booked Thursday" }

Leads & contacts

GET/leadsleads:read

Every caller the agent has captured, with status and last call.

POST/leadsleads:write

Create a lead from another source, such as a web form. Send Idempotency-Key.

FieldTypeDescription
phone*stringE.164 preferred.
namestringOptional.
emailstringOptional.
source*stringFree-text origin, e.g. web_form.
notestringOptional desk note.
PATCH/leads/{lead_id}leads:write

Update status (new, handled, dismissed) or add a desk note.

GET/leads/{lead_id}/callscalls:read

Every call linked to this lead, newest first.

Agent draft & publishing

GET/agent/draftagent:read

The editable configuration: greeting, voice, transfer number, closing line, buy box and guardrails.

PUT/agent/draftagent:write

Full replacement. Read the draft, modify it, send the whole object back.

POST/agent/publishagent:write

Promotes the current draft to the live agent. Takes effect on the next inbound call.

GET/agent/publishedagent:read

What callers hear right now, plus who published it and when.

Guardrails cannot be removed below the platform minimum: the agent will never make an offer, quote a valuation, or give legal, tax or financial advice.

Team, keys & webhooks

GET/teamsession

Members and pending invitations with their roles.

POST/team/invitationsowner, admin

Invite an email address with a role.

DELETE/team/{member_id}owner, admin

Remove a member or revoke an invitation.

GET/api-keysowner, admin

Key labels, prefixes, scopes and last use. Secrets are never returned.

POST/api-keysowner, admin

Create a scoped key. The full secret appears in this response only.

DELETE/api-keys/{key_id}owner, admin

Revoke a key immediately.

GET/webhookswebhooks:manage

Configured endpoints, subscribed events and last delivery.

POST/webhookswebhooks:manage

Register an HTTPS endpoint and the events it should receive.

GET/audit-logowner, admin

Who changed what, when, with the request ID.