App Push
Turn your native app into a Flash send channel. Members register a device token from inside the in-app member center; push then joins the very same automation and campaign engine that sends your email — with a fail-open channel waterfall and one shared frequency cap.
Token registration and the send-stack seam are live in code today. Actual push delivery rolls out behind a controlled enablement flag per team — ask your Flash team to switch it on once your FCM/APNs credentials are configured.
How it works
Register a device tokenLive
A signed-in member's app POSTs its FCM/APNs token. Idempotent UPSERT — safe to call on every launch and on OS token rotation.
Push joins the send stackLive
Push is a channel in the same automation/campaign engine as email — not a separate API. One journey, channel chosen per member.
Channel waterfall + one capLive
Fail-open waterfall (push → email → …) with a single shared frequency cap so a member is never double-messaged across channels.
Delivery enablementRolling out
Registration and the send seam are in code today; actual push delivery rolls out behind a controlled flag, per team. Ask your Flash team to enable it.
Register a device token Live
Call this from inside the signed-in member WebView (the consumer session cookie carries the identity). See the Mobile SDK guide for the WebView SSO flow that establishes that session.
// The member must be signed in (consumer session cookie, set by the WebView SSO
// flow). teamId + memberId are taken from the SESSION — never the request body —
// so there is no member-enumeration surface here.
POST /api/consumer/push/register
Content-Type: application/json
{
"platform": "ios", // "ios" | "android"
"provider": "fcm", // "fcm" (default) | "apns" — optional
"token": "<device push token>",
"appBundleId": "com.yourbrand.app" // optional
}
// → 200 { "ok": true }
// Idempotent UPSERT keyed on (team, token): re-registering the same device
// simply re-points it at the current member. Call it on every app launch and
// whenever the OS rotates the token.Sending: push is a channel, not an API call
// You do NOT call a "send push" endpoint. Push is a CHANNEL inside the existing
// automation + campaign send stack — the same engine that sends email. When a
// journey or campaign targets a member:
//
// 1. Flash resolves the member's channels in a waterfall (fail-open):
// push (if a token + consent exist) → email → …
// 2. One SHARED frequency cap applies across channels, so a member is never
// double-messaged on push AND email for the same step.
// 3. No token / no consent / push disabled → silently falls back to email.
//
// Net: you author one journey; Flash picks the best channel per member.Before you go live
FCM (Android + iOS via Firebase)
Provide your Firebase service-account credentials to your Flash team. Flash sends via FCM HTTP v1 (OAuth via a service account) — the default provider.
APNs (optional, direct)
If you send to iOS directly over APNs, provide your APNs auth key (.p8), Key ID and Team ID. Register those devices with provider: "apns".
Consent
Push is gated by explicit member consent plus the Global Privacy Control signal (fail-closed). A member with no active push consent is skipped — the waterfall falls back to email.
Acceptance checklist
Registering the same device twice does not create a duplicate — the UPSERT re-points it at the current member.
An opted-in member with a valid token receives a push; a member with no token/consent receives the email fallback instead — never nothing, never both.
Revoking push consent (or a Global Privacy Control signal) immediately drops the member to the email channel.