Contacts API
Create, update, and manage your contact directory Base path:/api/v1/contacts
Endpoint count: 26
List contacts
GET /api/v1/contacts/string
Opaque cursor for the next page (from previous response meta.pagination.cursor)
integer
Number of items per page (1–200, default 25)
string
Free-text search across name, phone, email
string
Filter by lifecycle stage
string
Filter by country code
string
Comma-separated tag filter
boolean
Only contacts with a phone number
boolean
Only contacts with an email address
string
Created after this date
string
Created before this date
Get a contact by ID
GET /api/v1/contacts/{id}404 when no contact matches the ID.
string
required
Contact ID
Get the enabled frequency-cap config rule rows (grouped_by_channel + global_caps) that apply to a contact
GET /api/v1/contacts/{id}/frequency-capsstring
required
—
Unified customer-journey timeline for a contact
GET /api/v1/contacts/{id}/journeystring
required
—
Export the contact journey timeline as CSV
GET /api/v1/contacts/{id}/journey.csvstring
required
—
Predictive next-best-action suggestions for a contact
GET /api/v1/contacts/{id}/next-best-actionstring
required
—
List notes for a contact
GET /api/v1/contacts/{id}/notesstring
required
—
Get tri-state consent preferences (opted_in | opted_out | unknown) per channel for a contact
GET /api/v1/contacts/{id}/preferencesstring
required
—
Customer 360 unified profile for a contact
GET /api/v1/contacts/{id}/profilestring
required
—
Unified chronological contact timeline (messages + calls + tickets + events)
GET /api/v1/contacts/{id}/timelinestring
required
—
List currently-blocked contacts (audit #INX-F-011).
GET /api/v1/contacts/blockedList recent contact import jobs
GET /api/v1/contacts/import-jobsDownload skipped-rows CSV for a contact import job
GET /api/v1/contacts/import-jobs/{id}/skipped.csvstring
required
—
Create a contact
POST /api/v1/contacts/string
Phone number in international (E.164) format, e.g.
+14155552671. Display formats (+1 (415) 555-1234) and PBX-extension suffixes (+14155551234 x1234) are accepted and normalized server-side to E.164 before insert. Optional when an email (or other identifier) is supplied — a blank/empty string is treated as omitted; a non-empty value must be at least 3 characters (the E.164 floor).string
Email address
string
First name
string
Last name
string
Display name
string
Company or organization
string
ISO 3166-1 alpha-2 country code
string
IANA timezone identifier
string
ISO 639-1 language code
string[]
Contact tags
object
Custom attributes
Block a contact. Outbound sends are rejected; inbound still arrives.
POST /api/v1/contacts/{id}/blockCONTACT_BLOCKED. Inbound messages from a blocked
contact continue to arrive as normal — they are not auto-routed to a Spam folder
and their conversation folder is not changed. If content looks like spam, the
inbound classifier may add a “Suspected spam” badge for your agents to review,
but no routing or folder move happens automatically.
string
required
—
Create a note on a contact
POST /api/v1/contacts/{id}/notesstring
required
Contact ID
string
required
Note content (1-10000 characters)
boolean
Whether the note should be pinned (default: false)
Unblock a contact.
POST /api/v1/contacts/{id}/unblockstring
required
—
Bulk contact actions
POST /api/v1/contacts/actionsstring (enum: tag|untag|stage_change|delete|add_to_list)
required
Action to apply to all contacts in the request
string[]
required
Array of contact IDs to apply the action to (1-10000 items)
string
Tag name (required when action is tag or untag; 1-50 characters)
string (enum: lead|contacted|prospect|in_progress|active|customer|re_engagement|inactive|churned|archived)
Lifecycle stage to move contacts to (required when action is stage_change)
string
Contact list ID (required when action is add_to_list)
Bulk import contacts
POST /api/v1/contacts/bulkimport_batch_id that can be used to download the skipped-rows CSV (GET /import-jobs/{id}/skipped.csv) and to roll back within 24 hours.
object[]
required
—
object[]
—
object[]
—
integer
—
Bulk delete contacts (soft delete)
POST /api/v1/contacts/bulk-deletestring[]
required
Array of contact IDs to delete (soft delete, 1-1000 items)
Export contacts
POST /api/v1/contacts/exportUpdate a contact
PUT /api/v1/contacts/{id}phone, email, and country_code, send null (or an empty string) to clear the stored value. Returns the updated contact.
string
required
Contact ID
string
Phone number in E.164 format, e.g.
+14155552671. Send null or an empty string to clear it.string
Email address. Send
null or an empty string to clear it.string
First name (max 100 characters).
string
Last name (max 100 characters).
string
Display name (max 200 characters).
string
Company or organization (max 200 characters).
string
ISO 3166-1 alpha-2 country code. Send
null or an empty string to clear it.string
IANA timezone identifier.
string
ISO 639-1 language code.
string[]
Contact tags (max 50).
string (enum: lead|contacted|prospect|in_progress|active|customer|re_engagement|inactive|churned|archived)
Lifecycle stage. Moving an archived contact to another stage also requires
unarchive: true.object
Custom attributes.
Update a contact note
PATCH /api/v1/contacts/{id}/notes/{noteId}string
required
—
string
required
—
Delete a contact
DELETE /api/v1/contacts/{id}204 No Content on success.
string
required
Contact ID
Delete a contact note
DELETE /api/v1/contacts/{id}/notes/{noteId}string
required
—
string
required
—
Revert a contact merge
POST /api/v1/contacts/unmerge/{mergeId}merge_id
returned by the merge that folded the contacts together. Within the window the
folded-in contacts are restored and the response returns restored_primary_id,
the list of restored_secondary_ids that were brought back, undo_path: "fast",
and age_seconds (how long after the merge the revert ran).
After 30 minutes this endpoint no longer reverts the merge and responds with
410 (UNDO_EXPIRED). To revert an older merge, contact support for the 30-day
manual revert path. Other error responses:
404(UNDO_NOT_FOUND) — no undo record exists for thismergeId(for example, a merge made before fast-undo was available, or one that has already been rolled off the window).410(UNDO_ALREADY_USED) — the merge has already been reverted.422(DEDUP_FAILED) — the revert could not be completed. Refresh the contact list and retry within the remaining window, or contact support if the problem persists.
string
required
The
merge_id of the merge to revert.