Skip to main content
The Contacts API lets you sync contacts into a client workspace from external systems — your CRM, e-commerce platform, or lead forms. All phone numbers must be in E.164 format (e.g. +14155552671).
You are responsible for ensuring all contacts have given explicit opt-in consent to receive WhatsApp messages before importing them. Sending messages to contacts without prior consent violates Meta’s WhatsApp Business Policy and may result in your number being restricted or banned. Always record the source and date of consent for each contact.

GET /workspaces//contacts

List all contacts in a workspace. Supports full-text search, tag filtering, opt-in status filtering, and pagination.

Path Parameters

string
required
The unique ID of the workspace whose contacts you want to list.

Query Parameters

Full-text search across contact name, phone number, and email.
string
Filter contacts that have this tag applied (e.g. vip, lead).
string
Filter by opt-in status. Accepted values: opted_in, not_set, opted_out.
integer
Page number to retrieve. Defaults to 1.
integer
Number of results per page. Defaults to 20. Maximum is 100.

Request

List contacts

Response


POST /workspaces//contacts

Create a new contact, or update an existing one if a contact with the same phone number already exists (upsert behavior). This makes it safe to call repeatedly from sync jobs without creating duplicates.

Path Parameters

string
required
The unique ID of the workspace to create the contact in.

Body Parameters

string
required
The contact’s phone number in E.164 format (e.g. +14155552671). Used as the unique identifier for upsert.
string
The contact’s first name.
string
The contact’s last name.
string
The contact’s email address.
array
A list of string tags to apply to the contact (e.g. ["lead", "webinar-2024"]). Tags are created automatically if they don’t already exist.
object
A key-value object of custom field data to store on the contact (e.g. {"order_count": "5", "loyalty_tier": "gold"}).
string
The contact’s WhatsApp messaging consent status. Accepted values: opted_in, not_set. Defaults to not_set if omitted.

Request

Create or upsert a contact

Response


GET /workspaces//contacts/

Retrieve a single contact by their ID.

Path Parameters

string
required
The unique ID of the workspace.
string
required
The unique ID of the contact to retrieve (e.g. con_7a2b3c4d5e).

Request

Get a contact

Response


PATCH /workspaces//contacts/

Update one or more fields on an existing contact. Only the fields you provide are changed; all other fields remain unchanged.

Path Parameters

string
required
The unique ID of the workspace.
string
required
The unique ID of the contact to update.

Body Parameters

string
Updated first name.
string
Updated last name.
string
Updated email address.
array
Replaces the contact’s existing tags with this new list.
object
Merges these key-value pairs into the contact’s existing custom fields.
string
Updated opt-in status. Accepted values: opted_in, not_set, opted_out.

Request

Update a contact

Response


POST /workspaces//contacts/import

Bulk import contacts by uploading a base64-encoded CSV file. Imports are processed asynchronously — the endpoint returns immediately with an import_id you can use to track progress.

Path Parameters

string
required
The unique ID of the workspace to import contacts into.

Body Parameters

string
required
A base64-encoded CSV string. The CSV must include a phone column. Supported columns: phone, first_name, last_name, email, tags, opt_in_status.
string
How to handle contacts whose phone number already exists. Accepted values: skip (leave existing record unchanged) or update (overwrite fields with CSV values). Defaults to update.

Request

Bulk import contacts

Response

Imports are processed asynchronously. The returned import_id can be used to track the progress of your import — including the number of contacts created, updated, skipped, and any row-level errors — via the import status endpoint documented in your dashboard’s API settings.