Base URL
All CDP endpoints live under/api/v1/cdp:
Every request is authenticated with an organization API key sent as a
Bearer token. The organization is derived from the key. See
Authentication.
Building blocks
People
Individuals, keyed by your own
externalId, with optional firstName,
lastName, email, and phoneNumber (E.164), plus a free-form
attributes object.Custom objects
Typed records (an
order, a loan, …) keyed by (type, externalId).
Types are defined per organization.Attributes
Free-form key/value data on people and objects. New keys are auto-registered
in your attribute catalog, so they show up as filters in Segments.
Events
Append-only behavioral records (a
payment_made, a checkout_started)
tied to a person or object. Record one at a time or in bulk.Relationships
Links between a person and an object, or between two objects: a customer
who
placed an order, an order that has_line_item.Types
The catalogs behind the data: custom-object types and relationship types.
Register these to get the ids you reference elsewhere.
Common use cases
- Identify a person. Upsert a person by your own
externalIdwith their contact fields and attributes. The same call updates rather than duplicates. - Record behavior. Send events as they happen, one at a time or via the
/batchendpoint (up to 1000). - Model your domain. Register custom-object and relationship types, upsert objects, and link them to people.
- Bulk import. Backfill history through the
/batchendpoints instead of one request per record.
Conventions
- Writes are upserts. The same
externalIdtwice updates rather than duplicates. - People merge; custom objects replace. A person update merges: keys
you leave out of
attributesare kept, a key sent asnullis removed, and a contact field (firstName,lastName,email,phoneNumber) you omit or send empty keeps its stored value. Passmode: "replace"to swap the whole profile instead: anything you leave out is cleared, which is also how you clear a contact field. A custom object update replaces itsattributesby default, so an update that omits a stored attribute deletes it; passmode: "merge"to overlay only the keys you send. - One record or many. The
/batchvariants accept up to 1000 records. - Errors.
{ "error": { "code", "message" } }+ HTTP status. See Rate limits & errors.
Learn more
Events
How events are shaped, recorded, and read back.
Relationship types
The catalog of allowed link shapes and how to register one.
Connect your database
Sync people and objects straight from PostgreSQL or MySQL: no API
integration.