Core concepts
A small glossary of the objects you'll interact with across the product and API.
Workspace
Every account is scoped to one or more workspaces. All customer records, events, campaigns, journeys, and settings live inside a workspace. Access is enforced at the platform level — users can only read or write data in workspaces they belong to.
Key workspace-level settings:
- Plan (free, growth, business) — caps quotas and gates premium features.
- Industry — informs onboarding defaults and which modules are suggested.
- Feature modules — e.g.
commerce_enabled. Turn individual capabilities on/off per workspace. - Branding — name, logo, primary and accent colors applied to composer previews and transactional emails.
- Timezone — used for quiet hours, send-time optimization, and cohort bucketing.
Customer
A customer is the canonical record of a user. Each row has a workspace-unique external_id, an optional email and phone, basic identity attributes (first_name, last_name, country, city), and a JSON attributes blob for arbitrary traits (plan, wallet balance, subscription tier, etc.).
Customers are created three ways:
- Directly via the app (manual add or CSV import).
- Automatically the first time the Track API sees an unknown
external_id. - On commerce webhook ingest, matched by email.
Event
An event is a timestamped action taken by (or about) a customer. Pulse treats everything as an event: page views, signups, purchases, custom actions, email opens/clicks, journey enter/exit, and more.
{
"name": "item_added_to_cart",
"customer_id": "cust_123",
"occurred_at": "2026-05-10T14:03:00Z",
"properties": { "sku": "SKU-42", "price": 29.00, "currency": "USD" }
}Events power segments ("anyone who did X in the last 7 days"), funnels, journeys (as triggers or waits), and revenue attribution.
Attribute
Attributes are stateful traits about a customer (plan=premium, is_trial=true). Unlike events, attributes persist until explicitly updated. Define types in the Attributes registry to get validation, segment auto-complete, and consistent filter UIs.
Segment
A segment is a named, reusable audience definition — a list of conditions over attributes, events, lists, and RFM buckets. Segments are computed on read, so membership reflects the latest data without any sync step.
List
A list is a static, manually curated audience (e.g. "Beta wave 3 invitees"). Lists support CSV import/export and can be combined with segments in journey entry conditions.
Template
A reusable message body with a channel, subject (email), preview text, Liquid variables, and optional AMP HTML. Templates decouple creative from delivery logic so the same template can be used by campaigns and journeys.
Campaign
A one-shot or scheduled broadcast. Campaigns target an audience (segment or list), pick a channel and template, and optionally include an A/B test or send-time optimization. Each campaign produces rows in campaign_messages for every recipient.
Journey
A visual, multi-step flow. Nodes include entry, send, wait, condition, A/B split, and exit. Each run is tracked against the journey instance so you can see drop-off at any node.
Identity resolution
Pulse uses external_id as the primary key. When two touchpoints report the same external_id, they are merged into a single customer. Email and phone are secondary identifiers used by imports, commerce ingest, and suppression lists.