AgentDesk API

A JSON HTTP API over everything the dashboard shows: calls and transcripts, scored acquisition opportunities, leads and contacts, the agent draft, team access and webhook endpoints.

Base URL

Every endpoint lives under a single versioned prefix. Replace the host with the API address issued for your account.

http
https://<your-api-host>/api/v1

The version is part of the path. Breaking changes ship as /api/v2; additive fields can appear in v1 at any time, so ignore fields you do not recognise.

Requests and responses

Requests and responses are application/json, UTF-8. Timestamps are RFC 3339 in UTC (2026-09-09T08:42:00Z). Money is an integer in the smallest currency unit unless a field name says otherwise. Identifiers are opaque, prefixed strings — call_9f21, opp_31a — never assume a format or an order.

Send a unique X-Request-Id on every request. It comes back on the response and appears in our logs, which makes support conversations short.

Your first request

Server-to-server integrations use a scoped key. Create one in the dashboard under Settings → API keys, then read the last 25 calls:

bash
curl https://<your-api-host>/api/v1/calls?limit=25 \
  -H "Authorization: Bearer cak_live_..." \
  -H "X-Request-Id: $(uuidgen)"
json
{
  "data": [
    {
      "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",
      "recording_available": true
    }
  ],
  "next_cursor": null
}

Two ways in

Browser clients use a session cookie with a CSRF token. Servers use a scoped bearer key. Both are covered in Authentication.

Keys are scoped and tenant-bound. A key can only ever read or write inside the workspace that issued it, and a request for another workspace's record returns 404 rather than 403, so IDs cannot be probed.

Rate limits

Reads are limited per key and per workspace; writes are stricter. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. On 429, back off using the Retry-After header rather than retrying immediately.