Fetching data through Braze Connected Content

With Braze Connected content you can fetch data from Voucherify API and send messages to specific Braze segments. In this tutorial, you’ll see how to set up connected content scripts to publish Voucherify coupons, invite new referrers, retrieve loyalty cards balance and more.

Contents

  1. How does it work?
  2. Security
  3. Examples
  4. Displaying fetched data in Braze messages

How does it work?

The very basic schema of the script looks as follows:

Script Description
{% connected_content
  “voucherify-API-ENDPOINT-url” 
  :method post
  :headers {
    “X-App-Id”: “Voucherify-API-key”,
    “X-App-Token”: “Voucherify-Secret-key"
}
  :content_type application/json
  :retry
  :save {{result_variable}}
%}
		

Selected Voucherify endpoint
Http method

Unique Voucherify API key for authentication
Unique Voucherify API token for authentication




Variable storing the result (Voucherify API response)

Before you use connected content to call the Voucherify API, it’s crucial to provide the script and a campaign with mechanisms protecting from fraud and breaking API limits.


Security

Note that without the following settings each time a connected content message is triggered, it calls the Voucherify API at least two times. 

The following settings reduce the number of API calls invoiced by Braze and cut the risk of hitting the hard-blocking API limit that may break the message delivery.

Rate Limiter

First, limit the number of messages sent by Braze per minute. This secures both Braze and Voucherify APIs against hitting too much traffic from your campaign. When targeting users during campaign setup, choose to limit the sending rate to 500 messages per minute. 

Braze rate limiter

Add caching to POST calls

All examples of Connected Content in this tutorial include default caching to reduce the number of API calls triggered by Braze. Note that removing cache from your script will double the number of Voucherify API calls used by Connected Content.

Connected Content calls made via HTTP POST don’t cache by default and will make two API requests per each published code. This behavior can drain your hourly and monthly limits. The caching mechanism will allow you to limit that to one API call per voucher publication. To add caching to POST calls, you must perform two steps:

  • Add a :cache_max_age attribute. By default, the caching duration is 5 minutes. You can customize the duration using seconds. It can be set between 5 minutes to 4 hours. Example: :cache_max_age 3600 will cache for 1 hour.
  • Provide a caching key cache_id={{cache_id}} in the destination endpoint query parameter so Braze can identify a unique publication. First, define the variable and then append the unique query string to your endpoint. This will differentiate each publication by the source_id.

Add caching to braze email template

Note the consequences: Braze caches the API calls based on the URL. The unique string used as a query parameter is ignored by Voucherify, but it distinguishes different API requests for Braze and allows to cache each unique attempt separately. Without that query parameter, every customer will receive the same coupon code for the cache duration.

Retry attribute

Connected Content does not validate the Voucherify response, so we additionally recommend adding a retry attribute in the Connected Content script. The connected content logic will try to retry 5 times before aborting the message (it will respect the rate limiter). This method will help prevent cases of failed code publishing when it takes a little longer to fetch data from Voucherify. 

If you do not use :retry, then irrespective of the response returned from Voucherify, Braze will attempt to send the distribution, which may result in generating emails without a published code.

Add retry attribute to Braze email template

Unique publication per customer

The source_id parameter in the script body provides that each customer can receive only one unique code in a single Braze campaign. As a result, even if Braze unintentionally multiplies the request, each user will receive the same unique code that was published to him/her in the first message.

Add source id to Braze email template

You can modify {{source_id}} and its effect on publications by using the following configurations:

Configuration Effect
{{campaign.${dispatch_id}}} Ensures that all customers within a single send-out will use the same publication.
{{campaign.${api_id}}} Ensures that all customers within a single campaign will use the same publication.
{{${user_id}}} or
{{${braze_id}}}
Ensures that every customer will use the same publication no matter which campaign is sent (you can use ${user_id} which is an external_id and ${braze_id} which is an internal id).
{{campaign.${dispatch_id}}} and
{{campaign.${user_id}}}
Each customer within a single send-out will use the same unique publication.

Customer can join only once

If your Voucherify campaign has a limit Customers can join only once, remove publication source id from the script body. Voucherify will make sure that each Braze message to the same customer will deliver the same code that was published in the first place. 

Your Connected Content script should be as follows:

{% assign braze_campaign_id = {{campaign.${api_id}}} %}
{% assign customer_id = {{${user_id}}} %}
{% assign cache_id = braze_campaign_id | append: customer_id %}
{% assign voucherify_campaign_id = "CAMPAIGN_ID" %}

{% connected_content 
   https://api.voucherify.io/v1/publications?cache_id={{cache_id}}
   :method post
   :headers {
	"X-App-Id": "VOUCHERIFY-APP-ID",
	"X-App-Token": "VOUCHERIFY-APP-TOKEN"
   }
   :body campaign={{voucherify_campaign_id}}&customer={{customer_id}}&channel=Braze
   :content_type application/json
   :cache_max_age
   :retry
   :save publication
 %}

Examples

Keep in mind that all examples below use Voucherify publication source id, and Braze cache and retry parameters to limit API calls invoked by a Braze campaign. You must be aware of the following consequences: 

  • It isn't possible to publish and send different codes to the same customer in a single Braze campaign.
  • If your Voucherify campaign uses the join only once feature, you need to remove source_id from the connected content body as described here.

Publish and send unique coupon code

In this example, the Connected Content script calls Voucherify API to publish a unique coupon code and send it in the Braze message. Each Braze user receives only one unique code. 

{% assign braze_campaign_id = {{campaign.${api_id}}} %}
{% assign customer_id = {{${user_id}}} %}
{% assign source_id = braze_campaign_id | append: customer_id %}
{% assign voucherify_campaign_id = "CAMPAIGN_ID" %}
{% assign cache_id = source_id %}

