RenderedProduct
A product AFTER RedisSearchService.mapOutput — the shape appearing in
products arrays of rendered search/collection/zone responses and in
GET search/product/:handles.
Differences from RedisProduct:
- prices divided by 100 (major units);
0prices becomeundefined(the code doesx / 100 || undefined), so free products serialise with the price fields ABSENT;max_price/compare_at_max_priceare dropped from the output object;pricesnarrowed to the requested currency when?currency=was sent.
Type: object
| Field | Type | Description |
|---|---|---|
id | string | |
title | string | |
implode | ImplodeMode | |
handle | string | |
min_price optional | number | Major units. Absent/undefined when the stored price was 0 or missing. |
compare_at_min_price optional | number | Major units. Absent/undefined when the stored price was 0 or missing. |
vendor | string | |
type | string | |
on_sale | boolean | |
total_stock | number | |
variants | RenderedVariant[] | |
prices | RedisPricesMap | |
created_date | string | ISO date string on the wire. |
options optional | any | |
normalised_stock optional | number | |
tags | string[] | |
image optional | string | |
images optional | string[] | |
related optional | string | Stringified Juno related-products object. |
imploded optional | RedisProduct[] | As stored: see RedisProduct.imploded (mapOutput passes it through unmapped). |
meta optional | RedisProductMeta |
Example (illustrative)
{
"id": "7712345678901",
"title": "Linen shirt",
"implode": 1,
"handle": "linen-shirt",
"min_price": 89,
"compare_at_min_price": 89,
"vendor": "Mercury Apparel",
"type": "Shirts",
"on_sale": false,
"total_stock": 12,
"variants": [
{
"title": "Linen shirt",
"id": 7712345678901,
"inventory": 12,
"price": "89.00",
"compare_at_price": "89.00",
"option1": "string",
"option2": "string",
"option3": "string",
"grams": 1
}
],
"prices": {
"AUD": {
"price": 89,
"compare_at_price": 89
}
},
"created_date": "2026-11-01T00:00:00.000Z",
"options": null,
"normalised_stock": 12,
"tags": [
"summer"
],
"image": "https://cdn.shopify.com/s/files/1/0000/0001/files/linen-shirt.jpg",
"images": [
"https://cdn.shopify.com/s/files/1/0000/0001/files/linen-shirt.jpg"
],
"related": "string",
"imploded": [
{
"collectionPosition": {
"key": 1
},
"id": "7712345678901",
"title": "Linen shirt",
"implode": 1,
"imploded": [
{}
],
"description_string": "string",
"tags_string": "summer",
"handle": "linen-shirt",
"min_price": 89,
"max_price": 89,
"compare_at_min_price": 89,
"compare_at_max_price": 89,
"vendor": "Mercury Apparel",
"type": "Shirts",
"on_sale": false,
"total_stock": 12,
"normalised_popularity": 1,
"normalised_stock": 12,
"variants": [
{
"title": "Linen shirt",
"id": 7712345678901,
"inventory": 12,
"price": "89.00",
"compare_at_price": "89.00"
}
],
"prices": {
"AUD": {
"price": 89
}
},
"created_date": "2026-11-01T00:00:00.000Z",
"tags": [
"summer"
],
"image": "https://cdn.shopify.com/s/files/1/0000/0001/files/linen-shirt.jpg",
"images": [
"https://cdn.shopify.com/s/files/1/0000/0001/files/linen-shirt.jpg"
],
"options": null,
"related": "string",
"meta": {
"key": null
}
}
],
"meta": {
"reviews": null,
"badges": [
{
"content": "string",
"background": "#1f6feb",
"colour": "#1f6feb",
"positiony": "top",
"positionx": "left",
"classes": "string",
"type": "manual"
}
],
"personalise": {
"description": "string"
},
"related": null
}
}Used by
- GET
/search/collection/{handle} - GET
/search/product/{handles} - GET
/search/query/{term} - GET
/zone/query - POST
/zone/query - GET
/zone/query/{id} - POST
/zone/query/{id}
Declared in api-types/src/models/product.ts.