Skip to main content

Look up by email

POST /contacts/lookup
{ "email": "olivia@example.com" }
The response is 200 OK with data: null when no active contact exists.

Upsert by email

POST /contacts/upsert
{
  "email": "olivia@example.com",
  "fields": {
    "first_name": "Olivia",
    "plan": "pro"
  }
}
Upsert merges provided fields, validates declared audience properties, and returns the contact with created: true or created: false. Email is normalized per project and concurrent requests resolve to one active contact.