Skip to main content
Find contacts by email address, custom field values, or other criteria using the search API.

Goal

By the end of this guide you will be able to search for contacts by email (useful for dedup checks), filter by custom field values, and paginate through large result sets.

Prerequisites

  • An API key with contacts:read scope
  • Your API base URL (found on the Settings > API Keys page)
  • A contact structure ID — search operates within a single contact structure. Retrieve yours with GET /api/contact-structure (see Manage Custom Fields)
Scope note: Contact search uses POST but is semantically a read operation. It requires only contacts:read scope (not contacts:write).

How search requests work

Every search request has two main parts: a filter that decides which contacts match, and a source array that decides which fields to return for each matching contact.

The source array

source is a required projection that tells the API which fields to return in each contact. Pass an array containing one or more of these case-sensitive values:
  • _id: the contact’s unique identifier
  • key: the contact’s email address
  • fields: custom field values
  • tags: tag assignments
  • lists: list memberships
  • contactStatus: primary status (Active, Inactive, etc.)
  • contactSubStatus: secondary status
  • createdAt: creation timestamp
  • updatedAt: last-update timestamp
Rules:
  • source is required and must contain at least one value.
  • Values are case-sensitive. _id works; _ID returns a validation error.
  • _id is always returned, even when you don’t include it in source.
  • Any unknown value rejects the entire request. There’s no partial success.

Steps

1. Search by email address

This is the most common search pattern, useful for deduplication before creating a contact.
Response (200 OK):
Dedup pattern: Before creating a contact, search by email using "operator": "EQ". If totalRecords is 0, the email is not in use and you can safely create the contact.

2. Search by email domain

Find all contacts from a specific email domain.

3. Search by custom field values

Filter contacts based on custom field values. Use the field’s _id from your contact structure.
Response (200 OK):

4. Combine multiple criteria

Use multiple criteria objects to build complex filters. Criteria within the same group are AND-ed; separate groups are OR-ed.
This searches for contacts where the custom field equals “Enterprise” AND the contact was created after January 1, 2026.

5. Search within a specific list

Filter contacts that belong to a specific list.

6. Paginate through results

For large result sets, increment the page parameter to retrieve subsequent pages. Pages are 1-indexed.
Response (200 OK):
Use totalRecords to calculate the total number of pages: Math.ceil(totalRecords / pageSize). Then loop through pages 1 to N.

Request body reference

Available filter operators

Available filter columns

Common errors

Next steps