{% connected_content 
   YOUR API ENDPOINT/v1/publications?cache_id={{cache_id}}
   :method post
   :headers {
        "X-App-Id": "VOUCHERIFY-APP-ID",
        "X-App-Token": "VOUCHERIFY-APP-TOKEN"
   }
   :body campaign={{voucherify_campaign_id}}&customer={{customer_id}}&channel=Braze&source_id={{source_id}}
   :content_type application/json
   :cache_max_age
   :retry
   :save publication
 %}

Invite new referrers

This Connected Content script enables you to publish and send unique referral codes to selected Braze users. Each user receives only one referral code to share with other users and gain new referrals. 

{% assign braze_campaign_id = {{campaign.${api_id}}} %}
{% assign customer_id = {{${user_id}}} %}
{% assign source_id = braze_campaign_id | append: customer_id %}
{% assign voucherify_campaign_id = "CAMPAIGN_ID" %}
{% assign cache_id = source_id %}

{% connected_content 
   YOUR API ENDPOINT/v1/publications?cache_id={{cache_id}}
   :method post
   :headers {
  	"X-App-Id": "VOUCHERIFY-APP-ID",
        "X-App-Token": "VOUCHERIFY-APP-TOKEN"
   }
   :body campaign={{voucherify_campaign_id}}&customer={{customer_id}}&channel=Braze&source_id={{source_id}}
   :content_type application/json
   :cache_max_age
   :retry
   :save publication
 %}

Fetch loyalty card balance

Here is an example of a Connected Content script that pulls the current loyalty balance based on the loyalty card code that was sent beforehand to Braze as a custom attribute. Note that you need to store the loyalty card code as a custom attribute in Braze user’s profile before using this script.

{% assign braze_campaign_id = {{campaign.${api_id}}} %}
{% assign customer_id = {{${user_id}}} %}
{% assign source_id = braze_campaign_id | append: customer_id %}
{% assign voucherify_campaign_id = "CAMPAIGN_ID" %}
{% assign cache_id = source_id %}

{% connected_content 
   YOUR API ENDPOINT/v1/loyalties/{{voucherify_campaign_id}}/members/{{custom_attribute.${loyalty.card}}}?cache_id={{cache_id}}
   :method get
   :headers {
	"X-App-Id": "VOUCHERIFY-APP-ID", 
        "X-App-Token": "VOUCHERIFY-APP-TOKEN"
   }
   :content_type application/json
   :cache_max_age
   :retry
   :save member
 %}

Display fetched data in Braze messages

We’re assuming you already have a Braze campaign or canva in which you want to use the connected content script. 

Step 1: Add connected content script to message template

  1. Copy and paste the Connected Content script under the <body> tag in a message HTML template. 
  2. Replace CAMPAIGN_ID with a Voucherify campaign_id copied from the URL address of Voucherify campaign dashboard. Fetch campaign ID from URL
    {% assign voucherify_campaign_id = "camp_Y7h1meBSyybsNs7UpSVVZZce"
    	
  3. Paste your API endpoint. If you don't know what your API endpoint is, you can check it in the Project settings > General > API endpoint.
    YOUR API ENDPOINT/v1/publications?cache_id={{cache_id}}
    	
    Shared Cluster Endpoint for Braze Connected Content
    Europe (default) https://api.voucherify.io/v1/publications
    United States https://us1.api.voucherify.io/v1/publications
    Asia (Singapore) https://as1.api.voucherify.io/v1/publications
  4. Add your API keys for authentication. You can find  Voucherify-App-Id and Voucherify-App-Token in your Project Settings > General > Application Keys.Application Keys
    "X-App-Id": "VOUCHERIFY-APP-ID",
    "X-App-Token": "VOUCHERIFY-APP-TOKEN"
    	

Now your Connected Content script is ready to go.

{% assign braze_campaign_id = {{campaign.${api_id}}} %}
{% assign customer_id = {{${user_id}}} %}
{% assign source_id = braze_campaign_id | append: customer_id %}
{% assign voucherify_campaign_id = "camp_Y7h1meBSyybsNs7UpSVVZZce" %}
{% assign cache_id = source_id %}

{% connected_content 
   https://api.voucherify.io/v1/publications?cache_id={{cache_id}}
   :method post
   :headers {
        "X-App-Id": "490a3fb6-a",
        "X-App-Token": "328099d5-a"
   }
   :body campaign={{voucherify_campaign_id}}&customer={{customer_id}}&channel=Braze&source_id={{source_id}}
   :content_type application/json
   :cache_max_age
   :retry
   :save publication
 %}

Step 2: Create snippet to display fetched data

Responses from the Voucherify API is stored by connected content under the value of :save parameter. For example:

:save member

This enables you to retrieve and display data from a Voucherify response in Braze messages.

You can create snippets that display the published code, loyalty card balance, expiration date, and other parameters included in JSON format response from the Voucherify API.

For example, to display the published code in a message template, you need to create a snippet that fetches a unique code from the voucher object.

Connected content script:

Connected content script showing where you save a Voucherify response

Snippet in Braze message template:

{{publication.voucher.code}}

As a result, each customer gets a message with a unique code automatically assigned to their profile. Each time a code is received by the user, it is published to his/her profile in Voucherify.

To display a loyalty card balance fetched from the Voucherify API, you need to create the following snippet:

{{member.loyalty_card.balance}}

where the member is a value of the :save parameter in Connected Content script.

:save member

We highly advise you not to entirely depend on the 'Preview mode' and to send several test messages to confirm that everything works as it should.

Step 3: Set up rate limiter

When setting up a campaign target, use advanced settings to limit the number of messages sent per minute.

Braze rate limiter

Read more about Rate Limiter and Frequency Capping in Braze documentation.

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us