Contacts
Create, read, update, and delete contacts.
Manage your audience: create, read, update, and delete contacts and their custom fields.
All contact endpoints require a Full access key.
List contacts
/v1/contactsfull accessReturns every contact in the project, with email, name, source, segments, suppression status, and custom fields.
curl https://mailer123.com/api/v1/contacts \
-H "Authorization: Bearer m123_your_api_key"{ "data": [ { "id": "...", "email": "ada@example.com", "name": "Ada Lovelace" } ] }Create a contact
/v1/contactsfull accessThe address is validated and checked against your suppression list. If the
contact already exists, you get it back with 200 instead of 201.
| Field | Type | Required | Description |
|---|---|---|---|
email | string | required | Contact email address. |
name | string | optional | Display name. Defaults to the address's local part. |
custom_fields | object | optional | Custom field values keyed by field key, coerced against your schema. |
curl -X POST https://mailer123.com/api/v1/contacts \
-H "Authorization: Bearer m123_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "email": "ada@example.com", "name": "Ada Lovelace", "custom_fields": { "company": "Analytical Engines" } }'HTTP/1.1 201 Created
{ "data": { "id": "...", "email": "ada@example.com", "name": "Ada Lovelace", "customFields": { "company": "Analytical Engines" } } }Retrieve a contact
/v1/contacts/{id}full accessReturns one contact by id, or 404 not_found if it doesn't exist in this
project.
Update a contact
/v1/contacts/{id}full accessPartial update — send only the fields you want to change.
| Field | Type | Description |
|---|---|---|
name | string | New display name. |
email | string | New email address (deduped against your other contacts). |
custom_fields | object | Replaces the contact's custom field values. |
subscribed | boolean | false adds an unsubscribe suppression for the address; true clears it. |
curl -X PATCH https://mailer123.com/api/v1/contacts/CONTACT_ID \
-H "Authorization: Bearer m123_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "name": "Ada, Countess of Lovelace", "subscribed": true }'Delete a contact
/v1/contacts/{id}full accessPermanently delete a contact. Returns { "deleted": true }.
Errors
insufficient_scope (403 — sending-only key), validation_error (400),
conflict (409 — suppressed or duplicate email), not_found (404). See the
error reference.