Overview
Sales Order document templates in Luminous use Mustache — a logic-less template language where {{placeholderName}} inserts a value and {{#sectionName}}...{{/sectionName}} loops over a list or conditionally shows content. Templates are managed under Manage → Templates. The built-in placeholder picker (the Insert Placeholder button) in the template editor lists every available field; this article is the full written reference.
How to add a Unit Price column to the order lines table
This is the most common customization. The placeholder is {{unitPrice}} and it lives inside the {{#orderLines}} loop. Here is how to add the column:
Step 1 — Add the column header
In the Items Header HTML section of your template, add a <th> for Unit Price:
<th scope="col" style="text-align: right;">Unit Price</th>
Place it wherever you want it relative to the other headers (e.g., after the Description column and before the Qty columns).
Step 2 — Add the data cell in the row template
In the Item Row HTML section, inside the {{#orderLines}}...{{/orderLines}} loop, add the matching <td>:
<td valign="top" style="text-align: right;">{{unitPrice}}</td>
{{unitPrice}} renders as $X,XXX.XX (formatted with the dollar sign and two decimal places). If you need the raw number without formatting — for example, to test whether the price is non-zero — use {{unitPrice.raw}}.
Tip: Keep the number of
<th>cells in the header and<td>cells in the row in sync so the table columns align correctly.
Full placeholder reference
Order Details
| Placeholder | Description |
|---|---|
{{orderNumber}} | Sales order number |
{{orderDate}} | Order creation date/time (formatted). Also: {{orderDate.shortDate}}, {{orderDate.longDate}}, {{orderDate.shortDateTime}}, {{orderDate.longDateTime}} |
{{estimatedShipDate}} | Estimated ship date. Also: {{estimatedShipDate.short}}, {{estimatedShipDate.long}} |
{{notes}} | Public/customer-facing notes |
{{internalNotes}} | Internal notes (not customer-facing) |
{{shippingNotes}} | Shipping/delivery instructions from the ship-to address |
{{{shippingNotesFormatted}}} | Shipping notes with line breaks preserved as HTML (use triple braces) |
{{shippingMethod}} | Requested shipping service |
{{status}} | Current order status |
{{customerPoNumber}} | Customer PO number |
{{invoiceNumber}} | First associated invoice ID |
{{grandTotal}} | First invoice grand total as $X,XXX.XX (use .raw for the number) |
{{subTotal}} | First invoice subtotal as $X,XXX.XX |
{{taxTotal}} | First invoice tax amount as $X,XXX.XX |
{{shippingTotal}} | First invoice shipping amount as $X,XXX.XX |
Company Information (prefix: company.)
| Placeholder | Description |
|---|---|
{{company.name}} | Your company name |
{{company.logoUrl}} | Your company logo URL (wrap in {{#company.logoUrl}}<img>{{/company.logoUrl}}) |
{{company.address}} | Your company address (Ship-from / Invoice Address) |
{{company.email}} | Your company email |
{{company.website}} | Your company website |
{{company.phone}} | Your company phone |
Customer Information (prefix: customer.)
Available fields include {{customer.name}}, {{customer.email}}, {{customer.phone}}, {{customer.companyName}}, and customer custom fields via {{customer.customFields.YourFieldName}}.
Shipping & Billing Contacts
{{shipTo.*}} and {{billTo.*}} provide structured contact details. Common sub-fields include {{shipTo.name}}, {{shipTo.company}}, {{shipTo.street1}}, {{shipTo.city}}, {{shipTo.state}}, {{shipTo.postalCode}}, {{shipTo.country}}, {{shipTo.phone}}. Use {{{shipTo.fullAddressBlock}}} (triple braces) for a pre-formatted multi-line address block.
Document Totals
These totals are calculated from the line items on this specific document (for fulfillment orders, only items in the FO; for full sales orders, all items).
| Placeholder | Description |
|---|---|
{{orderSubtotal}} | Sum of all line subtotals on this document |
{{orderDiscount}} | Total discount for this document |
{{orderTax}} | Tax (always $0 for fulfillment orders) |
{{orderShipping}} | Shipping (always $0 for fulfillment orders) |
{{orderGrandTotal}} | Grand total for this document |
For full sales-order totals that stay consistent even when exporting a fulfillment order, use the salesOrder* variants: {{salesOrderSubtotal}}, {{salesOrderDiscount}}, {{salesOrderTax}}, {{salesOrderShipping}}, {{salesOrderGrandTotal}}.
Overall Unit Totals
| Placeholder | Description |
|---|---|
{{totalUnitsOrderLines}} | Sum of all top-level line quantities |
{{totalUnitsComponents}} | Sum of kit component quantities |
{{totalUnitsCombined}} | Non-kit line quantities + component quantities |
Shipments Loop ({{#shipments}}...{{/shipments}})
Inside this loop: {{trackingNumber}}, {{carrierCode}}, {{serviceCode}}, {{shipDate}}, {{shipmentCost}}, {{isReturnLabel}}.
Inside the Order Lines loop ({{#orderLines}}...{{/orderLines}})
Every placeholder below is only valid inside the {{#orderLines}} loop.
Identity & Description
| Placeholder | Description |
|---|---|
{{lineNumber}} | 1-based line number |
{{sku}} | SKU as received from the sales channel |
{{productName}} | Product name as received from the sales channel |
{{internalSku}} | Internal (Luminous-managed) SKU |
{{internalProductName}} | Internal product name |
{{channelSku}} | Channel-mapped SKU |
{{channelProductName}} | Channel-mapped product name |
{{description}} | Line item description from the order source |
{{uom}} | Unit of measure (e.g., EA) |
{{imageUrl}} | Thumbnail image URL |
Quantities
| Placeholder | Description |
|---|---|
{{quantity}} | Ordered quantity (formatted number; .raw for unformatted) |
{{fulfilledQuantity}} | Quantity assigned to fulfillment orders |
{{inFulfillmentQuantity}} | In fulfillment but not yet shipped |
{{shippedQuantity}} | Total quantity shipped |
{{backorderedQuantity}} | Quantity not yet in fulfillment or shipped |
Pricing
| Placeholder | Description |
|---|---|
{{unitPrice}} | Unit (wholesale) price as $X,XXX.XX; use {{unitPrice.raw}} for the unformatted number |
{{lineSubtotal}} | Line subtotal (quantity × unit price) as $X,XXX.XX |
{{lineDiscount}} | Discount amount for this line as $X,XXX.XX |
{{lineTotal}} | Line total after discount (lineSubtotal − lineDiscount) as $X,XXX.XX |
Status & Dates
| Placeholder | Description |
|---|---|
{{fulfillmentStatus}} | Operational status: Shipped, Partially Shipped, In Fulfillment, Partially In Fulfillment, or Backordered |
{{customerStatus}} | Customer-facing status (future-dated unshipped lines show as Backordered) |
{{estimatedShipDate}} | Estimated ship date for this line. Also: {{estimatedShipDate.short}}, {{estimatedShipDate.long}} |
{{isFutureEstimatedShipDate}} | true when the estimated ship date is after today |
{{estimatedShipDateIsInherited}} | true when the date is taken from the order level, not the line |
Location
| Placeholder | Description |
|---|---|
{{warehouse}} | Warehouse name from the picking location |
{{location}} | Bin/shelf pick location within the warehouse |
{{externalLocation}} | External location code from the order source |
Custom Fields (within the loop)
- Line item custom fields:
{{lineCustomFields.YourFieldName}}(or loop with{{#lineCustomFields.list}}) - SKU custom fields:
{{skuCustomFields.YourFieldName}} - Variant attributes:
{{variantAttributes.YourAttributeName}}
Kits & Lots
- Use
{{#isKitParent}}...{{/isKitParent}}to show content only for kit parent lines. - Kit component lines are available via the nested
{{#components}}...{{/components}}loop (fields:sku,productName,quantity,uom,warehouse,location). - Lot data is available via
{{#lot}}...{{/lot}}(fields:number,expiryDate,productionDate,manufacturerCode).
Tips for currency and number fields
{{unitPrice}}→$12.50(formatted, always present){{unitPrice.raw}}→12.5(unformatted float, useful for zero-checks — see the conditional content guide)- All currency fields (
unitPrice,lineSubtotal,lineTotal,lineDiscount,orderSubtotal, etc.) follow the same pattern.
Where to find the authoritative placeholder list
The template editor under Manage → Templates includes a live placeholder picker (Insert Placeholder) that reflects your account's custom fields alongside all standard fields. Use it as the authoritative reference for field names — placeholders are case-sensitive and must be camelCase (e.g., {{unitPrice}}, not {{unit_price}}).