Conditional Terms
Conditional Terms enable you to automatically apply pre-written terms and conditions based on rules. This ensures that legal terms are always correctly and accurately applied.
Common use cases include:
- Standard company terms shown on all Quotes
- Product-specific terms shown on Quotes only when that product or product family is present on the Quote
- Opt-in terms shown on Quotes only when a checkbox is selected (see Custom Fields for more information)
Individual conditional terms can be set as editable or non-editable by the Sales Rep at Quoting time. If edit-ability is On, it is recommended to add a Quote Approval Rule to ensure approval of any changes made by Sales Reps to pre-written conditional terms.
Using variables in your content
Conditional terms and Terms and Conditions allow you to specify variables within your content that get replaced at run-time when the content is generated into the Quote Document.
Basic Syntax
The template syntax uses double-curly braces:
{{variable}}
All data from a quote starts with the quote namespace. For example:
{{quote.amount}}
This variable references the amount field in the quote object within your data.
Formatting Options
You can apply formatting to numeric or date/time fields by appending:
@currency
@date
@dateTime
For Example:
{{quote.amount @currency}}
// $100.55 or SEK 100.45 - based on the parent records currency
{{quote.contractStartDate @date}}
// Feb 1, 2024
{{quote.modifyDate @dateTime}}
// Jan 13, 2025, 8:49 AM
Nested Fields & Array Access
To access line-level fields, you can use square brackets [ ]
for array filtering. In the following example, we filter a quoteOffering
array by it's offeringId
and then filter the nested Quote Items by the productId
{{quote.quoteOfferings[offeringId="offr_1234"].items[productId="prod_1234"].amount}}
You may specify multiple filters, separated by commas:
[offeringId="offr_1234", rateId="rate_1234"]
This lets you target specific line items based on multiple criteria.
Operators
When matching numeric values, omit the quotes. Also, Whitespace is ignored inside bracket expressions.
Operator | Meaning | Example |
---|---|---|
= | Equal | [amount=100] |
!= | Not equal | [amount!=100] |
> | Greater than | [amount>100] |
> = | Greater than or equal | [amount>=100] |
< | Less than | [amount<100] |
<= | Less than or equal | [amount<=100] |
Choosing Array Items
By default, if a filter matches multiple records, the first match is returned. You can specify other options:
@first
→ Return the first matching record (default if there are filters applied).@last
→ Return the last matching record.@all
→ Return all records. Use this when you want to match on a nested array (e.g Quote Item) and don't care which parent it belongs to. (default if there are no filters applied)- Example If you want to find the support Quote Item, but don't know or care which Quote Offering bundle it is included in
{{quote.quoteOfferings[offeringId="offr_1234" @first]}}
{{quote.quoteOfferings[offeringId="offr_1234"]}}
// @first will be the default in this case
{{quote.quoteOfferings[offeringId="offr_1234" @last]}}
{{quote.quoteOfferings[offeringId="offr_1234" @all]}}
{{quote.quoteOfferings[].items[productId="prod_1234"]}}
// @all will be the default for the quoteOfferings and match against every Quote Item
Combining Multiple Conditions
By default, if there are multiple conditions they all must match. You can specify other options:
• @and
→ Match all filter values (default).
• @or
→ Match any filter value
{{quote.quoteOfferings[offeringId="offr_1234", offeringId="offr_2345" @or @last]}}
Additional examples
{{quote.contractStartDate @date}}
{{quote.quote_offering[offeringId="offr_1234", rateId="rate_1234" @and @last].items[productId="prod_1234"].amount @currency}}
{{quote.quote_offering[offeringId="offr_1234", rateId="rate_1234" @and @last].items[productId="prod_1234"].productName}}
{{quote.quote_offering[offeringId="offr_1234", rateId="rate_1234" @and @last].modifyDate @dateTime}}
Other useful information
- Field names are case-sensitive
- Whitespace is ignored, so feel free to add spaces as needed
- New lines cannot be used within an expression, so make sure everything is on one line
- If there is an error applying the specified formatting, the raw value will be displayed
- If there is a parsing error or the field path is invalid, the tag will not be rendered on the output document
As always, you can work with your MonetizeNow support team if you need technical assistance
Available Fields
You can include any field from the quote data model, below is a list of common fields that you may want to access.
This list is not 100% exhaustive, work with your support team if you have a use-case not covered by the fields listed below.
// Custom fields are one of the most common use-cases
quote.customFields.name_of_field
quote.accountName
quote.amount
quote.amountWithoutDiscount
quote.approvalGrantedAt
quote.approvalSubmittedAt
quote.autoRenewContract
quote.contractAmount
quote.contractEndDate
quote.contractLength
quote.contractStartDate
quote.createDate
quote.currency
quote.description
quote.discountAmount
quote.discountPercent
quote.documentUrl
quote.expirationDate
quote.id
quote.modifyDate
quote.netTerms
quote.newQuoteType
quote.ownerName
quote.previousContractLength
quote.previousNetTerms
quote.purchaseOrderNumber
quote.requiresEsign
quote.status
quote.type
// Your legal entity - these fields come from Company Settings
quote.fromCompany.name
quote.fromCompany.address.line1
quote.fromCompany.address.line2
quote.fromCompany.address.city
quote.fromCompany.address.state
quote.fromCompany.address.country
quote.fromCompany.address.postalCode
quote.fromCompany.customId
quote.fromCompany.email
// Contact Information
quote.contacts.primary.fullName
quote.contacts.primary.email
quote.contacts.primary.phone
quote.contacts.primary.title
quote.contacts.billing.fullName
quote.contacts.billing.email
quote.contacts.billing.phone
quote.contacts.billing.title
// Contact addresses
quote.shippingAddress.line1
quote.shippingAddress.line2
quote.shippingAddress.city
quote.shippingAddress.state
quote.shippingAddress.country
quote.shippingAddress.postalCode
quote.billingAddress.line1
quote.billingAddress.line2
quote.billingAddress.city
quote.billingAddress.state
quote.billingAddress.country
quote.billingAddress.postalCode
// All of these are prefixed with quote.quoteOfferings[]
// Use filters within the "[]" to target specific quote offerings as needed
// Quote Offering represents the "bundle" of products
quote.quoteOfferings[].amount
quote.quoteOfferings[].amountWithoutDiscount
quote.quoteOfferings[].billingFrequency
quote.quoteOfferings[].billingFrequencyInMonths
quote.quoteOfferings[].discountAmount
quote.quoteOfferings[].discountPercent
quote.quoteOfferings[].endDate
quote.quoteOfferings[].rateDescription
quote.quoteOfferings[].rateName
quote.quoteOfferings[].startDate
quote.quoteOfferings[].subscriptionTiming
// All of these are prefixed with quote.quoteOfferings[].items[]
// Use filters within the "[]" to target specific quote items as needed
// Quote Items represents the product within a bundle
quote.quoteOfferings[].items[].amendmentStatus
quote.quoteOfferings[].items[].amount
quote.quoteOfferings[].items[].amountWithoutDiscount
quote.quoteOfferings[].items[].contractAmount
quote.quoteOfferings[].items[].description
quote.quoteOfferings[].items[].discountAmount
quote.quoteOfferings[].items[].discountPercent
quote.quoteOfferings[].items[].displayUnitPrice
quote.quoteOfferings[].items[].productId
quote.quoteOfferings[].items[].productName
quote.quoteOfferings[].items[].productType
quote.quoteOfferings[].items[].quantity
quote.quoteOfferings[].items[].sku
quote.quoteOfferings[].items[].unitPrice
quote.quoteOfferings[].items[].unitPriceAfterDiscount
Updated 5 days ago