Skip to main content

Workspace, app, member

A workspace is your company. It holds your team and your APNs key. An app is one iOS app in one environment: production and staging are two apps. Everything else (events, users, flows, sends) belongs to exactly one app. Members have one of three roles:

Events

An event is something a user did in your app, with a name and optional properties: lesson_completed with {"lesson_id": "abc"}. The SDK also reports some events on its own, all starting with $. Events are idempotent: each carries an id, and sending the same id twice counts once. That is what makes the SDK’s retries safe.

Users and devices

The SDK knows a device from the moment it starts. When you call identify, that device is linked to your user id, and events it sent before then are attributed to the user too. One user can have many devices. Flows reason about users. Sends go to their devices.

Flows

A flow is one notification rule: a pattern over a single user’s events, a message, and the limits it respects. Flows are proposed, active, paused or retired. Only active flows send.

Proposals

The Composer suggests changes to your flows as proposals: create, adjust, pause or retire. Each carries its diagnosis, the evidence for it, and a confidence level. A proposal changes nothing until a person approves it.

Decisions and sends

Every time a flow matches, the engine records a decision: it sent, or it suppressed the send and why (over a cap, in a cooldown, no device, held out). A send then moves through:
Quiet hours defer a send. Caps and cooldowns cancel it. A push that lands in a user’s quiet hours goes out when they end, because the user still wants it, just not at 3am.

The holdout

A fixed share of each app’s users (10% by default) is in the holdout and never receives notifications, from flows or broadcasts. Comparing them with everyone else is how you tell whether notifications help.