Skip to content

Liquid objects

Templates read the marketplace’s data through objects. Some exist on every page (shop, request, settings, routes…); the others are handed to the template of a given page (listing on a listing page, order on an order page). Templates says which objects each template receives; this page describes their fields.

To see exactly what a template receives on a marketplace, print an object with debug and remove the line afterwards:

{{ listing | debug }}

Available in every template and email.

Field Description
shop.name The marketplace’s name
shop.url Its storefront URL
shop.currency Its currency, ISO 4217 (EUR)
shop.locale Its language, en, fr, de or es
shop.timezone Its time zone (Europe/Paris)

locale holds the same value as shop.locale.

Available in every template and email.

Field Description
request.path The path and query of the current page, /listing/search?query=bike
request.host The host name, acme.mykreezalid.com
request.scheme https
request.query_params The query parameters, by name: request.query_params.query

Every value of request is already HTML-escaped, so it is safe to print in text and in attributes:

<a href="{{ routes.account.login }}?redirect={{ request.path }}">{{ 'general.breadcrumbs.account' | t }}</a>

The signed-in member, as a member object, or nothing for a visitor. It holds the member’s data as of their last sign-in or profile update.

Marketplace settings, on every storefront template except the homepage, the blog, the order confirmation and the maintenance page, which receive their own settings (see Templates).

Field Description
settings.name The marketplace’s name
settings.logo Ready-to-print HTML: the logo’s <img>, or the name when there is no logo
settings.logo_alt The logo’s alt text
settings.favicon The favicon URL
settings.homepage-welcome-block, settings.homepage-categories, settings.homepage-listings, settings.homepage-articles, settings.homepage-edito, settings.homepage-custom-section Whether each homepage section is on
settings.social_login.providers The social sign-in providers turned on, each with handle (google, facebook), label and url
settings.wishlist.active, settings.wishlist.title Whether the Wishlist app is on, and its label
settings.unread_messages The signed-in member’s unread messages, 0 when none or when the Inbox app is off
settings.stripe_connect.active Whether vendors are paid through Stripe Connect
settings.advanced_calendar.has_availability, settings.advanced_calendar.availability_url Whether the signed-in vendor has availability to manage, and where
settings.multi_store.active Whether the marketplace runs vendor shops (MultiStore app)
settings.subscription The signed-in member’s subscription plan, when the subscriptions app is on
settings.algolia.active, settings.algolia.app_id, settings.algolia.search_key, settings.algolia.index_name The search-only Algolia credentials, when that app is on
settings.brevo_newsletter.form The Brevo newsletter form, when that app is on
{% for provider in settings.social_login.providers %}
<a class="btn" href="{{ provider.url }}">{{ provider.label }}</a>
{% endfor %}

The URLs of the platform’s pages, on the same templates as settings. Use them instead of writing paths: they stay right if a path changes.

Field Page
routes.home The homepage
routes.account.login, routes.account.logout, routes.account.register Sign in, sign out, sign up
routes.account.dashboard, routes.account.edit, routes.account.change_password, routes.account.forgot_password, routes.account.delete Account pages
routes.account.verify, routes.account.documents_upload Identity verification
routes.listings.new, routes.listings.manager Post a listing, the vendor’s listings
routes.sales, routes.orders The vendor’s sales, the buyer’s purchases
routes.contact.form The contact page
routes.blog.index The blog
routes.inbox, routes.wishlist, routes.reviews Messages, wishlist, reviews
routes.stores.index, routes.stores.new The vendor’s shops (MultiStore)
routes.stripe_connect_onboarding, routes.stripe_connect_account, routes.psp_banking_info Vendor payout setup
routes.stripe_subs_billing_portal The member’s subscription billing portal
routes.faq The FAQ, only when the FAQ app is on
routes.pwa_install, routes.pwa_notifications Installing the app and turning notifications on, only when the app (and its notifications) is on
{% if routes.faq %}<a href="{{ routes.faq }}">FAQ</a>{% endif %}

The theme installed from the library, with its options. Absent on a marketplace that uses Kindshare alone. See Theme settings.

theme.catalog adds lists a template can print anywhere, read only when you use them:

Field Description
theme.catalog.new_listings The 8 newest listings online, as listing objects
theme.catalog.top_sellers The 4 vendors with the most listings online, as member objects without their email and phone, plus listing_total and listings (their 3 newest: title, url, cover)
theme.catalog.categories Up to 60 categories shown in search, in tree order: id, title, slug, url, parent_id, level, listing_count
{% for listing in theme.catalog.new_listings %}
{% include 'listing-thumbnail' %}
{% endfor %}

A listing, on the listing page, in listing-thumbnail.liquid, on the listing forms and in emails.

