Issue gift cards from a Klaviyo flow

Add a webhook step to a Klaviyo flow so Wrapped creates and emails a promotional gift card, for example "spend over $200, get a $20 gift card". Covers the Destination URL, the Wrapped-Verification header, every JSON body field, what the card looks like and troubleshooting.

Updated September 19, 2026

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

    1. Go to Settings › Integrations and API keys.
    2. On the Klaviyo row (it must show Installed), click Set up flow action.
    3. 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.
    4. Copy 3. Verification token. You'll use it as the Wrapped-Verification header.

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

    1. 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.
    2. From the actions panel, drag a Webhook action into the flow where the gift card should be created.
    3. In the webhook settings, paste the Destination URL from Wrapped.
    4. Add a header with the key Wrapped-Verification and paste the Verification token as its value.
    5. Paste the JSON body below, and change amount and campaign_name to suit this flow.
    6. 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

FieldRequiredWhat it does
recipient_emailYesWho receives the gift card. Usually {{ person.email }}.
recipient_nameYesThe recipient's name, shown on the gift card and in the email. It can't be empty.
amountYesThe gift card value, as a number greater than zero in your Wrapped account's currency. No currency symbol and no quotes.
campaign_nameYesA name for this flow's gift cards. Wrapped groups the cards into a batch named after it.
expiresNoAn 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_notificationNotrue 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_notification is true or 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

    1. Set the flow's conditions so you can trigger it yourself, or use a test profile with your own email address.
    2. Trigger the flow and wait for the webhook step to run.
    3. 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.
    4. 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 seeWhyWhat 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 WrappedCopy 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 Wrappedrecipient_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 createdamount was missing or 0Set amount to the value you want, then void the $0 card.
The card was created but no email arriveddo_not_send_notification is true, the gift card email is turned off, or the email is delayed or filteredCheck the body and Branding › Emails. See A customer didn't receive their gift card email.
Cards stopped being createdKlaviyo was disconnected in Wrapped, or your subscription isn't activeReinstall 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.

Did this answer your question?