Get one contact by email

Search Documentation

Search across all developer documentation

contacts

Get one contact by email

GET /v1/contacts/{email}
Auth required api.contacts.view

Returns one contact by email address, including its custom attributes and explicit per-topic preferences. Returns 404 not_found when the address is not a contact in this org (the same response is returned when no contact list is synced, so the endpoint never leaks which case applies). Match is case-insensitive. Percent-encode @ as %40 (e.g. user%40example.com).

Path parameters

email string<email> required

Recipient address. Percent-encode @ as %40. Matched case-insensitively.

Responses

Errors follow the RFC 7807 problem format — see the error reference.

200 The contact record application/json
email string<email> required
unsubscribe_all boolean required

Master opt-out — when true the contact receives no topic email.

attributes object required

Custom attribute map as stored in SES. Always an object, never null.

topic_preferences array<object> required

The contact's explicit per-topic choices. Topics the contact has never set are absent — for those, the topic's default_subscription_status applies, and SendOps enforces it at send time. So an absent topic does not mean "will be mailed": on a topic defaulting to OPT_OUT, a contact with no entry here has not consented and will not be sent that topic's mail.

Each entry in topic_preferences:

topic_name string required

The topic's name (see /v1/topics).

subscription_status string enum required

One of: OPT_IN, OPT_OUT

created_at string<date-time> required
updated_at string<date-time> required
ses_sync object optional

Present ONLY while the contact has not reached the customer's SES account yet; absent means synced. A 2xx on a contact write means SendOps has accepted and durably stored the change, not that SES has it — writes are mirrored afterwards, paced against the AWS account-wide budget of one contact request per second. Everything user-visible (segments, consent filtering, exports, sends) reads SendOps' own copy, so a pending mirror holds nothing back.

401 Missing, malformed, or unknown API key application/problem+json
403 Key lacks the required scope or plan limit violated application/problem+json
404 Resource not found application/problem+json
422 Query parameter or path value failed validation application/problem+json
429 Per-org rate limit exceeded application/problem+json
500 Unexpected server-side failure. The code is internal_error. The request_id field can be quoted to SendOps support to investigate. application/problem+json