Skip to main content
With the Customer data battery, the API takes events from your own systems — who someone is, and what they did — and lets you manage what the battery builds from them: audiences, traits, consent per channel, and duplicate contacts. They use the same keys, errors and conventions as the rest of the API.
  • The endpoints exist when your account has Customer data; otherwise they answer 404 module_off. Your plan must include the OMNI API too.
  • Their scopes start with cdp.: cdp.events:write, cdp.audiences:read, cdp.audiences:write, cdp.contacts:read, cdp.contacts:write.
What each feature does in the panel: Customer data.

Sending events from your server

Events from your server go to the same addresses as always, with an OMNI API key that has the cdp.events:write scope.
  • Each answers 202 {"accepted": n}: the events are taken, and applied in the background. One that can’t be applied is dropped without stopping the rest, and shows with its reason under Live events on Settings → Data sources.
  • A request is at most 256 KB (413 too_large), and a batch at most 100 events.
  • An event never creates a contact on its own, and identify creates one only with a phone. People without a phone are kept as visitors, and what they did joins the contact once a phone is known.
  • Event names FireFlo writes itself — starting message., deal., audience., consent. and the like — are refused.

Moving from source keys

Server events used to take Customer data source keys (sk_live_…), made on the Data sources screen. They now take an OMNI API key (ff_live_…) with the cdp.events:write scope. A source key sent to the API is refused with 401 key_retired.
The addresses, the bodies and the answers are unchanged — only the key is different.
1

Make an OMNI API key

In Developer Tools → API keys, make a key with the scope cdp.events:write (“Send events: identify, track and batch”). Copy it: it is shown once. See Keys and scopes.
2

Swap the key

On your server, change the Authorization header from Bearer sk_live_… to Bearer ff_live_…. Nothing else changes.
3

Check it arrives

Send an event, and look for it under Live events on Settings → Data sources.
  • An OMNI API key works only with the OMNI API in your plan.
  • An OMNI API key can be limited to the addresses your server sends from, like any other key.
  • Website keys (pk_live_…) and the website snippet are unchanged: keep them as they are.

Audiences

An audience is a group of people described by rules; people join and leave as they match. Rules are {"match": "all" | "any", "conditions": [...]} — the condition types are in POST /v1/cdp/audiences. An audience can be the recipients of a broadcast.

Traits

Traits are facts worked out for every contact — built-in ones from messages, visits and deals, and your own from an event: how many times, when last, or a total, over a window of days. Use a trait’s key in audience rules and its {{trait.key}} merge tag in messages. Consent is kept per channel and per purpose: marketing (campaigns, offers) and transactional (replies, order and appointment updates). Every change is recorded with its proof.

Duplicates and merging

Webhook events

Add these to a webhook endpoint to hear about them as they happen.
The audience in these events is shortened here; it is the audience as GET /v1/cdp/audiences lists it.