# Create a birthday promotion via Braze

> Birthdays are a great opportunity to give presents to someone so treating your customers with a discount on their birthday is a great way to increase brand loyalty. In this tutorial, let's see how to build a birthday promotion using Braze and Talon.One.

> For the complete documentation index, see [llms.txt](https://docs.talon.one/llms.txt).

Let's imagine that we want to email a customer on their birthday via Braze.
This email contains a coupon for the customer. The coupon's validity starts
on the day the email is sent to the customer and ends seven days after that date.

When the customer redeems the coupon within its validity period,
they get 10% off on their whole order.

## Talon.One requirements

- You are an [admin](/docs/product/account/account-settings/manage-roles.md#admin-role) user.
- You have set up an [Application](/docs/product/applications/create-and-manage-applications.md).
- Your Application contains a running [campaign](/docs/product/campaigns/create-and-manage-campaigns.md) with the **Coupons** feature
  [enabled](/docs/product/campaigns/settings/manage-campaign-features.md).

You can edit the default format of the coupon codes in
the campaign's <Settings className="icon" /> [**Settings**][coupon format] section.

[coupon format]: /docs/product/campaigns/coupons/coupon-page-overview#edit-coupon-format

## Braze requirements

- You have created a [campaign](https://www.braze.com/docs/user_guide/messaging/campaigns/creating_campaign) or [canvas](https://www.braze.com/docs/user_guide/messaging/canvas) in Braze.
- The campaign is configured so that it sends an email to customers on their birthday. For more information, see [Creating an email campaign](https://www.braze.com/docs/user_guide/channels/email/html_editor/creating_an_email_campaign/).
- You have a way to identify a given customer across Talon.One and Braze.
   In this tutorial, we assume a customer's Talon.One `integrationId` is always equal to Braze's `user_id`.
   You can also create a new property on your Braze customer profiles to store Talon.One's integration ID.

## Set up the integration

<StepsContainer>

### Create an API key in Talon.One

In the Campaign Manager, create a Braze-specific API key:

1. In your Application, click <Settings className="icon" /> **Settings** > **Integration API Keys**.
1. Click <Add className="icon" /> **Create API Key**.
1. In the **Create API Key** drawer, if you are asked for a key type, select **Production**.
1. In **Key name**, type a name to identify the key.
1. In **Key expiration date**, select a date.

   :::tip
   Avoid choosing expiration dates that fall at the end of the year or during other
   high-traffic periods.
   :::

1. In **Third-party integration**, select **Yes**.
1. From **Platform**, select **{props.partner}**.
1. Click **Create API Key**.
1. Click <Copy className="icon" /> to copy the key for use.

:::note
You cannot view or copy the API key after closing the drawer.
:::

We will use the API key in the Braze campaign template.

### Create the birthday coupon code

To generate a coupon from Braze, we call the following endpoint:

```text title="POST Create coupon"
https://integration.talon.one/braze/coupon
```

<Button variant="primary" size="l" href="/third-party-api#tag/Braze/operation/braze/createCoupon">
  See API docs
</Button>

To trigger the endpoint, we must use Braze's
[Connected Content](https://www.braze.com/docs/user_guide/messaging/design_and_edit/personalize/connected_content/making_an_api_call) feature.

:::important
We assume that your customer profile in Braze contains a unique identifier that is equal to the customer integration ID in Talon.One.
In this tutorial, we use `${user_id}`. Ensure the user ID matches the integration ID in Talon.One.
:::

1. Open your [Braze email campaign](#braze-requirements) for editing.
1. Add the following Connected Content call to the email body, where:
   - `YOUR_DEPLOYMENT_URL` is the base URL of your Talon.One deployment.
   - `YOUR_APPLICATION_ID` is the ID of your Application in Talon.One.
   - `YOUR_CAMPAIGN_ID` is the ID of your campaign in Talon.One.
   - `YOUR_API_KEY` is the API key you [created](#create-an-api-key-in-talonone).

   ```liquid
   {% assign today = 'now' | date: "%Y-%m-%dT%H:%M:%SZ" %}
   {% assign todayinseconds = 'now' | date: "%s" %}
   {% assign seven_days = {{todayinseconds}} | plus: 604800 | date: "%Y-%m-%dT%H:%M:%SZ" %}

   {% capture postbody %}
     {"deploymentUrl": "YOUR_DEPLOYMENT_URL", "applicationId":YOUR_APPLICATION_ID, "campaignId":YOUR_CAMPAIGN_ID, "identifier":"{{ 'now' | date: '%Y-%m-%d %H:%M:%S.%N' }}", "integrationId":"{{${user_id}}}", "startDate":"{{today}}", "expiryDate":"{{seven_days}}"}
   {% endcapture %}

   {% connected_content https://integration.talon.one/braze/coupon
      :headers {
         "Authorization": "ApiKey-v1 YOUR_API_KEY"
      }
      :method post
      :body {{postbody}}
      :content_type application/json
      :save result
   %}

   Your coupon code is: {{result.Value}}
   ```

   :::note
   - In the example above, we use a timestamp for the `identifier` parameter. This ensures that a new coupon code is generated for each email during testing. In production, consider using one of the available [personalization tags](https://www.braze.com/docs/user_guide/messaging/design_and_edit/personalize/liquid/supported_personalization_tags), for example, the [dispatch ID](https://www.braze.com/docs/help/help_articles/data/dispatch_id).
   - `result.Value` must be written with a capital `V`, according to the response of the [Create coupon](/third-party-api#tag/Braze/operation/braze/createCoupon) endpoint.
   :::
1. To test your request:
   1. In the sidebar, click **Preview & Test**.
   1. In **Preview message as user**, select **Search User** and search for an existing user in Braze.You should see a coupon code.

Your birthday coupon codes are now generated automatically when your campaign is running. The coupon start date is set as the time Braze sent the
email. The coupon end date is the time Braze sent the email + seven days.

</StepsContainer>
