When you customize a Statement template to match your brand, you need the exact property names the renderer expects, not a guess at what might work. This article lists every property the Statement template can use, grouped by where it comes from: the customer, the location, the organization's billing settings, and the invoices and credit notes on the statement.
The Statement template renders through the same Twig-style templating engine as your other document templates, converted to PDF with wkhtmltopdf. It reads from a single data context built at generation time, and the properties below are what that context contains.
How the Statement template gets its data
The renderer passes a single object into the template on generation. Properties on that object map directly to the dot notation you see in the template code, so customer.name reads the name field on the customer object, and location.name does the same for location.
Two properties carry filters instead of a plain value. {{ logoUrl }} is wrapped in an {% if %} check because it only exists when the organization has a logo, and {{ line.amount | money(line.currency) }} runs the raw number through a money filter that formats it using the currency code you pass in. Any numeric property representing an amount should go through that filter rather than being output raw.
Document header properties
These properties populate the logo, organization name, and statement date at the top of the document.
Property | Description | Example |
| URL to the organization's logo image. Renders only inside an |
|
| The billing organization name shown in the header when no logo is set. |
|
| The date the statement was generated, already formatted. |
|
Note: org.name and organizationName are two different properties in the context. Only org.name renders in the default header.
Customer properties
These properties render the billing address block on the left side of the statement header.
Property | Description |
| The Member's billing name. |
| Street address line. |
| City. |
| State or province, shown only when set. |
| Postal code. |
| Country. |
| The Member's billing email address. |
| The purchase order number tied to the Member's memberships. |
| The invoice recipient name. Both spellings appeared in the sample data with the same value. [Unverified – confirm which spelling is the intended field and which is legacy] |
Location properties
These properties render the location's name and address on the right side of the statement header.
Property | Description |
| The location's display name. |
| Street address line. |
| City. |
| State or province, shown only when set. |
| Country. |
Statement line item properties
statementItems is an array. Loop over it with {% for line in statementItems %} to build the table of invoices and credit notes on the statement.
Property | Description | Example |
| The document number for the line item. |
|
| The display label for the document type. |
|
| The underlying document type code. Used in an |
|
| The issue date of the line item. |
|
| The amount still outstanding on this line item, run through the |
|
| The total amount of the line item, run through the |
|
| The currency code for this specific line item, passed into the |
|
The context also carries line._id, line.status, and line.isOverdue on each item, which the default template doesn't display, but you can use to add conditional styling, for example, flagging overdue items in a different color.
Currency formatting properties
The currency object controls how the money filter displays amounts. statementTotal runs through {{ statementTotal | money(currency.code) }}.
Property | Description | Example |
| The three-letter currency code passed to the |
|
| The currency symbol. |
|
| Whether the symbol renders before or after the amount. |
|
| Whether a space separates the symbol from the amount. |
|
| Number of decimal places to display. |
|
| Character used to group thousands. |
|
| Character used before the decimal digits. |
|
If you build a custom amount display instead of relying on the money filter, use symbolOnLeft and spaceBetweenAmountAndSymbol Rather than hardcoding the symbol position, the template should still work for organizations with a different currency.
Payment details properties
These properties populate the bank details block at the bottom of the statement.
Property | Description |
| The organization's bank name. |
| The organization's account number or IBAN. |
| The organization's BIC or SWIFT code. |
organizationAccountBic didn't appear in the sample payload at all, which likely means the organization in that example hadn't set one. Treat the field the same way you treat any optional value: confirm it renders correctly on an organization that has a BIC saved before you publish a layout that assumes it.
Best practices
If you display customer or location addresses on a custom layout, test with records that have all fields populated, since empty fields collapse silently rather than showing a placeholder.
If you're adding a new line item property to the table, wrap it in the same {% if !line.documentType %} pattern the default template uses for payableAmount, so custom columns stay consistent with the existing dash-for-empty behavior.
If your organization operates in more than one currency, always pass a currency code into the money filter instead of formatting numbers manually. line.currency and currency.code aren't guaranteed to match when a statement mixes documents from different currencies.
FAQs
Can I add customer.email to the Statement template?
You can add customer.email to the Statement template, because the data context includes it even though the default layout doesn't display it. Insert {{ customer.email }} anywhere in the customer block, the same way customer.name is used.
Why doesn't the logo show up on some statements?
The logo doesn't show up when the organization hasn't uploaded one, because logoUrl is empty in that case. The template's {% if logoUrl %} check falls back to displaying org.name as bold text instead.
Why does a line item show a dash instead of an outstanding amount?
A line item shows a dash when its documentType property is empty. The template's {% if !line.documentType %} check treats a missing document type as having no payable amount to display, and shows - in that column instead.
Why do customer.address and location.address show blank even though the template references them?
customer.address and location.address show blank when the underlying data doesn't include those fields for that record. This can happen when a customer has no billing address saved, or when location address data lives under a different structure, such as location.physicalAddress, rather than a flat address field. Confirm the exact source with engineering if you see this consistently across records that should have address data.
