Contacts
Manage the people your agents call.
A contact is a person in your workspace, identified by your own externalRef. Contacts carry a phone number, preferences, opt-out state, and arbitrary attributes.
The contact object:
{
"id": "con_…",
"externalRef": "your-record-id",
"phone": "+919812345678",
"dnd": false,
"optOut": false,
"preferredLanguage": "hi",
"lastContactAt": "2026-08-20T12:00:00Z",
"attributes": { "plan": "gold" }
}
dnd reflects the platform do-not-call registry and lastContactAt are read-only (set by the system); everything else you control.
List contacts
GET /v1/contacts · scope contacts:read · query limit (1–200, default 50)
{ "data": [ { "id": "con_…", "externalRef": "…", "phone": "+91…", … } ] }
Create or update (upsert)
POST /v1/contacts · scope contacts:write
Upserts by externalRef within your workspace: if a contact with that ref exists it’s updated (200), otherwise it’s created (201).
Body
| Field | Type | Required | Default / constraints |
|---|---|---|---|
externalRef |
string | yes | your id, 1–120 chars (immutable identity) |
phone |
string | yes | 8–20 chars |
preferredLanguage |
enum | no | en or hi, default en |
timezone |
string | no | default Asia/Kolkata |
attributes |
object | no | arbitrary key/values, default {} |
optOut |
boolean | no | default false |
Response
201 (created) or 200 (updated): { "data": contact }.
Update a contact
PUT /v1/contacts/:id · scope contacts:write
Same fields as upsert except externalRef (identity can’t change). Response 200: { "data": contact }. Unknown id → 404 contact not found.
Delete a contact
DELETE /v1/contacts/:id · scope contacts:write → { "data": { "id": "con_…", "deleted": true } }.
409 contact has call history - cannot delete- a contact with calls can’t be hard-deleted. Use erase instead.404 contact not found
Erase a contact (DPDP)
POST /v1/contacts/:id/erase · scope contacts:write · no body
Honors a data-subject erasure request: it wipes the contact’s personal data - identity, transcripts, and recordings - while keeping non-personal compliance proof. Unlike delete, erase works even when the contact has call history, and it’s idempotent.
Response 200: { "data": <erasure result> }. Unknown id → 404.
Next: Campaigns →