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.attributesare fully replaced on update — always send the complete set. - 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.