Create or update a contact
POST /api/v1/customer/create
Upserts a contact and returns 201 Created. If a contact with the same email or phone already exists, it’s updated; otherwise it’s created. This endpoint does not add anyone to a list — for that, see the Lists API.
Request
You must sendemail or phone — at least one. Everything else is optional.
Email marketing consent:
SUBSCRIBED, NON_SUBSCRIBED, or UNSUBSCRIBED. Defaults to NON_SUBSCRIBED when omitted. Only send SUBSCRIBED when the person actually opted in.Whether the contact is suppressed. Defaults to
false.Whether to require email confirmation before the contact counts as subscribed. Defaults to
false.Key–value pairs stored as custom fields — usable in segments and personalization. Maximum 30 keys per request, string values.
Unrecognized fields are rejected with
400. Send first_name, not firstName.Example request
Response
201 Created
id — it’s the stable identifier for fetching this contact later, and for sending events with contactUUID.
Custom properties
- Maximum 30 keys per request; more returns
400. - Values are stored as strings. Numbers and booleans are converted; nested objects are not — they store as unusable text, so flatten them before sending.
- Empty and whitespace-only values are dropped rather than stored.
Get a contact
GET /api/v1/customer/{id}
404 if no contact has that ID.
List contacts
GET /api/v1/customer
Returns contacts in pages.