A Klaviyo flow can create a Wrapped gift card and email it to the person in the flow. You add a Webhook action to the flow that sends a short JSON message to Wrapped. Wrapped creates a promotional gift card for the amount you set, adds it to every connected sales channel and emails it to the customer. For example: "Spend over $200 and get a $20 gift card". The Klaviyo integration must be installed first, so this needs the Pro plan or above.
Every gift card a flow creates counts toward your monthly gift card allowance, and cards over the allowance are billed as overage. Set your flow's conditions carefully, and test with yourself before turning it on. See How the monthly gift card allowance works.
Step 1: Copy your details from Wrapped
- Go to Settings › Integrations and API keys.
- On the Klaviyo row (it must show Installed), click Set up flow action.
- In the Klaviyo flow action dialog, copy 2. Destination URL. It looks like
https://manage.wrappedgiftcards.com/Webhooks/Klaviyo/CustomAction?accountId=followed by your account ID. - Copy 3. Verification token. You'll use it as the
Wrapped-Verificationheader.
Keep the verification token private. Anyone who has it and your Destination URL can create gift cards on your account.
Step 2: Add the webhook to your Klaviyo flow
- In Klaviyo, create a flow (or open an existing one) and set its trigger and conditions, for example "Placed Order" where the order value is over 200.
- From the actions panel, drag a Webhook action into the flow where the gift card should be created.
- In the webhook settings, paste the Destination URL from Wrapped.
- Add a header with the key
Wrapped-Verificationand paste the Verification token as its value. - Paste the JSON body below, and change
amountandcampaign_nameto suit this flow. - Save the action. Then use Review and Turn On to turn the flow on.
{
"recipient_email": "{{ person.email }}",
"recipient_name": "{{ person.first_name|default:'' }} {{ person.last_name|default:'' }}",
"amount": 20,
"campaign_name": "Spend over $200"
}
JSON body fields
| Field | Required | What it does |
|---|---|---|
recipient_email | Yes | Who receives the gift card. Usually {{ person.email }}. |
recipient_name | Yes | The recipient's name, shown on the gift card and in the email. It can't be empty. |
amount | Yes | The gift card value, as a number greater than zero in your Wrapped account's currency. No currency symbol and no quotes. |
campaign_name | Yes | A name for this flow's gift cards. Wrapped groups the cards into a batch named after it. |
expires | No | An expiry date for the card, for example "2026-12-31". If you leave it out, your default expiry from Settings › Gift card rules is used. |
do_not_send_notification | No | true creates the card without Wrapped sending the gift card email (useful if Klaviyo sends its own email). Leave it out or use false to have Wrapped email the card. |
If a request includes an Idempotency-Key header, Wrapped creates only one gift card for each key value, so a repeated request with the same key doesn't create a second card.
What Wrapped creates
- An Active, promotional gift card for
amount, in your account's currency, with a new code in your code format. - The card is added to a batch named "Klaviyo flow: campaign name flow ID" under Gift cards › Batches. See Batches: create many gift cards at once.
- The card's notes say "Klaviyo flow" with the flow's ID, and its timeline shows "Gift card created from Klaviyo flow".
- Wrapped adds the card to every connected sales channel, then emails it using your gift card email, unless
do_not_send_notificationistrueor that email is turned off under Branding › Emails. - Wrapped sends a Wrapped: Klaviyo Flow: flow ID event to the recipient's Klaviyo profile, with the card's code, balance and links. Unless you turned notifications off, a Wrapped: Gift Card Issued event follows. You can use either to send your own Klaviyo email. See Klaviyo integration for the properties.
Test your flow
- Set the flow's conditions so you can trigger it yourself, or use a test profile with your own email address.
- Trigger the flow and wait for the webhook step to run.
- In Wrapped, open Gift cards › Batches and look for the batch named after your
campaign_name. Open the card and check the amount, recipient and email. - Void the test card when you're done. Voided cards don't count toward your allowance.
Advanced: start an event automation instead
If you'd rather manage the reward in Wrapped, create an automation with the API event trigger (Marketing › Automations) and send its event name from Klaviyo. The automation decides the reward, amount and email, and can use its own date range and usage limits. See Marketing automations.
In the Klaviyo flow action dialog, open Advanced: start an event automation instead and copy that Destination URL (it ends in /Webhooks/Klaviyo/Event?accountId=…). Use the same Wrapped-Verification header, with a body like:
{
"event_name": "your-automation-event-name",
"recipient_email": "{{ person.email }}",
"properties": { "first_name": "{{ person.first_name }}" }
}
event_name must match the automation's Event name exactly. You can add "amount" to override the automation's amount. Each entry in properties can be used in the automation's email as {{event.first_name}}.
Troubleshooting
| What you see | Why | What to do |
|---|---|---|
| Klaviyo shows the webhook failed with "Could not verify webhook request" | The Wrapped-Verification header is missing or wrong, or Klaviyo isn't installed in Wrapped | Copy the token again from Set up flow action and check the header key is exactly Wrapped-Verification. Check the Klaviyo row shows Installed. |
| The webhook ran in Klaviyo but no gift card or batch appears in Wrapped | recipient_email, recipient_name or campaign_name was empty, or the body isn't valid JSON (for example amount isn't a plain number). Wrapped still accepts the request, so Klaviyo doesn't show an error. | Check the JSON body and the profile's data, then trigger the flow again with a test profile. |
| A $0 gift card was created | amount was missing or 0 | Set amount to the value you want, then void the $0 card. |
| The card was created but no email arrived | do_not_send_notification is true, the gift card email is turned off, or the email is delayed or filtered | Check the body and Branding › Emails. See A customer didn't receive their gift card email. |
| Cards stopped being created | Klaviyo was disconnected in Wrapped, or your subscription isn't active | Reinstall Klaviyo. Your Destination URL and verification token stay the same, so the flow doesn't need changing. |
Common questions
Does each flow need its own Destination URL?
No. Every flow uses the same URL and token. Use a different campaign_name in each flow so the cards land in separate batches.
Can the amount depend on the order value?
The amount in the body can use any value Klaviyo can insert, as long as the result is a plain number. For "spend X, get Y" rewards based on orders at your sales channels, a Wrapped marketing automation is often simpler.
Are these cards marked as promotional in reports?
Yes. Cards created by a Klaviyo flow action are marked promotional. See Promotional gift cards and bonus credit in reports.