Field Type Description
id number The listing id
title text Its title
slug text Its URL slug
url text Its absolute URL
description HTML Its description. Print with rich_html.
sku, external_id text Its SKU and the id from an external system
status text draft, published or archived
admin_status text Its moderation status, for example approved
visibility text both, catalog, search or none
price number Its price; the lowest variant’s price when it has variants
original_price number The crossed-out price, when set
currency text ISO 4217
formatted_price HTML The price ready to print, with its unit and crossed-out price, or the “free” label
price_with_currency text The price as plain text, €25.00
price_unit text The price unit (night, hour…), or nothing
quantity, min_qty number Stock and minimum quantity per order
requires_shipping boolean Whether it is shipped
weight, weight_unit Its weight
cover text The URL of its main picture, or a placeholder image
medias list Its pictures: id, src, alt, position, media_type (image). Print src with img_url.
media_videos list Its videos: id, src (the video URL), embed, position
attributes map Its attribute values, by attribute alias. See below.
metafields map Its metafields, by namespace then key
properties map Its properties, by key
category object id, title, slug, url, parent_id
user object The vendor, a member object. owner and supplier are the same.
order_type object id, title, transaction_type, enable_cart
variants list id, title, sku, price, quantity, weight, sort_priority, external_id
add_ons list id, title, description, price
shipping_methods list id, title, price, step_price, is_hand_delivery, carrier_alias
address object location, city, state, country
city, state, country, location text Its place; country is an ISO code
lat, lng number Its coordinates
date_online text When it went online, 2026-10-13 09:30:00
valid_until Its end of validity, when set
next_date number The Unix time of its next date, for dated listings
store object The vendor’s shop holding it, only with the MultiStore app
settings object The rules of its order type, such as price_enabled, shipping_enabled, calendar_enabled, contact_supplier_enabled, order_btn_text, free_label

A listing has no rating of its own: use the vendor’s, listing.user.average_rating and listing.user.review_count.

<h1>{{ listing.title | escape }}</h1>
<p class="price">{{ listing.formatted_price }}</p>
{% for media in listing.medias %}
<img src="{{ media.src | img_url: '800x600' }}" alt="{{ media.alt | escape }}">
{% endfor %}
<div>{{ listing.description | rich_html }}</div>

listing.attributes maps each attribute’s alias (set in the back office with the attribute) to its value, already readable. Only attributes with a value appear.

Attribute type Value
Select The chosen choice’s label
Checkboxes A list of the chosen labels
Yes / no The label “Yes” or “No” in the marketplace’s language
Date A Unix time: print it with date
Phone formatted, phone_number, country_iso, country_name
Other types The value as entered
{% if listing.attributes.mileage %}
<li>{{ listing.attributes.mileage | number_format }} km</li>
{% endif %}
{% for equipment in listing.attributes.equipment %}
<span class="tag">{{ equipment | escape }}</span>
{% endfor %}
{% if listing.attributes.available_from %}
<li>{{ listing.attributes.available_from | date: 'd/m/Y' }}</li>
{% endif %}

The attributes’ titles are not included. Kindshare prints the listing’s attribute table through the content_block of the listing page.

On the search, category, vendor shop and collection pages, the items of listings are a lighter form of the listing, made to print cards. Print each card with listing.thumbnail_html, which is listing-thumbnail.liquid already rendered:

{% for listing in listings %}
<div class="col-sm-4" id="listing-{{ listing.id }}">{{ listing.thumbnail_html }}</div>
{% endfor %}

In those lists listing.attributes holds raw stored values (choice ids), and the readable values are in listing.cached_attributes. Inside listing-thumbnail.liquid itself, the listing has the full form above.

A member: the vendor of a listing (listing.user), the vendor of a shop page (vendor), the signed-in member (authenticated_user), the buyer and vendor of an order (customer, supplier).

Field Description
id, external_id Ids
public_name The name to display, following the marketplace’s rule (first name, username, business name…), already escaped
first_name, last_name, username, business_name Name fields
email, phone_country_code, phone_number Contact details. Private: do not print them on public pages.
avatar The URL of their picture
account_type individual, company, non_profit or soletrader
company name, number, website_url, address_line1, address_line2, address_zipcode, address_city, address_state, address_country. Absent for individuals.
address_line1, address_line2, address_zipcode, address_city, address_state, address_country Their address; address_country is an ISO code
birthday, nationality
attributes Their profile attribute values by alias, same shape as listing attributes
metafields Their metafields
average_rating, review_count Their reviews as a vendor
listing_count Their listings online
profile_url Their public profile
group Their member group: id, name, alias. group_id, group_name, group_alias repeat it.
can_post_listing Whether their group may post listings
status, identity_status Account status, identity verification status
lang, locale, timezone Their language and time zone
created_at When they signed up, 2026-10-13 09:30:00
<div class="seller">
<img src="{{ vendor.avatar | img_url: '150x150' }}" alt="">
<a href="{{ vendor.profile_url }}">{{ vendor.public_name }}</a>
{% if vendor.review_count > 0 %}{{ vendor.average_rating | stars }} ({{ vendor.review_count }}){% endif %}
</div>

