3. 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 4 minutes ago

Use this page when you (or your agency) build Giftnote emails in Klaviyo. It lists the 12 events Giftnote sends to Klaviyo, the details each one carries, and blocks you can copy straight into your flow emails. A flow is an automated Klaviyo email that starts when an event arrives.

The Klaviyo notification events list in Giftnote.

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

Giftnote's own emails and SMS live under Settings → Notifications and use different names from the Klaviyo events below. For the full list of notifications, who gets each one and when, see Email Notification Types in Giftnote.

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

Metric nameGoes toFires onWhat it is
Placed Gift OrderCustomerSend Later, On DeliveryA customer has placed a gift order. Confirm it has been processed.
Gift Order DeliveredCustomerSend Now, Scheduled Time, Package DeliveredThe gift order met its delivery conditions. Tell the customer their gift has been sent.
Received Gift OrderRecipientSend Now, Scheduled Time, Package Delivered, Resend MessageThe gift message itself, sent to the recipient.

Gift Cards

Metric nameGoes toFires onWhat it is
Purchased Gift CardCustomerSend LaterA customer bought a gift card with a message. Confirm it has been processed.
Gift Card DeliveredCustomerSend Now, Scheduled TimeThe gift card met its delivery conditions. Tell the customer it has been sent.
Received Gift CardRecipientSend Now, Scheduled Time, Resend MessageThe gift card and message, sent to the recipient.
Gift CardBothSelf Purchase, Resend Gift CardA gift card bought with no message, or a resend of just the card.
Issued Store CreditBothStore CreditStore credit issued from the admin. Sends the code and card details.
Redeemed Gift CardBothGift Card SpentA gift card has been used. Report the remaining balance.

Multi Gift

Metric nameGoes toFires onWhat it is
Multi Gift CreatedCustomerMulti Gift request receivedA multi-gift request has been created.
Multi Gift ApprovedCustomerMulti Gift approvedA multi-gift request has been approved.
Multi Gift CompleteCustomerAll gifts deliveredEvery gift in a multi-gift has been delivered.

Two field name styles, two syntaxes

Getting this wrong is the most common reason a Giftnote field shows up blank in Klaviyo. Giftnote sends properties (the details inside an event) 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

PropertyUse in a template asExample value
From{{ event.From }}John Doe
To{{ event.To }}Jane Smith
Message{{ event.Message }}The gift message the sender wrote
customerName{{ event.customerName }}John Doe
customerEmail{{ event.customerEmail }}john@example.com
orderName{{ event.orderName }}#1024
orderId{{ event.orderId }}Internal order reference
shopName{{ event.shopName }}Your store name
Scheduled Time{{ event|lookup:'Scheduled Time' }}September 23 2026 at 7:43 PM
scheduledAt{{ event.scheduledAt }}2026-09-23T19:43:15.718Z
createdAt{{ event.createdAt }}2026-09-23T19:43:15.718Z
Delivery Method{{ event|lookup:'Delivery Method' }}sendNow

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.

PropertyTypeNotes
Order ItemsListOne entry per line item. Each has Title, Quantity, Price, Sku, URL, Image.
Order SkusListA flat list of the SKUs in the order.
Return URLTextOnly if you have the Loop Returns integration enabled.

Gift card events only

Present on Purchased Gift Card, Gift Card Delivered, Received Gift Card, Gift Card, Issued Store Credit and Redeemed Gift Card.

PropertyUse in a template asExample value
Gift Card Code{{ event|lookup:'Gift Card Code' }}GIFT-XXXX-1234
giftCardLast4{{ event.giftCardLast4 }}T123
Gift Card Value{{ event|lookup:'Gift Card Value' }}50
Gift Card Currency{{ event|lookup:'Gift Card Currency' }}AUD
Gift Card Currency Symbol{{ event|lookup:'Gift Card Currency Symbol' }}$
Gift Card Balance{{ event|lookup:'Gift Card Balance' }}Remaining balance. Redeemed Gift Card only.

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>

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

Each of the 12 events can start its own flow. Build them in this order: start with the first six and add the rest when you need them.

  1. Received Gift Order: the gift message to the recipient. Build this one first. Trigger: Received Gift Order.
  2. Received Gift Card: the gift card and message to the recipient. Trigger: Received Gift Card.
  3. Gift Card: a card bought with no message, or a resend of just the card. Trigger: Gift Card.
  4. Issued Store Credit: store credit issued from your admin. Trigger: Issued Store Credit.
  5. Placed Gift Order: order confirmation to the customer. Trigger: Placed Gift Order.
  6. Purchased Gift Card: gift card purchase confirmation to the customer. Trigger: Purchased Gift Card.
  7. Gift Order Delivered: tells the customer their gift has landed. Trigger: Gift Order Delivered.
  8. Gift Card Delivered: tells the customer their card has been sent. Trigger: Gift Card Delivered.
  9. Redeemed Gift Card: remaining balance after a card is used. Trigger: Redeemed Gift Card.
  10. Multi Gift Created: a multi-gift request has been created. Trigger: Multi Gift Created.
  11. Multi Gift Approved: a multi-gift request has been approved. Trigger: Multi Gift Approved.
  12. 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

  1. In Klaviyo, create a flow and set the trigger to the Giftnote metric you want, for example Received Gift Order.
  2. Add an email and build it from the blocks above.
  3. 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.
  4. 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.

Old fieldUse instead
event.gift_toevent.To
event.gift_fromevent.From
event.gift_messageevent.Message
event.timeevent|lookup:'Scheduled Time'
event.timezoneNo longer sent
event.order_itemsevent|lookup:'Order Items'
item.titleitem.Title
item.quantityitem.Quantity
item.imageitem.Image
item.product_urlitem.URL
item.variant_titleNo longer sent
event.voucher_itemsGift card details are now sent as flat fields on each gift card event
event.voucher_valueevent|lookup:'Gift Card Value'
event.voucher_currencyevent|lookup:'Gift Card Currency'
event.voucher_currency_symbolevent|lookup:'Gift Card Currency Symbol'
event.voucher_codeevent|lookup:'Gift Card Code'
event.type (PRODUCTS_ONLY / HYBRID / VOUCHERS_ONLY)No longer sent. Trigger a separate flow per event instead.
has_products / has_vouchers trigger filtersNo longer sent. Trigger a separate flow per event instead.

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]