What you can build
Sync contacts
Create and update contact profiles from your own systems — signups, profile changes, consent updates.
Send custom events
Track anything — bookings, renewals, quiz results — and use it to trigger automations and build segments.
Manage lists
Add and remove contacts from lists programmatically.
Receive webhooks
Get an HTTP call to your endpoint when a contact reaches a webhook step in an automation.
How the pieces fit
- Authenticate every request with an API key — see Authentication.
- Create contacts or let events create them implicitly.
- Send events as things happen. Events appear on contact timelines, are available to segments, and can trigger automations.
- Receive webhooks from automation flows to close the loop into your own systems.
Conventions
- Format — JSON in, JSON out. Most responses use a JSON:API-style envelope: a
dataobject withtype,id,attributes, andlinks. Adding a contact to a list is the exception and returns a plain object. - Field names — snake_case (
first_name, notfirstName). Unrecognized fields are rejected with400rather than ignored. - IDs — resources are identified by stable unique IDs; contacts can also carry your own
external_id. - Errors — standard HTTP status codes with a JSON body; see Errors.
- Rate limits — 10/second, 100/minute, 1,000/hour, counted per IP; see Rate limits.
Quick example
Track an event
Appointment Booked. The uniqueIdentifier makes it safe to retry — see Idempotency.
The base URL for API requests is shown alongside your API key when you create it in Integrations.