Klaviyo flow templates and event reference
Every Giftnote event sent to Klaviyo, all the properties they carry, and copy-paste template blocks for your flow emails.
Written By Giftnote Team
Last updated About 2 hours ago
Giftnote sends 12 events to Klaviyo. This guide gives you the event list, every property those events carry, and copy-paste template blocks for your flow emails.
If you built flows on the original Giftnote integration, they need updating. The field names have changed. gift_to, gift_from, gift_message, order_items, voucher_items and event.type are no longer sent. See What changed from the original integration at the end of this article for the full mapping.
The notifications you can set up
There are 17 notifications in the Giftnote app under Settings → Notifications. Each one can be sent through Klaviyo. Numbers 1 to 9 cover gift orders and gift cards. Numbers 10 to 17 only apply if you use Multi Gift.
Gift Orders
Gift Cards
Multi Gift
Other
The three (Staff) notifications go to your team, not to shoppers. In the app they are listed under Recipient.
The events
Find these in the Giftnote app under Settings → Integrations → Klaviyo → Notification Events. Each one has a switch, plus Test, Preview and Edit. Use Preview to see the exact payload your store sends, and Edit to rename the metric if you need it to match an existing flow.
Gift Orders
Gift Cards
Multi Gift
Two field name styles, two syntaxes
This is the single most common reason a Giftnote field renders blank in Klaviyo. Giftnote sends properties in two naming styles, and each needs a different syntax.
Single-word and camelCase names use normal dot access:
{{ event.From|default:'' }}
{{ event.To|default:'' }}
{{ event.Message|default:'' }}
{{ event.orderName|default:'' }}
{{ event.customerName|default:'' }}
Names containing a space must use the lookup filter:
{{ event|lookup:'Gift Card Code'|default:'' }}
{{ event|lookup:'Gift Card Value'|default:'' }}
{{ event|lookup:'Scheduled Time'|default:'' }}
{{ event|lookup:'Delivery Method'|default:'' }}
{{ event.Gift Card Code }} will not error. It renders nothing at all, and the email sends with a blank space where the code should be. Always use lookup for any field name with a space in it, and always add |default:''.
Property reference
On every event
Delivery Method is sent as a camelCase code, not as the label you see in the Giftnote app. Use Preview on the event to read the exact value before you write a flow filter on it.
Scheduled Time is pre-formatted text with no timezone. Use it when you want to print a send time. Use scheduledAt when you need a real timestamp to compare against.
Gift order events only
Present on Placed Gift Order, Gift Order Delivered and Received Gift Order.
Gift card events only
Present on Purchased Gift Card, Gift Card Delivered, Received Gift Card, Gift Card, Issued Store Credit and Redeemed Gift Card.
The gift card code is deliberately masked on customer-facing events. On Purchased Gift Card, Gift Card Delivered and Redeemed Gift Card, Gift Card Code returns a masked value such as ********T123, so a live code is never emailed to the buyer in a confirmation. The full code is only sent on Received Gift Card, Gift Card and Issued Store Credit. In customer confirmations, use {{ event.giftCardLast4 }} and refer to the card as ending in those four characters.
Copy-paste template blocks
Subject lines and preview text
{{ event.From|default:'Someone' }} sent you a gift
A gift from {{ event.From|default:'' }} is on its way
{{ event.To|default:'Your recipient' }} has received your gift
Your gift card is here, {{ event.To|default:'' }}
Recipient gift message, text block
For Received Gift Order and Received Gift Card. Paste into the source view of a text block.
<p>Hi {{ event.To|default:'' }},</p>
<p>{{ event.From|default:'Someone' }} has sent you a gift from {{ event.shopName|default:'' }}.</p>
<p><strong>They left you this message:</strong></p>
<p><em>{{ event.Message|default:'' }}</em></p>
To hide the message section entirely when the sender did not write one, wrap it:
{% if event.Message %}
<p><strong>They left you this message:</strong></p>
<p><em>{{ event.Message }}</em></p>
{% endif %}
Customer confirmation, text block
For Placed Gift Order, Gift Order Delivered, Purchased Gift Card and Gift Card Delivered.
<p>Hi {{ event.customerName|default:'' }},</p>
<p>Your gift for {{ event.To|default:'your recipient' }} on order {{ event.orderName|default:'' }} has been sent.</p>
<p>Delivery time: {{ event|lookup:'Scheduled Time'|default:'as soon as possible' }}</p>
Order items, text block loop
The most reliable way to list the products in a gift order. Paste into the source view of a text block.
{% for item in event|lookup:'Order Items' %}
<p>
<a href="{{ item.URL|default:'' }}">{{ item.Title|default:'' }}</a>
x {{ item.Quantity|default:'' }}
- {{ item.Price|default:'' }}
</p>
{% endfor %}
With the product image:
{% for item in event|lookup:'Order Items' %}
<p>
<img src="{{ item.Image|default:'' }}" width="80" alt="{{ item.Title|default:'' }}" />
<br />
<a href="{{ item.URL|default:'' }}">{{ item.Title|default:'' }}</a>
x {{ item.Quantity|default:'' }}
</p>
{% endfor %}
Each item in the loop exposes item.Title, item.Quantity, item.Price, item.Sku, item.URL and item.Image. URL and Image can be empty depending on the product, so always keep the |default:''.
Order items, dynamic table block
If you prefer Klaviyo's product table block over a text loop, set the table up with:
- Row collection —
event|lookup:'Order Items' - Row alias —
item
Then reference {{ item.Title }}, {{ item.Quantity }}, {{ item.Price }}, {{ item.Image }} and {{ item.URL }} inside the table. Send yourself a preview to confirm the rows render before you turn the flow on.
Gift card block, recipient
For Received Gift Card, Gift Card and Issued Store Credit. These are the events that carry the full, usable code.
<p>Hi {{ event.To|default:'' }},</p>
<p>{{ event.From|default:'Someone' }} has sent you a <strong>{{ event|lookup:'Gift Card Currency Symbol'|default:'' }}{{ event|lookup:'Gift Card Value'|default:'' }} {{ event|lookup:'Gift Card Currency'|default:'' }}</strong> gift card.</p>
<p><strong>Your code:</strong> {{ event|lookup:'Gift Card Code'|default:'' }}</p>
Gift card block, customer confirmation
For Purchased Gift Card and Gift Card Delivered. Note this uses giftCardLast4, not the code.
<p>Hi {{ event.customerName|default:'' }},</p>
<p>Your {{ event|lookup:'Gift Card Currency Symbol'|default:'' }}{{ event|lookup:'Gift Card Value'|default:'' }} gift card ending {{ event.giftCardLast4|default:'' }} has been sent to {{ event.To|default:'your recipient' }}.</p>
Remaining balance
For Redeemed Gift Card.
<p>Your gift card ending {{ event.giftCardLast4|default:'' }} has been used.</p>
<p><strong>Remaining balance:</strong> {{ event|lookup:'Gift Card Currency Symbol'|default:'' }}{{ event|lookup:'Gift Card Balance'|default:'0' }} {{ event|lookup:'Gift Card Currency'|default:'' }}</p>
Return link
Only renders if you have the Loop Returns integration enabled. Present on the gift order and Multi Gift events.
{% if event|lookup:'Return URL' %}
<p><a href="{{ event|lookup:'Return URL' }}">Start a return or exchange</a></p>
{% endif %}
The flows you can build
Twelve events means twelve possible flows. Build them in this order. The first six cover the vast majority of gifting volume, so start there and add the rest later.
- Received Gift Order — the gift message to the recipient. The most important one. Trigger:
Received Gift Order. - Received Gift Card — the gift card and message to the recipient. Trigger:
Received Gift Card. - Gift Card — a card bought with no message, or a resend of just the card. Trigger:
Gift Card. - Issued Store Credit — store credit issued from your admin. Trigger:
Issued Store Credit. - Placed Gift Order — order confirmation to the customer. Trigger:
Placed Gift Order. - Purchased Gift Card — gift card purchase confirmation to the customer. Trigger:
Purchased Gift Card. - Gift Order Delivered — tells the customer their gift has landed. Trigger:
Gift Order Delivered. - Gift Card Delivered — tells the customer their card has been sent. Trigger:
Gift Card Delivered. - Redeemed Gift Card — remaining balance after a card is used. Trigger:
Redeemed Gift Card. - Multi Gift Created — a multi-gift request has been created. Trigger:
Multi Gift Created. - Multi Gift Approved — a multi-gift request has been approved. Trigger:
Multi Gift Approved. - Multi Gift Complete — every gift in a multi-gift has been delivered. Trigger:
Multi Gift Complete.
Flows 1 to 4 go to the recipient and are the ones that carry the full gift card code. Flows 5 to 9 go to the customer who bought the gift. Flows 10 to 12 only apply if you use Multi Gift.
How to build each one
- In Klaviyo, create a flow and set the trigger to the Giftnote metric you want, for example Received Gift Order.
- Add an email and build it from the blocks above.
- Before you switch the flow live, go back to Giftnote and turn off the matching built-in Giftnote notification, or your recipients will get two emails. This is under Settings → Notifications in the Giftnote app.
- Use Test on the event in Giftnote to push a sample event, then preview your email against it in Klaviyo.
You do not need conditional logic to separate products from gift cards any more. Gift orders and gift cards are separate events, so a flow triggered on a gift card event will never receive an order with products, and vice versa. Build one flow per event.
What changed from the original integration
If you are migrating flows built on the older Giftnote Klaviyo integration, these are the replacements.
New fields with no older equivalent: item.Price, item.Sku, Order Skus, giftCardLast4, Gift Card Balance, Delivery Method, Return URL, orderId, orderName, customerName, customerEmail, shopName, createdAt, scheduledAt.
Build a block with AI
If you want an AI assistant to write a custom block for you, paste this prompt in along with what you want the email to say.
I am building a Klaviyo flow email triggered by a Giftnote event.
Klaviyo uses Django-style template syntax. Giftnote sends properties in two naming styles and each needs different syntax:
- Single-word or camelCase names use dot access:
{{ event.From }}, {{ event.To }}, {{ event.Message }}, {{ event.customerName }}, {{ event.customerEmail }}, {{ event.orderName }}, {{ event.orderId }}, {{ event.shopName }}, {{ event.giftCardLast4 }}, {{ event.createdAt }}, {{ event.scheduledAt }}
- Names containing a space MUST use the lookup filter:
{{ event|lookup:'Gift Card Code' }}
{{ event|lookup:'Gift Card Value' }}
{{ event|lookup:'Gift Card Currency' }}
{{ event|lookup:'Gift Card Currency Symbol' }}
{{ event|lookup:'Gift Card Balance' }}
{{ event|lookup:'Scheduled Time' }}
{{ event|lookup:'Delivery Method' }}
{{ event|lookup:'Order Items' }}
{{ event|lookup:'Order Skus' }}
{{ event|lookup:'Return URL' }}
Rules:
- Always add |default:'' to every variable.
- Never write {{ event.Gift Card Code }}. It fails silently.
- "Order Items" is a list. Loop it with {% for item in event|lookup:'Order Items' %} ... {% endfor %}. Each item exposes item.Title, item.Quantity, item.Price, item.Sku, item.URL, item.Image.
- "Order Items", "Order Skus" and "Return URL" only exist on the gift order events. The Gift Card fields only exist on the gift card events.
- On Purchased Gift Card, Gift Card Delivered and Redeemed Gift Card the Gift Card Code is masked, so use giftCardLast4 in those emails.
Output plain HTML suitable for pasting into a Klaviyo text block source view. Use inline styles only. No external CSS, no JavaScript.
What I want the email to say:
[describe it here]