API docs
Contacts & opt-outs
Contacts are your workspace’s phone book — one row per phone number, carrying consent/DND state and variables.
Contacts
GET /v1/contacts— filters:phone(exact E.164),q(name search),dnd_status(unknown|clean|dnd),consent_status(unknown|consented|withdrawn) + pagination.GET /v1/contacts/{id}POST /v1/contacts—{phone_e164 (required, E.164), name?, metadata?}. Duplicate number →409 contact_existswithexisting_id.PATCH /v1/contacts/{id}—{name?, metadata?}.
Contact object: id, phone_e164, name, email, external_id, variables, metadata, consent_status, dnd_status, created_at, updated_at.
Opt-outs
Opt-outs set a number’s DND state. The dialer enforces this authoritatively — an opted-out number is refused both at POST /v1/calls time (422 recipient_dnd) and again at dial time, even if it was opted out after queueing.
POST /v1/opt-outs—{phone_e164, reason?}→ setsdnd_status: "dnd"(creates the contact if needed) and writes an auditable consent record.DELETE /v1/opt-outs/{phone_e164}→ back to"clean"(also audited).GET /v1/opt-outs/{phone_e164}→{phone_e164, dnd_status, consent_status};404if the number is unknown.