These pages list the exact data fields available to hosted Vascula themes. Add a root name such as product to a section's ctx_needs, then read it directly as product.title in the template. The ctx. prefix shown here identifies the public contract; do not include that prefix in a Vascula expression. Required fields are present whenever their containing object is present. Optional fields may be absent, and nullable fields may be present as null. [] marks an array item and {key} marks a key selected at runtime. Named types such as Price and Media are detailed on Shared data shapes.
ctx.product#
The routed product with variants, options, pricing, availability, session state, and storefront-visible metafields. Available on Product routes when declared in ctx_needs.
Field |
Type |
Requirement |
|---|---|---|
|
Object |
Declared root |
|
Boolean |
Required |
|
String or null |
Required; may be null |
|
String or null |
Optional; may be null |
|
Entity |
Optional |
|
Array of object |
Optional |
|
String |
Required |
|
String |
Required |
|
Array of object |
Required |
|
Integer |
Required |
|
String |
Required |
|
String |
Required |
|
URL |
Required |
|
Array of catalog entity ref |
Optional |
|
String |
Optional |
|
String or null |
Optional; may be null |
|
HTML or null |
Required; may be null |
|
String or null |
Optional; may be null |
|
Variant or null |
Required; may be null |
|
Media or null |
Required; may be null |
|
Boolean |
Required |
|
Number or null |
Optional; may be null |
|
Integer |
Required |
|
String |
Optional |
|
Array of media or null |
Required |
|
String |
Required |
|
Boolean |
Required |
|
Number or null |
Optional; may be null |
|
Integer or null |
Required; may be null |
|
Metafields |
Optional |
|
String or null |
Optional; may be null |
|
Boolean |
Optional |
|
Boolean |
Required |
|
Array of option |
Required |
|
Price or null |
Required; may be null |
|
Price range or null |
Required; may be null |
|
Array of price tier |
Required |
|
String ( |
Required |
|
Integer or null |
Optional; may be null |
|
Integer or null |
Required; may be null |
|
Rating |
Optional |
|
Array of product card |
Optional |
|
Array of selected option |
Required |
|
Boolean |
Required |
|
Variant or null |
Required; may be null |
|
Boolean |
Required |
|
String or null |
Required; may be null |
|
String or null |
Required; may be null |
|
Object |
Required |
|
Object |
Required |
|
Integer |
Required |
|
Integer |
Required |
|
Integer |
Required |
|
Integer |
Required |
|
Object |
Required |
|
Integer |
Required |
|
Boolean |
Required |
|
Integer |
Required |
|
Boolean |
Required |
|
String or null |
Required; may be null |
|
String or null |
Required; may be null |
|
String |
Required |
|
Array of object |
Required |
|
Integer |
Required |
|
String |
Required |
|
String |
Required |
|
URL |
Required |
|
Array of string or null |
Required; may be null |
|
String |
Required |
|
String |
Required |
|
URL |
Required |
|
Array of variant |
Required |
|
String or null |
Required; may be null |
|
Entity |
Optional |
|
Number or null |
Optional; may be null |
|
String or null |
Optional; may be null |
|
Number or null |
Optional; may be null |
ctx.products#
A routed product grid with platform search, sort, and pagination state. Available on Shop, Search, Collection, Category, Vendor, Brand routes when declared in ctx_needs.
Field |
Type |
Requirement |
|---|---|---|
|
Object |
Declared root |
|
Array of product card |
Required |
|
Pagination |
Required |
|
Object |
Required |
|
Boolean |
Required |
|
String |
Required |
|
URL |
Required |
|
Object |
Required |
|
String |
Required |
|
Array of object |
Required |
|
String |
Required |
|
Boolean |
Required |
|
URL |
Required |
ctx.filters#
Platform-resolved filters and active filter state for the current product listing. Available on Shop, Search, Collection, Category, Vendor, Brand routes when declared in ctx_needs.
Field |
Type |
Requirement |
|---|---|---|
|
Object |
Declared root |
|
Integer |
Required |
|
URL |
Required |
|
String |
Optional |
|
Boolean |
Optional |
|
Array of object |
Required |
|
String |
Required |
|
String |
Required |
|
Array of object |
Required |
|
Boolean |
Required |
|
Integer |
Required |
|
URL |
Required |
|
String |
Required |
|
String |
Required |
|
String |
Required |
|
String |
Required |
|
Object or null |
Required; may be null |
|
URL |
Required |
|
String |
Required |
|
String |
Required |
|
URL |
Required |
|
Array of object |
Required |
|
String |
Required |
|
String |
Required |
|
Boolean |
Required |
|
Decimal string or null |
Required; may be null |
|
String |
Required |
|
Decimal string or null |
Required; may be null |
|
String |
Required |
|
Array of object |
Required |
|
String or null |
Required; may be null |
|
Integer |
Required |
|
Boolean |
Optional |
|
String |
Optional |
|
String or null |
Required; may be null |
|
String |
Required |
|
String |
Required |
|
Boolean |
Required |
|
Boolean |
Required |
|
URL |
Required |
|
Object or null |
Required; may be null |
|
URL |
Required |
|
URL |
Required |
|
Boolean |
Required |
|
Boolean |
Required |
|
Array of object |
Required |
|
String |
Required |
|
String |
Required |
|
Integer |
Required |
|
URL |
Required |
|
Integer |
Required |
|
URL |
Required |
|
String |
Required |
|
String |
Required |
|
Integer |
Required |
|
Object |
Optional |
|
URL |
Required |
|
String |
Required |
|
String |
Required |
|
URL |
Required |
|
String |
Required |
|
Array of object |
Required |
|
String |
Required |
|
String |
Required |
|
Boolean |
Required |
|
String |
Required |
|
Decimal string or null |
Required; may be null |
|
String |
Required |
|
Money input or null |
Required; may be null |
|
Decimal string or null |
Required; may be null |
|
String |
Required |
|
Money input or null |
Required; may be null |
Use filters in a section’s ctx_needs. Iterate filters.items to render enabled choice, numeric, and price filters in merchant order. filters.price also provides the price currency and money objects; do not render a second price control from it. The same contract is available on shop, search, collection, category, vendor, and brand product listings.
Use each choice’s url for navigation. selected identifies active choices and selectable tells you whether toggling the choice stays within the query limits. A selected value can have a count of zero. Keep it visible so the shopper can remove it. allow_multiple controls whether another choice is added or replaces the current one; use it to distinguish multiple-choice and single-choice controls.
Render numeric and price controls from item.range. For the item whose key is price, filters.price adds currency and money-formatting fields. The available min and max are decimal strings or null when no products provide a range. applied_min and applied_max preserve the current bounds even when the results are empty. Integer sources require whole-number bounds. Price bounds use the resolved storefront currency; custom numeric ranges may be negative.
For a range form, use GET with the supplied action, render every inputs entry as a hidden name/value input, and use min_input and max_input as the editable field names. Display editable amounts left-to-right with a period as the decimal separator and no grouping. An empty bound removes that boundary. Use the supplied clear_url to remove the range.
values_page describes the current window of choices: search text, offset, limit, total and previous/next links. Pages default to 50 choices and allow up to 100. Selected choices are returned as well, including selections outside the current page or search. Render each value once; do not treat the returned array length as the page size. For value search, use GET with the page’s action, inputs, and search_input.
Use filters.inputs to preserve filter selections in a product-search form. These pairs include all applied choice and range inputs. Preserve the listing sort separately. Selection or range changes reset product pagination; paging the choices does not change the selected products. Use filters.clear_url for clear all and each item’s clear_url for that filter.
Direct URL input uses repeated filter.<key>=<value> for choices and filter.<key>.min / .max for ranges. Attribute keys are attribute:<slug>; metafield keys are metafield:<owner_type>:<namespace>.<key>. For example, filter.metafield:variant:specs.length.min=10.5. Choice paging uses facet.<key>.search, .offset, and .limit. Prefer generated controls so URL encoding and preservation remain correct.
Requests accept at most 50 selected filter keys, 100 values per key, 256 choice values overall, and 8,192 URL-encoded filter bytes. Choice values are limited to 255 characters. Disabled or unknown keys, unsupported multiple choices, malformed bounds, and exceeded limits are rejected with STOREFRONT_FILTER_INVALID. Counts apply every other selected filter, while variant-level choices and ranges must match the same variant.
ctx.search#
The search query, grouped result totals, and canonical result projections. Available on Search routes when declared in ctx_needs.
Field |
Type |
Requirement |
|---|---|---|
|
Object |
Declared root |
|
String |
Required |
|
Object |
Required |
|
Object |
Optional |
|
Array of product card |
Required |
|
Object |
Required |
|
String |
Optional |
|
Integer |
Required |
|
Boolean |
Required |
|
Boolean |
Required |
|
String |
Optional |
|
String |
Optional |
|
String |
Optional |
|
Integer |
Required |
|
Boolean |
Optional |
|
Integer |
Required |
|
Array of object |
Dynamic key |
|
String |
Required |
|
Media or null |
Optional; may be null |
|
String |
Required |
|
URL |
Required |
|
Object keyed by name |
Required |
|
Integer |
Dynamic key |
ctx.collection#
The routed collection metadata and storefront-visible metafields. Available on Collection routes when declared in ctx_needs.
Field |
Type |
Requirement |
|---|---|---|
|
Object |
Declared root |
|
Array of catalog entity ref |
Optional |
|
Array of catalog entity ref |
Optional |
|
String or null |
Required; may be null |
|
String |
Required |
|
Media or null |
Required; may be null |
|
Metafields |
Optional |
|
String |
Required |
|
Catalog entity ref or null |
Optional; may be null |
|
Integer |
Required |
|
String or null |
Optional; may be null |
|
String or null |
Optional; may be null |
|
String |
Required |
|
URL |
Optional |
ctx.category#
The routed category metadata and storefront-visible metafields. Available on Category routes when declared in ctx_needs.
Field |
Type |
Requirement |
|---|---|---|
|
Object |
Declared root |
|
Array of catalog entity ref |
Optional |
|
Array of catalog entity ref |
Optional |
|
String or null |
Required; may be null |
|
Integer |
Required |
|
Media or null |
Required; may be null |
|
Metafields |
Optional |
|
String |
Required |
|
Catalog entity ref or null |
Optional; may be null |
|
Integer |
Required |
|
String or null |
Optional; may be null |
|
String or null |
Optional; may be null |
|
String |
Required |
|
URL |
Optional |
ctx.vendor#
The routed vendor metadata and storefront-visible metafields. Available on Vendor routes when declared in ctx_needs.
Field |
Type |
Requirement |
|---|---|---|
|
Entity |
Declared root |
ctx.brand#
The routed brand metadata and storefront-visible metafields. Available on Brand routes when declared in ctx_needs.
Field |
Type |
Requirement |
|---|---|---|
|
Entity |
Declared root |
ctx.list#
The generic vendor, brand, collection, or category index for the routed list page. Available on Vendor list, Brand list, Collection list, Category list routes when declared in ctx_needs.
Field |
Type |
Requirement |
|---|---|---|
|
Object |
Declared root |
|
Array of entity |
Required |
|
Object |
Required |
|
Integer |
Required |
|
Boolean |
Required |
|
Boolean |
Required |
|
String |
Required |
|
String |
Required |
|
Integer |
Required |
|
Boolean |
Required |
|
Integer |
Required |
|
String |
Required |
ctx.recently_viewed#
Visibility-gated product cards recently viewed on this device. Loaded when a section declares it in ctx_needs.
Field |
Type |
Requirement |
|---|---|---|
|
Object |
Declared root |
|
Array of product card |
Required |
ctx.restock_notifications#
Availability and channel rules for a product restock request form. Loaded when a section declares it in ctx_needs.
Field |
Type |
Requirement |
|---|---|---|
|
Object |
Declared root |
|
Boolean |
Required |
|
Boolean |
Required |
|
Boolean |
Required |
|
String |
Required |
|
Boolean |
Required |