There are 2 types of variables. Top-level and low-level.
The top-level variables are used for Ticket/Order, Quote, Build, and Parcel levels. At the same time, the low-level variables can iterate through Parts, Items, Services, and Manual Services in an order.
Every type of PDF has its own top-level and low-level variables.
Iteration Loops (tags)
Low-level variables allow us to iterate through all the parts in a Work Order, Quote, Build, or Parcel using an iteration loops (also known as tags).
To start an iteration, you need to define the start and the end of the iteration block in the HTML SourceCode of the template by placing start and end tags as below:
<!--multiorder_start-->.....
<!--multiorder_end-->
There are 4 types of iteration loops:
multiorder- user in Quotes, Work Orders, Builds, and ParcelsThis function creates an additional line for each part existing in an order
multimanualservice- used in Quotes and Work OrdersIf manual services were added in the Quote module, this function creates additional lines for each manual service
multiserviceused in Work Orders, and Builds, and is parsed inside the Multiorder loopThis function creates an additional line for each Service (aka post-processing service) assigned to a part
itemsused in Quotes, Work Orders, Builds, and ParcelsThis function created an additional line for each item that exists in a single part.
1. Multi-Order tag <!--multiorder_start--> / <!--multiorder_end-->
There are part-level variables that would work only when used inside the Multi-order Tag in the HTML code of a template.
[In the Source Code of your Template, you need to place <!--multiorder_start--> before the <tr> of the first variable and <!--multiorder_end--> after the </tr> of the last variable that should be listed in a new line for each part, as per this article]
Here's a list of the specific variables that will work only when placed inside this loop.
Variable | Description |
{{2d_part_image}} | Thumbnail/Model Image |
{{part_id}} | Ticket Model Items → Part ID |
{{qty}} | Ticket Model → Quantity of Items within a part |
{{qty_parcel}} | Quantity of Items in a Parcel |
{{item_id}} | Ticket Model Item Local → Item ID |
{{part_notes}} | Ticket Model → Note |
{{shipping_deadline}} | Ticket Model Item Local → Shipping deadline |
{{po_number}} | Ticket → PO Number |
{{order_id}} | Ticket → Order ID |
{{create_date}} | Ticket → Created |
{{file}} | Ticket Model → Model → File Name |
{{#}} | Line item number |
{{actual_part_shipping_date}} | Get Formatted Actual Shipping Date from Ticket -> Model -> Items |
{{file}} | File Name |
{{depth}} | Depth of the Model |
{{height}} | Height of the Model |
{{width}} | Width of the Model |
{{part_notes}} | Notes Field from Quotation Forms |
{{sender_part_id}} | Ticket Model Local → Sender Part ID |
{{part_name}} | Ticket Model → Model → File Name |
{{price}} | Ticket Model Local → Price with Discount |
{{line_item_price}} | Price of the Part, including all items |
{{unit_price}} | Price of a single Item (Price/quantity) |
{{net_price}} | Price of a part without VAT |
{{time_to_ship}} | Shipping Deadline |
{{coatings}} | Post-Processing Services |
{{notes}} | Ticket Model Local → Message field from Quotation Forms |
{{colour}} | Colour data from Ticket Model Local |
{{hardware}} | Machine group data from Ticket Model Local |
{{infill_rate}} | Infil Rate data from Ticket Model Local |
{{layer_thickness}} | Layer Thickness data from Ticket Model Local |
{{material}} | Material data from Ticket Model Local |
{{production_time}} | Production Time Data from Ticket Model Local |
{{resolution}} | Resolution Data from Ticket Model Local |
{{technology}} | Technology Data from Ticket Model Local |
{{delivery_method}} | Ticket → Delivery Method → Name |
{{shipping_method}} | Same as the shipping method |
{{item_quantity}} | Quantity of items in the Parcel |
{{part_status}} | Ticket Model -> Ticket Part Status -> Name |
{{production_notes}} | Communication Widget -> Production notes |
{{part_run_time}} | Newly Added Part Level Variable: Used for Pricing Workers (CNC) |
{{part_programming_time}} | Newly Added Part Level Variable: Used for Pricing Workers (CNC) |
{{part_setup_time}} | Newly Added Part Level Variable: Used for Pricing Workers (CNC) |
{{custom_field_{{variable}}}} | The variable value is created when setting up the custom field; the same format works for Service Custom Fields |
2. Items tag - <!--items_start--> / <!--items_end-->:
Starts with <!--items_start--> and ends with <!--items_end-->.
Here's a list of item-level variables that would work only when added within this tag:
Variable | Description |
{{item_id}} | Custom Item ID |
{{item_id_qr_code}}, | Ticket Model Item → Parcel ID -> QR Code |
{{actual_item_shipping_date}} | Actual Shipping Date |
{{failure_reason}} | Builds -> Failure reason |
3. Multi-Manual Service tag <!--multimanualservice_start--> / <!--multimanualservice_end-->
The Multi-Manual Service loop starts with <!--multimanualservice_start--> before the first manual_service variable and ends with <!--multimanualservice_end--> after the last manual_service variable.
Here is a list of the Manual Service variables that will work in Quote and Order PDF/Email templates only when used within this tag:
Variable | Description |
{{manual_service_name}} | Manual Service → Description/Name |
{{manual_service_total_price}} | Manual Service → Total Price |
{{manual_service_unit_price}} | Manual Service Price per unit (Price/quantity) |
{{manual_service_quantity}} | ManualService → Quantity |
4. Multi Service (former Post-Processing Services) <!--multiservice_start--> /<!--multiservice_end-->
In distinction to the {{coatings}} variable that works inside the Multiorder tag to list the Services assigned to a part, some variables can be used inside the <!--multiservice_start--> /<!--multiservice_end--> tag on a Quote or Order PDF/Email template to provide a more granular breakdown of the Services. This tag should also always be called inside the Multi-order tag, e.g.:
<!--multiorder_start-->
<!--multiservice_start-->
{{service_name}}
<!--multiservice_end-->
<!--multiorder_end-->
Variable | Description |
{{service_name}} | Post-production service name |
{{service_cost}} | Service Price |
{{service_run_time}} | Newly Added Service Level Variable: Used for Pricing Workers (CNC) |
{{service_programming_time}} | Newly Added Service Level Variable: Used for Pricing Workers (CNC) |
{{service_setup_time}} | Newly Added Service Level Variable: Used for Pricing Workers (CNC) |
Automatic Block Variables:
In Quotes, we can use two built-in automatic block variables that can not be edited, customized, or split, but can be used for PDF templates.
1. Total price breakdown - {{totals_block}}
Displays a breakdown of the prices, VAT, and discount in the quote:
2. The Part & Manual Services breakdown - {{services}}
Displays a list of all parts & manual services in an order
The fields displayed by this variable can be configured in the Quote or Invoice pop-up panels by selecting the Production options via toggles:
3. Multiple Quantity block
To display these tiers to your customers, use the following variables in your templates. These variables output data as a clean, vertical list. The Main Quantity always appears as the first row in the list, in bold.
Variable | Description |
{{multiple_quantity_quantity}} | Multiple Quantity Quantity:
|
{{multiple_quantity_unit_price}} | Multiple Quantity Unit Price:
|
{{multiple_quantity_total_price}} | Multiple Quantity Total price:
|
Quote Templates
Quote Templates are used when downloading PDFs or sending emails from the Quote Module, accessible either within a Ticket -> Create a Quote button, or from Requests -> Quotes List.
Submitting the Quote will send the PDF document to the end customer via email, and downloading the PDF will generate the document locally for the user. You can also select the specific Template, its Language, and the Currency separately:
Below is a list of the supported variables that can be used to extract information into a Quote PDF or Email Template from the Quote module:
Variable | Description |
{{total_qty}} | The sum of the quantities of all parts in the quote |
{{quote_created}} | Quote creation date |
{{create_date}} | Ticket creation date |
{{quote_id}} | The ID of the Quote |
{{link_to_quote}} | URL that opens this quote on the Front End portal (used in Quote email) |
{{quote_message}} | Message field from the Quote panel |
{{discount}} | Discount (in exact amount, not percentage) |
{{subtotal}} | Total Price of all items before the discount |
{{subtotal_discount}} | Price of all items after discount |
{{vat}} | Value-Added Tax for items (in exact amount, not percentage) |
{{delivery_price}} | Price of the Delivery services |
{{delivery_VAT}} | Value-Added Tax for the Delivery services (in exact amount, not percentage) |
{{total}} | Price of all items with discount and VAT |
{{contact_vat}} | VAT rate from VatRatesDao |
{{delivery_method}} | Delivery method name |
{{shipping_method}} | Delivery method name |
{{delivery_date}} | Shipping deadline |
{{shipping_deadline}} | Shipping deadline |
{{due_date}} | Quote validity from the Quote Module
This can be configured in Settings -> Attributes & Status -> Valid Until: |
{{assignee}} | Ticket Details → Assigned to |
{{contact_company}} | Contact Company Name |
{{contact_phone}} | Contact phone |
{{contact_department}} | Contact department |
{{contact_id}} | Contact ID |
{{contact_details}} | Contact contact details field |
{{contact_name}} | First and last name of the contact |
{{contact_person}} | Contact Name |
{{email}} | Contact email |
{{industry}} | Billing address → Industry |
{{billing_name}} | Billing address → Contact name |
{{contact_tax_id}} | Billing address → VAT ID |
{{company_number}} | Billing address → Company number |
{{billing_first_name}} | Billing address → First name |
{{billing_last_name}} | Billing address → Last name |
{{billing_address_line}} | Billing address → Address line |
{{billing_address_line_2}} | Billing address → Address line 2 |
{{billing_region}} | Billing address → Region |
{{billing_region_abbreviation}} | Billing address → Country State code |
{{billing_country}} | Billing address → Country |
{{billing_city}} | Billing address → City |
{{billing_post_code}} | Billing address → Postcode |
{{billing_company}} | Billing address → Company Name |
{{billing_department}} | Billing address → Department |
{{billing_telephone}} | Billing address → Telephone |
{{billing_email}} | Billing address → Email |
{{shipping_first_name}} | Shipping address → First name |
{{shipping_last_name}} | Shipping address → Last name |
{{shipping_address_line}} | Shipping address → Address line |
{{shipping_address_line_2}} | Shipping address → Address line 2 |
{{shipping_region}} | Shipping address → Region |
{{shipping_region_abbreviation}} | Shipping address → Country State code |
{{shipping_country}} | Shipping address → Country |
{{shipping_city}} | Shipping address → City |
{{shipping_post_code}} | Shipping address → Postcode |
{{shipping_company}} | Shipping address → Company Name |
{{shipping_department}} | Shipping address → Department |
{{shipping_telephone}} | Shipping address → Telephone |
{{shipping_email}} | Shipping address → Email |
{{production_notes}} | Ticket → Communication Widget |
{{total_net_price}} | Net price of parts + delivery price incl. discount |
{{timestamp}} | Current Date |
Ticket and Order Templates
Ticket type templates can be generated while the order is still in the Quote stage, before the Ticket has been sent to production or the customer paid for the quote on the front-end ordering portal. To print a PDF from the Ticket at that stage, you need to first select a part and press Print PDF under Part details:
The table below contains a list of variables that can be used in PDFs generated from Tickets and Work Orders:
{{custom_id}} | Custom Order ID |
{{order_created}} | Date of order |
{{order_id}} | Order Id |
{{ticket_id}} | Ticket Id |
{{sender_ticket_id}} | Sender Custom ID from ticket |
{{sender_project_id}} | Sender Project ID from ticket |
{{payment_method}} | Name of payment method |
{{po_number}} | PO Number |
{{alternative_contact_first_name}} | Alternative Contact – First name |
{{alternative_contact_surname}} | Alternative Contact – Last name |
{{alternative_contact_department}} | Alternative Contact – Department |
{{contact_group_discount}} | Discount amount for all items |
{{link_to_ticket}} | link to ticket |
{{timestamp}} | Current Date |
All variables from Quotes will also apply here |
|
Invoice (Finance Module) Templates
The table below contains a list of variables that can be used in Invoice/Proforma/Credit Note type of PDFs that can be printed from the Invoicing Module within an Order:
All 3 types support Shipping and Billing address variables!
1. Invoice
{{advanced_invoice_id}} | Invoice ID |
{{finance_subtotal_with_delivery}} | Subtotal price of all items, including delivery |
{{finance_due_date}} | Due Date for the Invoice payment |
{{finance_date}} | Date of the Invoice Creation |
{{finance_terms}} | Payment Terms from Contacts -> Groups |
{{finance_message}} | Message field from Invoice Module |
{{finance_subtotal}} | Total Price of all items before the discount |
{{finance_vat_amount}} | Total VAT amount of the parts |
{{services_vat%}} | VAT Rate % |
{{delivery_vat%}} | Delivery VAT Rate % |
{{finance_total}} | Total price including VAT and discount |
{{services}} | Displays Parts Details block |
2. Proforma
{{proforma_id}} | Invoice Module -> Proforma -> Proforma ID |
{{finance_date}} | Invoice Module -> Proforma -> Proforma Date |
{{finance_terms}} | Invoice Module -> Proforma -> Payment Terms |
{{finance_message}} | Invoice Module -> Proforma -> Message field |
{{finance_subtotal}} | Total Price of all items before the discount |
{{finance_vat_amount}} | Total VAT amount of the parts |
{{finance_total}} | Total price including VAT and discount |
{{finance_services}} | Displays Parts Details block |
{{services}} | Displays Parts Details block |
3, Credit Note
{{credit_note_id}} | Invoice Module -> Credit Note -> Credit Note ID |
{{finance_message}} | Invoice Module -> Credit Note -> Message field |
{{finance_subtotal}} | Total Price of all items before the discount |
{{finance_vat_amount}} | Total VAT amount of the parts |
{{finance_total}} | Total price including VAT and discount |
Production Templates
The table below contains a list of special variables that can be used only within PDFs printed from Builds by navigating to Create a Build -> Select a Build -> Printer Button -> Select Template:
{{2d_part_image}} | Part Image (thumbnail) |
{{build_notes}} | Build notes |
{{build_part_barcode}} | Generated barcode for a part (can be accessed ONLY in <!--multiorder_start--> / <!--multiorder_end--> tag) |
{{part_notes}} | Ticket Model → Notes |
{{production_lot_id}} | “TicketModelLocal→customId_”Build→”Build->customId” |
{{production_lot_qr_code}} | Image QR Code (can be accessed ONLY in <!--multiorder_start--> / <!--multiorder_end--> tag) |
{{quantity_in_build}} | Number of items in the build |
{{file}} | Model → File Name |
{{part_name}} | Model → File Name |
{{qty}} | Ticket Model → quantity |
{{price}} | Ticket Model Local → price with discount |
{{technology}} | Technology |
{{material}} | Material |
{{colour}} | Colour |
{{production_time}} | Production Time |
{{layer_thickness}} | Layer Thickness |
{{resolution}} | Resolution |
{{coatings}} | Coating/Services |
{{notes}} | Communication notes |
{{hardware}} | Ticket Model Local → Machine Group → name |
{{infill_rate}} | Ticket Model Local → Infill Rate → Name |
{{height}} | Last Model Version → height |
{{width}} | Last Model Version → width |
{{depth}} | Last Model Version → depth |
{{time_to_ship}} | Order Time To Ship (deadline) |
{{deadline}} | Ticket Model → Shipping Deadline |
{{actual_part_shipping_date}} | Recent Actual Shipping Date from Ticket Model Items |
{{timestamp}} | Current Date |
Delivery Templates
Delivery templates can be generated when you're utilizing the Logistics Module add-on by navigating to Work Orders -> Work Orders Overview -> Parcel tab.
In Parcel/Delivery PDFs, you can use only the Billing/Shipping address variables available in the previous modules and the Variables unique for Parcels from the list below:
{{sender_first_name}} | Delivery Center → Shipping address → First Name |
{{sender_last_name}} | Delivery Center → Shipping address → Last Name |
{{sender_delivery_center_id}} | Delivery Center → Custom ID 2 |
{{sender_email}} | Delivery Center → Shipping address → Email |
{{sender_telephone}} | Delivery Center → Shipping address → Telephone |
{{cost_center}} | Ticket → PaymentMeta → costCenter → centerNumber |
{{parcel_id}} | Parcel → Custom Id |
{{actual_parcel_shipping_date}} | Parcel → Actual Shipping Date |
{{waybill_number}} | Parcel → waybill number |
{{timestamp}} | Current date |
{{create_date}} | Parcel → Created At |
{{enterprise_checkout_delivery_method}} | Ticket → EnterpriseDelivery |
{{barcode}} | Barcode from parcel_id |
{{po_number}} | TicketModelItems -> every unique po_number |
{{item_quantity}} | Quantity of items in the parcel |
{{qty_parcel}} | The quantity of items assigned to the parcel within the part |
{{quote_id}} | Associate the Quote ID with the Parcel |
{{quote_created}} | Associated with the Quote ID in relation to Parcel |
{{order_created}} | Associated order(s) to Parcel |
{{assignee}} |
|
{{delivery_method}} | associated delivery method (should all be the same) |
{{height}} | Height of the part |
{{width}} | Width of the part |
{{depth}} | Depth of the part |
{{project_id}} | Associate Order ID to parcel |
{{custom_order_id}} | Associate the custom order ID with the parcel |
Custom Field Variables
Variables for Custom Fields from the Quotation Forms - Custom fields that you create in your Quotation Forms setup can also be added into a PDF/Email template using a variable that you create when setting up the field initially.
In order to use this custom variable in your templates, you need to follow the rules below:
1. Always format your variables as the example below: {{custom_field_{{variable}}}} | This value will be extracted from the following views:
The same variable formatting will apply to custom fields from Services:
|
2. Always place the custom field variables within the <!--multiorder_start--> / <!--multiorder_end--> tag in the HTML! |
|
Please refer to the new Date Formatting article for guidance on how to configure date/time variables within your templates.
Please refer to the 'Adding Header/Footer' article for guidance on how to add Headers/Footers and embed images via Base64 coding in your templates.


