On the category page, category holds the listing category:

Field Description
id, parent_id Ids
title, page_title Its name, and the title of its page
slug, url Its slug and its page URL
description, description_long Its short and long descriptions (HTML)
image, image_alt Its picture
level Its depth in the tree, from 0
listing_count Its listings
is_featured Whether it is featured

listing.category carries only id, title, slug, url and parent_id.

A blog post, on the article page (article) and the blog pages (articles).

Field Description
id Its id
title, summary Its title and summary
body Its content, HTML
url Its absolute URL
image, image_alt Its cover
publishing_date Its publication date, as a Unix time: print it with date
reading_time Its reading time, in minutes
meta_title, meta_description Its SEO texts
status online or offline
category Its blog category
author id, name, description, image
<article>
<img src="{{ article.image | img_url: '1200x630' }}" alt="{{ article.image_alt | escape }}">
<h1>{{ article.title | escape }}</h1>
<p>{{ article.author.name }} · {{ article.publishing_date | date: 'd/m/Y' }} · {{ article.reading_time }} min</p>
{{ article.body }}
</article>

related_articles and suggested_articles on the article page, and the homepage’s featured posts, are a lighter form: id, title, slug, summary, image (a stored path: use img_url), url (relative), date_released, category_title, and on the homepage category and author (id, name, photo).

Field Description
id Its id
title, description Its name and description
url Its page
post_count Its posts, on the blog pages

A CMS page, in page.liquid and its alternates.

Field Description
id, parent_id Ids
title, page_title, subtitle Its name, its displayed title, its subtitle
body Its content, HTML, with its widgets rendered
url, url_key, slug Its URL and its key
image, image_alt Its picture
template The alternate template chosen, empty for the default
meta_title, meta_description Its SEO texts
body_id, body_class The id and classes it adds to <body>
parent Its parent page, with title and url, when it has one
modified_at When it was last changed

An order, on the vendor’s sale page, in the purchases and sales lists, in order-item.liquid and in emails.

Field Description
id Its id
number, order_number Its number, as shown to members
status pending, new, accepted, service_provided, shipped, customer_confirmed, supplier_confirmed, completed, declined, canceled, failed
fulfillment_status Its delivery status
amount Its total
amount_with_currency Its total, formatted
currency ISO 4217
net_supplier_amount What the vendor receives
checkout_at When it was placed (a Unix time; a formatted date in the purchases and sales lists)
checkout_message The buyer’s message
customer, supplier The buyer and the vendor, as member objects
customer_url, supplier_url The order’s page for the buyer and for the vendor
billing_address name, street, street_option, postcode, city, state, country, phone, mobile. Print with format_address.
requires_shipping Whether it is shipped
shippings The delivery: title, carrier, amount, tracking_number, tracking_url, address
payout The vendor’s payout: status, amount, amount_with_currency, requested_at, completed_at, arrival_date
refusal_reason Why it was declined
order_items Its items, see below
metafields Its metafields
store The shop it was placed with, with the MultiStore app

order.order_items, and order_item in order-item.liquid and order-item-email.liquid:

Field Description
id Its id
listing_id, listing_title, listing_sku, listing_image The listing, as it was ordered
listing The listing, as a listing object
qty Quantity
listing_unit_price Unit price
amount, base_amount Its amount, and before discounts
currency ISO 4217
variants The variants ordered: title, qty, unit_price, amount
add_ons The add-ons ordered: title, qty, unit_price, amount
downloadable_assets Files to download: title, download_url, file_type, file_size
status Its own status, new by default
start_datetime, end_datetime The booked period, for bookings
snippets/order-item.liquid
<img src="{{ order_item.listing_image | img_url: '250x250' }}" alt="">
<strong>{{ order_item.listing_title | escape }}</strong>
× {{ order_item.qty }} — {{ order_item.amount | money: order.currency }}

A collection, in collection.liquid, served at /<handle>.

Field Description
id, handle Its id and handle
title, subtitle, description Its public texts
image, image_alt Its picture
url Its page
type listing or user
count The items it holds

The collection page also receives listings (cards in thumbnail_html) or users, and pagination. A member card in a user collection has id, public_name, business_name, account_type, avatar, url, city, average_rating, review_count, group (id, title, handle) and thumbnail_html.

With the MultiStore app, listing.store and order.store describe the vendor’s physical shop: id, name, line1, line2, zipcode, city, state, country, formatted (the address on one line), lat, lng, phone, is_pickup_point, instructions, opening_hours and pickup_hours (lists of day, day_name, ranges).

Many templates also receive blocks: parts of the page already rendered as HTML by the platform, such as sidebar_block, facets, pagination, login_form or account_navigation. Print them as they are ({{ sidebar_block }}) and restyle them with CSS: they carry the forms, buttons and scripts that make the page work. Each template’s blocks are listed in Templates.