
Automating loyalty programs with Braze means turning loyalty data into messages at the right moment. The loyalty platform holds points and tiers, while Braze acts on them through attributes that change, events that enter a Canvas, and live lookups at send time. Choose the pattern for each message first, then build the journeys.
Key Takeaways
- Each loyalty message maps to one of three patterns: a custom attribute, a custom event, or a Connected Content lookup at send time.
- We recommend triggering on tier changes rather than balance changes, because a balance trigger fires on every earn.
- An attribute change trigger fires only when the value changes, and it does not fire when the value is updated to null.
- Map only the fields a journey will act on, because every mapped field is sent when any one of them changes.
- Connected Content caches get requests by default, with a five minute default cache time, and Braze notes that cache settings aren't guaranteed.
- The Braze external ID must match the loyalty platform's identifier, or the integration can return a 404 error.
What does automating loyalty programs with Braze involve?
Braze lists loyalty technology partners in its own documentation, among them Antavo, Open Loyalty, SessionM and Talon.One. Open Loyalty describes itself as a platform that lets you "build and manage customer loyalty and rewards programs." Its Braze integration lets you "trigger personalized messages (Email, Push, SMS) when a user's loyalty status changes."
We read that division of labour as the first design decision. The loyalty platform answers what a member has earned, and Braze decides what to say about it, when, and on which channel. Agree that line before anyone writes a message, because every sync problem later traces back to it.
Which data pattern should carry each loyalty message?
Each loyalty message asks for one of three things. It is either what is true about the member now, what the member just did, or what is true at the moment the message sends. Each maps to a pattern that Braze documents, and the table sets them side by side.
| Pattern | Answers | What the documentation says | Watch for |
|---|---|---|---|
| Custom attribute | What is true now | Attributes can hold traits like loyalty tier, and they feed segments and Liquid | No time series, so no graphs |
| Custom event | What just happened | Events "can trigger any number and type of follow-up campaigns" | Property names need agreeing up front |
| Connected Content | What is true at send time | Pulls loyalty data from the loyalty platform as the message sends | Get requests are cached by default, and post requests are not |
A single programme can use all three. A tier badge in a footer comes from an attribute, a redemption confirmation from an event, and an offer wallet from a live call.
How do you sync points and tiers as custom attributes?
Braze documents attributes such as "loyalty tier" for segmenting and "rewards points" for personalising messages with Liquid. Antavo syncs loyalty fields into Braze custom attributes through a field mapping. Its page recommends "only mapping the fields that will be actioned on within Braze."
Our suggestion is to map no more than three fields to begin with: tier, points balance and the date a status expires. Add a fourth only when a named journey needs it. The Antavo page explains why: when any mapped value changes, "every field added to the field mapping is included in the request."
Custom attribute keys are case-sensitive, so Rewards_Tier and rewards_tier are different attributes. The data type must also match how the attribute is used. Decide whether tier is a string or a number before the first sync.
How do you trigger a message when a tier or balance changes?
Attribute triggers send action-based messages when custom attribute values change. Braze uses the loyalty case as its own example: "You might want to alert users if their rewards tier changes." A trigger can fire on any new value, or only when the attribute reaches a specific value, such as the best tier.
Braze documents both a tier trigger and a points trigger, and we recommend starting with tier. A balance changes with every purchase, so a trigger on it fires on every earn and the member hears from you constantly. Keep the balance in the message body with Liquid, and let the tier change be the moment worth a message.
Four documented rules shape the build.
- The trigger is evaluated first and the audience criteria second. Keep the trigger attribute out of the audience filter to avoid a race condition.
- The trigger fires only when the value changes. Re-sending the same value does nothing, and an update to null does not fire it.
- Attribute triggers are not currently available for array attributes, so store a tier as a string or number.
- The trigger also applies to new users created, so a brand-new member can enter the journey on day one.
When should earning and redemption be events instead?
Use an event when the moment matters more than the state. Open Loyalty sends its data to Braze as webhooks, and Braze Data Transformations convert it into a user event. Antavo can synchronise any of its events, including purchase events, so that they appear in Braze as custom events.
Antavo states the purpose plainly: "Use events synchronized from Antavo to enter loyalty members in action-based Braze Canvases." An event also carries properties, the metadata that describes one occurrence. That is where the points earned, the reward redeemed and the channel of the purchase belong.
We recommend putting the redemption event on the exit criteria of any nudge Canvas. A member who has just redeemed then never receives the reminder to redeem.
Braze offers a lighter route for pure counters: incrementing a custom attribute keeps a count without a time series. A visit counter fits that description, while a redemption does not, because you will want to chart redemptions.
How do you keep balances and offers current at send time?
A synced balance can be stale by the time a message sends. Connected Content addresses this by calling the loyalty platform as the message renders. SessionM's page describes the benefit as eliminating "the risk of communicating outdated, expired or already redeemed loyalty offers to customers."
Talon.One uses the same route to send the codes it generates, and its documentation also covers fetching a loyalty ledger in Braze. Its page states a maximum rate limit of 2,500 messages per minute, which can be modified in the Braze dashboard. Check any partner's limit before a large send.
Connected Content has caching rules to plan around. Get requests are cached by default and post requests are not.
The cache time runs from five minutes up to four hours, with a default of five minutes. Braze adds that "Cache settings aren't guaranteed," so design a message that still reads well if the number is a few minutes old.
Our suggestion is to reserve live lookups for messages where a stale figure would embarrass the brand. Examples are expiring offers, wallet contents and redemption reminders, and everything else can use the synced attribute.
Braze logs Connected Content request metadata, including the fully rendered request URL, for up to 30 days. Assume any member identifier placed in the URL appears in those logs, and choose the identifier with that in mind.
Where does loyalty automation break first?
These are the failure modes we check first, in this order. The order is our judgement, and the facts inside each item come from the pages in Sources.
- Identifier mismatch. Open Loyalty states that the user's
external_idin Braze "must match" theirloyaltyCardNumber(or another default identifier) in Open Loyalty. A mismatch can show up as a 404 error, because the user ID in Braze does not exist in Open Loyalty. - A trigger on the wrong attribute. A balance trigger fires on every earn, and a tier trigger is usually the one the programme owner meant.
- Over-mapped fields. Antavo sends every mapped field whenever any one of them changes, so a long mapping adds noise and data point usage.
- Silent webhook failures. Open Loyalty advises checking the Message Activity Log in Braze to ensure the webhook returned a 200 OK status.
- Two platforms messaging the same event. If the loyalty platform and Braze both send a tier-up message, the member gets two. Decide which system owns each message.
The first item is an identity problem. CustomerIK's customer data management service covers identity resolution, the work of stitching fragmented records into one view of the customer.
When an event seems not to arrive, the Event History tab on a user profile helps. It lists custom events and purchases from the past 30 days, up to the 100 most recent events. Event properties can contain personal data, so viewing that tab requires the Search Users, View PII and View User Event Properties permissions.
What does this look like for a hypothetical coffee retailer?
Take a hypothetical coffee retailer with three tiers and a mobile app. This is an illustration only, and it describes no client work and carries no results.
The loyalty platform holds points and tiers. The team syncs tier and points balance to Braze as attributes, and sends enrolment and redemption as events. The welcome message is an event-triggered Canvas that starts on enrolment.
The tier-up message is a campaign triggered when the tier attribute changes to any new value, with the new tier named through Liquid. The expiring-offer message calls the loyalty platform with Connected Content at send time.
The offer list then reflects what the platform holds at that moment, within the cache window. The reminder Canvas exits on the redemption event, and each choice maps to a pattern in the table above.
How does this connect to the rest of the programme?
Loyalty messaging draws on the same foundations as the rest of your lifecycle work. Using Braze Connected Content for Personalized Campaigns covers the live lookups used for offers. Tracking User Events for Better Campaigns in Braze covers the event naming that earn and redeem events depend on.
Loyalty data often starts outside the platform. Integrating CRM Data into Braze Marketing Automation covers getting member data into Braze cleanly. How to Unlock Hyper-Personalization in Braze Campaigns covers what to do with it once it is there.
Top 10 Customer Retention Strategies Using Braze places loyalty among other retention levers. How to Build a Winning Customer Engagement Strategy with Braze covers the caps and control group that keep it measurable. For the attribute rules above, keep the Braze documentation on attribute triggers open while you build.
CustomerIK's case studies show these patterns in practice. Our rewards programme migration case study covers moving the lifecycle campaigns of a multi-brand rewards programme onto Braze. Our gamification case study covers interactive rewards inside lifecycle journeys.
What should you do first?
As a Braze implementation partner, CustomerIK recommends writing a one-page message map before any sync is configured. List each loyalty message, which of the three patterns carries it, and which system owns the send. That page settles the integration choices before they become rework.
If you want help with the SDK, API and event setup behind that map, our Braze services cover technical integration. They also cover the attributes and events that triggers depend on.
This post covers documented Braze behaviour and the partner pages Braze publishes. It does not settle questions about consent, data transfer or marketing preference law for your members.
Frequently Asked Questions
1. How does loyalty data reach Braze?
The partner pages describe three routes. The loyalty platform can write custom attributes, or send events that appear as custom events. Braze can also call the platform at send time with Connected Content.
2. Can Braze send a message when a member's tier changes?
Yes. Use Action-Based Delivery with the Change Custom Attribute Value trigger on the tier attribute. It can fire on any new value or on a specific value, such as the best tier.
3. What happens if the same tier value is sent again?
Nothing fires. The trigger only fires when the value of a custom attribute changes, and an update to null does not fire it either.
4. Do attribute triggers work with array attributes?
No, attribute triggers are not currently available for array attributes. Store the tier as a string or number if you want to trigger on it.
5. How long is Connected Content cached?
Get requests are cached by default and post requests are not. If no cache time is specified, the default is five minutes. The range runs from five minutes to four hours, and cache settings aren't guaranteed.
Sources
- Braze, Loyalty technology partners. Retrieved 13 Oct 2026.
- Braze, Open Loyalty. Retrieved 13 Oct 2026.
- Braze, Antavo Loyalty Cloud. Retrieved 13 Oct 2026.
- Braze, Talon.One. Retrieved 13 Oct 2026.
- Braze, SessionM Loyalty Platform. Retrieved 13 Oct 2026.
- Braze, Attribute triggers. Retrieved 13 Oct 2026.
- Braze, Custom attributes. Retrieved 13 Oct 2026.
- Braze, Custom events. Retrieved 13 Oct 2026.
- Braze, Cache Connected Content responses. Retrieved 13 Oct 2026.
- Written by CustomerIK, a Braze implementation partner.
CustomerIK is a Braze implementation partner working across onboarding, technical integration, marketing operations and customer data management.
If you're mapping a loyalty platform into Braze and want a second view on the message map before you build, let's talk.




