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 }}Global objects
Section titled “Global objects”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.
request
Section titled “request”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>authenticated_user
Section titled “authenticated_user”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.
settings
Section titled “settings”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 %}routes
Section titled “routes”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 %}listing
Section titled “listing”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>Attributes
Section titled “Attributes”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.
Listings in search results
Section titled “Listings in search results”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>category
Section titled “category”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.
article
Section titled “article”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).
Blog category
Section titled “Blog category”| 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 items
Section titled “Order items”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 |
<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 }}collection
Section titled “collection”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.
Shop (store)
Section titled “Shop (store)”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).
Blocks
Section titled “Blocks”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.