Receipt Data Reference
Every receipt template has access to a standardised data payload with 13 sections. Use {{section.field}} syntax in HTML and thermal templates.
All currency fields have a corresponding _display variant (e.g., grand_total → grand_total_display) that contains a locale-aware formatted string like $12.50.
Display Convenience Fields
Line items, fees, and totals include convenience fields that automatically resolve to the tax-inclusive or tax-exclusive value based on your WooCommerce tax display setting:
| Convenience field | Resolves to |
|---|---|
unit_price | unit_price_incl or unit_price_excl |
line_total | line_total_incl or line_total_excl |
subtotal | subtotal_incl or subtotal_excl |
grand_total | grand_total_incl or grand_total_excl |
unit_subtotal | Pre-coupon unit price (for showing original vs discounted) |
Use these convenience fields in templates — they respect your store's tax display configuration automatically.
meta
Order metadata.
| Field | Type | Example |
|---|---|---|
meta.schema_version | string | "1.0.0" |
meta.mode | string | "fiscal" or "live" |
meta.created_at | string | "2026-04-15T10:30:00" |
meta.order_id | number | 1234 |
meta.order_number | string | "1234" |
meta.currency | string | "USD" |
store
Store information. In multi-store setups (Pro), this reflects the store the order was placed at.
| Field | Type | Example |
|---|---|---|
store.name | string | "My Shop" |
store.address_1 | string | "123 Main St" |
store.address_2 | string | "Suite 100" |
store.city | string | "Portland" |
store.state | string | "OR" |
store.postcode | string | "97201" |
store.country | string | "US" |
store.tax_id | string | "123-456-789" |
store.phone | string | "+1 555-0100" |
store.email | string | "store@example.com" |
store.logo | string | URL to store logo |
store.opening_hours | string | Formatted opening hours |
cashier
The user who processed the order.
| Field | Type | Example |
|---|---|---|
cashier.id | number | 1 |
cashier.display_name | string | "Jane Smith" |
customer
Customer details. Empty for guest orders.
| Field | Type | Example |
|---|---|---|
customer.id | number | 42 |
customer.first_name | string | "John" |
customer.last_name | string | "Doe" |
customer.billing.address_1 | string | "456 Oak Ave" |
customer.billing.city | string | "Portland" |
customer.billing.state | string | "OR" |
customer.billing.postcode | string | "97201" |
customer.billing.country | string | "US" |
customer.billing.email | string | "john@example.com" |
customer.billing.phone | string | "+1 555-0200" |
customer.shipping.* | Same fields as billing | |
customer.tax_id | string | "987-654-321" |
lines
Array of line items. Loop with {{#lines}}...{{/lines}}.
| Field | Type | Description |
|---|---|---|
name | string | Product name |
quantity | number | Quantity ordered |
sku | string | Product SKU |
unit_price | number | Unit price (tax display aware) |
unit_price_display | string | Formatted unit price |
unit_price_incl | number | Unit price including tax |
unit_price_excl | number | Unit price excluding tax |
unit_subtotal | number | Pre-coupon unit price |
unit_subtotal_display | string | Formatted pre-coupon unit price |
subtotal | number | Line subtotal before discounts |
discount | number | Discount amount |
discount_display | string | Formatted discount |
line_total | number | Line total (tax display aware) |
line_total_display | string | Formatted line total |
line_total_incl | number | Line total including tax |
line_total_excl | number | Line total excluding tax |
tax_breakdown | array | Per-rate tax breakdown (same structure as tax_summary: code, rate, label, taxable, tax_amount, tax_amount_display) |
fees
Array of fee items. Loop with {{#fees}}...{{/fees}}.
| Field | Type | Description |
|---|---|---|
name | string | Fee name |
total_incl | number | Fee total including tax |
total_excl | number | Fee total excluding tax |
total_incl_display | string | Formatted inclusive total |
total_excl_display | string | Formatted exclusive total |
shipping
Array of shipping items. Loop with {{#shipping}}...{{/shipping}}.
| Field | Type | Description |
|---|---|---|
name | string | Shipping method name |
total_incl | number | Shipping total including tax |
total_excl | number | Shipping total excluding tax |
discounts
Discount totals for the order.
| Field | Type | Description |
|---|---|---|
discounts.total_incl | number | Total discount including tax |
discounts.total_excl | number | Total discount excluding tax |
discounts.total_incl_display | string | Formatted inclusive discount |
discounts.total_excl_display | string | Formatted exclusive discount |
totals
Order totals.
| Field | Type | Description |
|---|---|---|
totals.subtotal | number | Order subtotal |
totals.subtotal_display | string | Formatted subtotal |
totals.discount_total_incl | number | Total discount including tax |
totals.discount_total_excl | number | Total discount excluding tax |
totals.tax | number | Total tax amount |
totals.tax_display | string | Formatted tax |
totals.grand_total | number | Grand total (tax display aware) |
totals.grand_total_display | string | Formatted grand total |
totals.grand_total_incl | number | Grand total including tax |
totals.grand_total_excl | number | Grand total excluding tax |
totals.paid_total | number | Amount paid |
totals.paid_total_display | string | Formatted amount paid |
totals.change_total | number | Change given |
totals.change_total_display | string | Formatted change |
tax_summary
Array of per-rate tax breakdowns. Loop with {{#tax_summary}}...{{/tax_summary}}.
| Field | Type | Example |
|---|---|---|
code | string | "US-OR-TAX-1" |
rate | number | 10 |
label | string | "Sales Tax" |
taxable | number | Taxable amount |
tax_amount | number | Tax collected |
tax_amount_display | string | Formatted tax amount |
payments
Array of payment methods used. Loop with {{#payments}}...{{/payments}}.
| Field | Type | Description |
|---|---|---|
method | string | Payment gateway ID |
title | string | Display name (e.g., "Cash") |
amount | number | Amount paid via this method |
amount_display | string | Formatted amount |
tendered | number | Amount tendered (cash payments) |
tendered_display | string | Formatted tendered amount |
change | number | Change given |
change_display | string | Formatted change |
fiscal
Fiscal compliance fields. Populated by Pro via the woocommerce_pos_fiscal_snapshot_enrich filter.
| Field | Type | Description |
|---|---|---|
fiscal.immutable_id | string | Unique fiscal receipt ID |
fiscal.receipt_number | string | Sequential receipt number |
fiscal.sequence | number | Sequence counter |
fiscal.hash | string | SHA-256 checksum |
fiscal.qr_payload | string | QR code data |
fiscal.tax_agency_code | string | Tax authority code |
fiscal.signed_timestamp | string | Signed timestamp |
fiscal.signature_excerpt | string | Signature excerpt for display |
fiscal.document_label | string | Document type label |
fiscal.is_reprint | boolean | Whether this is a reprint |
fiscal.reprint_count | number | Number of reprints |
fiscal.extra_fields | array | Country-specific label/value pairs |
presentation_hints
Display configuration from WooCommerce settings.
| Field | Type | Description |
|---|---|---|
presentation_hints.tax_display | string | "incl" or "excl" |
presentation_hints.prices_entered_with_tax | boolean | Whether catalogue prices include tax |
presentation_hints.rounding_mode | string | Tax rounding method |
presentation_hints.locale | string | Store locale (e.g., "en-US") |
i18n
Translatable labels. Use {{i18n.key}} in templates.
Common keys include: subtotal, tax, total, discount, quantity, price, date, order_number, cashier, customer, payment_method, change, tendered.