Braze
Sync Rovenue revenue and subscription-lifecycle events into Braze for customer engagement and lifecycle messaging.
Braze
The Braze integration forwards Rovenue revenue events (purchases, trial conversions, renewals, cancellations) as Braze purchases and subscription-lifecycle events (trials, grace period, billing issues, plan changes) as Braze custom events, via Braze's users/track REST endpoint — so a subscriber's Rovenue purchase and subscription history is available inside Braze for lifecycle campaigns, canvases, and segmentation.
Braze is a customer-engagement platform, not an analytics warehouse: this integration sends events, not a full profile sync. It does not push subscriber attributes, and it does not read anything back from Braze.
1. Get your credentials from Braze
- In the Braze dashboard, open Settings → APIs and Identifiers → API Keys and create (or reuse) a key with the
users.trackpermission. - Copy the REST API Key.
- Note your workspace's REST endpoint — shown on the same page, or in Settings → APIs and Identifiers (e.g.
https://rest.iad-01.braze.com). This is specific to the Braze instance/cluster your workspace lives on; it is not the same as your SDK endpoint.
2. Add the integration in Rovenue
- In the Rovenue dashboard, navigate to Apps (left sidebar).
- Find Braze under CRM & lifecycle and click it.
- The side drawer opens. Fill in the Credentials step:
- REST API key — paste the key from step 1.
- REST endpoint — paste the endpoint from step 1 (e.g.
https://rest.iad-01.braze.com). Onlyhttps://rest.<cluster>.braze.comandhttps://rest.<cluster>.braze.euhosts are accepted — Rovenue rejects any other host, both when you save the connection and again on every delivery.
- Click Validate.
Validate creates a real, deletable probe profile. Braze's
users/trackendpoint has no dedicated read-only credential-check call that would prove your key actually hasusers.trackpermission — a read-only check would pass even for a key that can't send events. Rovenue instead sends one clearly-tagged event (rovenue_credential_check) to a single, stable Braze profile (external_id: "rovenue-credential-probe"). This profile is reused across every re-validation — clicking Validate again updates the same profile and event rather than creating a new one, so it counts toward your Braze Monthly Active Users once, not on every click. You can safely delete this profile from Braze at any time; doing so does not affect your connection.
- Choose which events to forward, optionally override the default mapping, then activate.
3. Event mapping
Revenue keys ride Braze's purchases array, which has no vendor event-name concept of its own (a purchase is keyed by product_id, not a name) — so the mapping table below only matters for the rovenue_event tag stamped on each purchase, and for the six subscription.* lifecycle keys, which become genuine Braze custom events since Braze has no built-in vocabulary for subscription lifecycle:
| Rovenue event key | Braze wire shape | name / tag |
|---|---|---|
revenue.INITIAL | purchases[] | revenue.INITIAL |
revenue.TRIAL_CONVERSION | purchases[] | revenue.TRIAL_CONVERSION |
revenue.RENEWAL | purchases[] | revenue.RENEWAL |
revenue.CREDIT_PURCHASE | purchases[] | revenue.CREDIT_PURCHASE |
revenue.CANCELLATION | purchases[] | revenue.CANCELLATION |
subscription.trial.started | events[] | rovenue_subscription_trial_started |
subscription.cancel_requested | events[] | rovenue_subscription_cancel_requested |
subscription.expired | events[] | rovenue_subscription_expired |
subscription.billing_issue | events[] | rovenue_subscription_billing_issue |
subscription.grace_period | events[] | rovenue_subscription_grace_period |
subscription.uncancelled | events[] | rovenue_subscription_uncancelled |
subscription.product_changed | events[] | rovenue_subscription_product_changed |
subscription.paused | events[] | rovenue_subscription_paused |
subscription.recovered | events[] | rovenue_subscription_recovered |
subscription.revoked | events[] | rovenue_subscription_revoked |
subscription.offer_redeemed | events[] | rovenue_subscription_offer_redeemed |
Every forwarded purchase and event carries properties.rovenue_event (the original Rovenue event key) and properties.outbox_event_id, so you can always trace a Braze record back to its Rovenue source.
A purchase is only sent when both a currency and a valid amount are known. Rovenue never guesses a currency (it does not default to "USD"). Braze's purchase object requires currency and price, so unlike the OneSignal/Airbridge/Singular integrations there is no "send the event without the money" option on a purchase. Instead, when a revenue event has no known currency (or an unparseable amount), Rovenue forwards it through Braze's custom events array rather than purchases — named rovenue_revenue_INITIAL, rovenue_revenue_RENEWAL, and so on, carrying the same properties.rovenue_event / properties.outbox_event_id tags. The event still reaches Braze and can still trigger a Canvas; it just carries no dollar figure. This matters more here than elsewhere: purchases is append-only with no reversal convention, so a purchase mislabeled USD could never be corrected.
revenue.REFUND is not forwarded. Braze's purchases object (product_id/currency/price/time) is an append-only revenue record with no documented reversal or negative-price refund convention — sending a refund through it would double-count revenue in Braze's own reporting rather than reverse it. Refunds are skipped with reason no_mapping and never reach Braze.
4. Identity resolution
Every purchase or event object sent to Braze needs exactly one primary identifier (Braze rejects an object carrying more than one). Rovenue resolves it in this order:
appUserId— your app's own subscriber id, if the subscriber has one. Sent asexternal_id.$brazeAliasName— used instead ofexternal_id, only whenappUserIdis absent. Sent asuser_alias: { alias_name, alias_label: "rovenue" }, so you can resolve a subscriber to an existing Braze user profile without ever setting an external id.- The Rovenue-internal subscriber id, as a last resort so revenue is never silently dropped. Sent as
external_id.
If none of the three is available, the event is skipped with reason no_user_data (visible in the connection's Delivery Log).
See Subscriber Identity Attributes for the full reserved-attribute reference, including $brazeAliasName.
5. Verify events are arriving
- Open Apps → Braze → Delivery Log in the Rovenue dashboard and check for
succeededrows with HTTP200/201. - In Braze, look up the resolved user profile (by
external_idor alias) and check its Purchases or Custom Events timeline for the mapped names above. - If events are not appearing:
- A
401/403response means the REST API key is wrong or lacks theusers.trackpermission. - A
400response usually means a malformed request — check the Delivery Log's response body. - Confirm the subscriber has
appUserId,$brazeAliasName, or a resolvable Rovenue subscriber id set (missing all three skips silently withno_user_data). - Ensure the event type you're sending is included in the connection's enabled events, and that
revenue.REFUNDisn't the only thing you're testing with — it's intentionally never forwarded (see above).
- A
Firebase / GA4
Forward Rovenue revenue and subscription-lifecycle events to a Firebase app stream via the Google Analytics 4 Measurement Protocol.
OneSignal
Sync Rovenue revenue and subscription-lifecycle events into OneSignal as custom events, so you can trigger Journeys and target push by subscription state.