Skip to main content
GET
Get Contact by Email

Overview

This endpoint looks up exactly one contact by email address, when you already expect a single match. The success response is byte-identical to Get Contact — same fields (id, emails, phones, names, locations, custom_fields) and the same optional extras, all of which behave identically here. See Get Contact for the full field-by-field response breakdown; it isn’t repeated on this page. You can address the contact either of two ways:
  • By path: GET /contacts/by-email/{email}
  • By query string: GET /contacts/by-email?email={email}
Both forms resolve identically and use the same rate limit. The path form accepts either a raw @ or a percent-encoded %40 in the {email} segment. Resolution matches the email filter on List Contacts: matching is exact (not partial or fuzzy) and case-insensitive, with surrounding whitespace trimmed. It matches both the contact’s primary address and any of its alternate addresses, including addresses captured on profiles that were later merged into the contact. Because this endpoint addresses a single contact, more than one match is an error rather than an arbitrary pick — see the 409 response below.
Use this endpoint when you expect exactly one contact for the address. Use List Contacts with its email filter instead when you want to see every contact that shares an address, need to batch up to 100 addresses in one call, or want to avoid the possibility of a 409 entirely.

Path Parameters

string
The email address of the contact to retrieve, when using the path form GET /contacts/by-email/{email}. Required when not using the query form. Accepts a raw @ or a percent-encoded %40.

Query Parameters

string
The email address of the contact to retrieve, when using the query form GET /contacts/by-email?email=. Required when not using the path form.
boolean
default:"0"
When set to 1, includes the last 5 comet tokens associated with this contact, ordered by most recent first. Accepts 1 or 0.
boolean
default:"0"
When set to 1, includes the contact’s full event journey — all conversions and touchpoints sorted by most recent first. Accepts 1 or 0.
boolean
default:"1"
When set to 1 (default), direct touchpoints are excluded from the events list. Set to 0 to include them. Only applies when include_events=1. Accepts 1 or 0.
boolean
default:"0"
When set to 1, custom field keys in the custom_fields object will use the user-defined labels (e.g. "Customer Age") instead of the raw column names (e.g. "profile_field_1"). Fields without a configured label will keep their raw column name. Accepts 1 or 0.
boolean
default:"0"
When set to 1, includes up to the last 1000 raw browsing session hits (page views) for this contact, ordered by most recent first. Accepts 1 or 0.

Response

Success Response

Returns the contact object directly (not wrapped in a data property) — the same shape returned by Get Contact, including all of its optional fields (comet_tokens, events, browsing_session_hits) under the same query parameters.

Error Response

string
Error description explaining what went wrong.
integer[]
Only present on a 409 response. The sorted list of canonical contact ids that matched the given email.

Example Requests

Look Up by Path

Look Up by Query String

Status Codes

Notes

  • Rate Limit: This endpoint has a limit of 30 requests per minute per Space — the same bucket as Get Contact, not the 15/minute limit on List Contacts. See Rate Limiting for details.
  • Resolution: Matching is exact and case-insensitive, with surrounding whitespace trimmed. It matches both the contact’s primary address and any of its alternate addresses, including addresses captured on profiles that were later merged into the contact — the identical algorithm used by the email filter on List Contacts.
  • Multiple matches are a 409, not a pick: several distinct contacts can legitimately share an address. When that happens, nothing is guessed — the response is {"message": "Multiple contacts match this email. Fetch them with GET /contacts?email= and then request one by its contact id.", "contact_ids": [...]}. Either call List Contacts with its email filter to see all of the matches, or request one of the returned contact_ids directly via Get Contact.
  • No match is a 404: unlike the list-based email filter (which returns a normal 200 with an empty array), this endpoint returns 404 with {"message": "Contact not found"} when nothing matches, because it addresses a single resource.
  • Same payload as Get Contact: the response body, including all optional fields and query parameters, is identical to Get Contact. Nothing here can drift from that endpoint’s documented shape.