List contacts
Changed onRetrieve a paginated list of contacts, most recently created first. Optionally filter by email, phone number, or consent status.
Unfiltered, the list covers every contact in the account whatever their consent state, so pagination.total_count is the size of your contact list — not the size of your mailable or textable audience. Filter on email_consent=subscribed or sms_consent=subscribed for those. Contacts you have deleted are excluded — but deletion is soft: creating a contact with the same email or phone number restores the existing record rather than creating a new one, so a previously deleted contact can reappear here later with its original id and history.
Required scope: contacts_read
Request
- Base URLhttps://api.privy.com/v1
- AuthHTTP bearer
Query parameters
Page number (starts at 1).
Number of results per page. Values outside 10–100 are clamped to the nearest bound.
Filter by exact email address.
Filter by exact phone number (E.164 format).
Filter by email consent status. subscribed matches both explicit and implicit opt-in. suppressed matches merchant-suppressed contacts only; compliance_suppressed matches system/compliance-suppressed contacts.
Filter by SMS consent status.
Only contacts created strictly after this ISO 8601 datetime (or date). Zone-less datetimes are interpreted as UTC; bare dates as midnight US Eastern time.
Only contacts created strictly before this ISO 8601 datetime (or date). Zone-less datetimes are interpreted as UTC; bare dates as midnight US Eastern time.
Only contacts updated strictly after this ISO 8601 datetime (or date). Zone-less datetimes are interpreted as UTC; bare dates as midnight US Eastern time.
Only contacts updated strictly before this ISO 8601 datetime (or date). Zone-less datetimes are interpreted as UTC; bare dates as midnight US Eastern time.
Only contacts touched by this import — including contacts that already existed before it ran. Takes an email import id (im_…) from a contact's import_ids. Unknown or malformed ids return a 422; SMS consent imports (sim_…) do not link to contacts.
Headers
Target a subaccount instead of the main connected account. Pass a subaccount id from get_account's subaccounts list. Only direct subaccounts of the connected account are reachable — omit this for the main account itself.
Response
A paginated list of contacts.
Example response
{
"data": [
{
"id": "cus_a1b2c3d4e5f6g7h8",
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"email_consent": "subscribed",
"email_consent_at": "2025-03-20T14:22:00Z",
"phone_number": "+15551234567",
"sms_consent": "subscribed",
"sms_consent_at": "2025-03-20T14:22:00Z",
"source": "csv",
"source_type": "import",
"imported": true,
"import_ids": [
"im_k2R5m8Q"
],
"tags": [
"vip",
"repeat-buyer"
],
"custom_fields": {
"loyalty_tier": "gold",
"referral_code": "JANE2024"
},
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-03-20T14:22:00Z"
}
],
"pagination": {
"page": 1,
"per_page": 25,
"total_count": 142,
"total_pages": 6
}
}Changes
- warning
added the new
forbiddenenum value to the/response property for the response status - warning
added the new
forbiddenenum value to the/response property for the response status - warning
added the new
forbiddenenum value to the/response property for the response status - warning
added the new
forbiddenenum value to the/response property for the response status - warning
added the new
forbiddenenum value to the/response property for the response status - warning
added the new
segment_builder_requiredenum value to the/response property for the response status - warning
added the new
segment_builder_requiredenum value to the/response property for the response status - warning
added the new
segment_builder_requiredenum value to the/response property for the response status - warning
added the new
segment_builder_requiredenum value to the/response property for the response status - warning
added the new
segment_builder_requiredenum value to the/response property for the response status
- warning
- breaking
for the
queryrequest parameterper_page, default value was changed from25to40 - breaking
for the
queryrequest parameterper_page, the min was increased from1.00to10.00 - breaking
the response property
//became nullable for the status - breaking
the response property
//became nullable for the status - breaking
the response property
//became nullable for the status - breaking
the response property
//became nullable for the status - warning
added the new
api_access_requiredenum value to the/response property for the response status - warning
added the new
api_access_requiredenum value to the/response property for the response status - warning
added the new
api_access_requiredenum value to the/response property for the response status - warning
added the new
api_access_requiredenum value to the/response property for the response status - warning
added the new
contacts_not_readyenum value to the/response property for the response status - warning
added the new
contacts_not_readyenum value to the/response property for the response status - warning
added the new
contacts_not_readyenum value to the/response property for the response status - warning
added the new
contacts_not_readyenum value to the/response property for the response status - warning
added the new
no_connected_storeenum value to the/response property for the response status - warning
added the new
no_connected_storeenum value to the/response property for the response status - warning
added the new
no_connected_storeenum value to the/response property for the response status - warning
added the new
no_connected_storeenum value to the/response property for the response status - warning
added the new
paid_plan_requiredenum value to the/response property for the response status - warning
added the new
paid_plan_requiredenum value to the/response property for the response status - warning
added the new
paid_plan_requiredenum value to the/response property for the response status - warning
added the new
paid_plan_requiredenum value to the/response property for the response status - warning
added the new
store_unavailableenum value to the/response property for the response status - warning
added the new
store_unavailableenum value to the/response property for the response status - warning
added the new
store_unavailableenum value to the/response property for the response status - warning
added the new
store_unavailableenum value to the/response property for the response status - info
added the new optional
headerrequest parameterPrivy-Account-Id - info
added the new optional
queryrequest parametercreated_after - info
added the new optional
queryrequest parametercreated_before - info
added the new optional
queryrequest parameterimport_id - info
added the new optional
queryrequest parameterupdated_after - info
added the new optional
queryrequest parameterupdated_before - info
added the non-success response with the status
- info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status - info
added the optional property
//to the response with the status
- breaking