Skip to content

Headless

The dashboard is a client

Product resources use the same /v1 API your integration calls. Create agents, run campaigns, receive structured outcomes, and bring inbound caller requests into your own workflow.

Signup, onboarding, and first-key setup run in the browser. Once you have a key, your team can automate the resources and scopes it authorizes.

The loop, end to end

Launch a call with a question that matters today. The agent asks it, records the answer, and, for an enabled event, queues a signed result to your configured endpoint.

POST /v1/calls
{
  "agent_id":   "agnt_01J9…",
  "contact_id": "cont_01J9…",
  "questions": [{
    "id": "q_delivered",
    "prompt": "Did yesterday's delivery arrive on time?",
    "scoring": { "scale": "boolean", "mapping": { "true": 1, "false": 0 } }
  }],
  "context": { "order_number": "A-1009" }
}

# when call.ended is enabled, an HMAC-signed event is queued at completion:
{
  "type": "call.ended",
  "data": {
    "disposition": "completed_no_goal",
    "duration_ms": 93000,
    "survey_response": {
      "score": 1.0,
      "answers": { "q_delivered": { "answer": true, "verbatim_quote": "yes it did" } }
    },
    "transcript_url": "/v1/calls/call_01J9…/transcript"
  }
}

Test keys route telephony to a mock provider, so your team can safely iterate on the integration without a carrier call.

Built for production integrations

Results come to you

One signed webhook endpoint per tenant. Send call outcomes, dispositions, and structured survey or shift results into your stack, inspect delivery attempts, rotate the secret, and redrive an exhausted delivery yourself.

Receive results →

Start from a working workflow

Instantiate a template for lead qualification, staffing availability, shift reminders, candidate follow-up, customer feedback, or sales outreach. Make its questions, objectives, knowledge, and voice your own, then publish the version you approved.

Build an agent →

Turn inbound calls into work

Receptionist tools can take a message, open a support request, schedule a callback, or update a known caller’s lead status. The native Inbox keeps the resulting work visible to your team and can deliver approved actions to your endpoint.

Browse the API →

Errors you can branch on

Every non-2xx is an RFC 9457 problem whose type URI resolves to a public registry page, one page per code, hundreds of codes, kept in lockstep with the source by a build gate. Your error handling reads like a switch statement, not a regex.

Error registry →

A compliance floor with no override

AI disclosure plays before the model speaks. Opt-outs are honored by a detector outside the model. Every dial passes the dialability gate, and a check that cannot complete blocks the call. No API field, plan tier, or support ticket switches any of it off, which is precisely what makes the rest of the API safe to automate.

Campaigns & pre-dial checks →

One surface, and we can show our work

The control plane assembles a single list of consumer routers and mounts it at /v1: one list, and it is the same list your key calls. The reference is generated from the same OpenAPI document the dashboard's own client is typed against, so it cannot drift from what actually answers.