Deposits

Display deposit pricing for products.

See also: Deposit

Deposits allow customers to pay part of a booking upfront and pay the remaining balance before a specified due date.

A deposit is configured as a percentage of the total booking price (between 1% and 99%).

Deposits are configured at the product level. Each product has its own deposit settings. Deposits do not apply to modifiers, but do apply to extras.

Availability

A deposit is available when:

  • The product has a deposit enabled.
  • The balance due date has not passed.
  • The product is an Experience, Accommodation, or a custom-priced Package.

For sum-priced Packages, package.deposit returns nil. When calculating any available deposits, you must check each item in the package instead to see whether any of them have a deposit. The deposit offered at checkout is the sum-total of each of the individual items' deposit amounts.

Check whether a deposit should be displayed using:

{% if variant.deposit.enabled %}
  {% assign deposit_rate = variant.deposit.rate %}
{% endif %}

deposit.enabled already accounts for whether the balance due date has passed, so you don't need to check the due date separately.

deposit.rate returns 1 (full price) when the deposit is disabled. Always check deposit.enabled before using the rate to avoid displaying the full price as a deposit amount.

Displaying deposits

Deposit amounts should always be calculated using the final selling price, including any active promotions.

See Promotions for information on calculating the promotional price.

For example:

{% if product.deposit.enabled and cheapest_price != 0 %}
  {% assign deposit_price = cheapest_price | times: product.deposit.rate | money %}

  <p>Pay only {{ deposit_price }} today</p>
{% endif %}

If the final selling price is zero, a deposit should not be displayed, even if deposit.enabled returns true.

Balance due date

Use deposit.due_date to display when the remaining balance is due:

{% if product.deposit.enabled and product.deposit.due_date %}
  <p>Balance due by {{ product.deposit.due_date | date: "%d %B %Y" }}</p>
{% endif %}

The due date is calculated from the product's start date minus the configured threshold (available as deposit.due_date_threshold, in days).

deposit.due_date is always nil at the product level because the stay dates are not known until the customer selects them. The threshold is enforced at checkout once dates are chosen. To display information about an accommodation deposit, use the due_date_threshold instead of the due_date.

Deposits on variants

variant.deposit returns a Deposit object with the parent product's deposit settings. For experience variants, the deposit is slot-aware - when accessed through experience_slot.variants, deposit.enabled accounts for the slot's start date.

{% for variant in product.variants %}
  {% if variant.deposit.enabled %}
    {% assign promotional_price = variant.price | apply_promotion: variant.promotion %}
    {% assign deposit_price = promotional_price.fractional | times: variant.deposit.rate %}

    <p>{{ variant.name }}: pay {{ deposit_price | money }} today</p>
  {% endif %}
{% endfor %}

Deposits on extras

extra.deposit is nil in Liquid. Extras have their own deposit settings configured separately from the parent experience, but these are not currently accessible through a Liquid property.

Developer considerations

When implementing deposits:

  • Calculate deposit amounts using the final selling price after promotions.
  • Don't display deposits for zero-priced products.
  • Use variant.deposit when looping through variants for slot-aware behaviour.
  • Check deposit.enabled before using deposit.rate.
  • Reset temporary variables such as deposit_active when looping through multiple products.

On this page