> For the complete Lynkow documentation index in agent-friendly format, see [llms.txt](/llms.txt).

# SDK Types: Product

**Publié le** : 2026-08-20
**Catégorie** : Types

# SDK Types: Product

## `Product`

*Interface*

A published product on the storefront catalogue. Mirrors the API's public
whitelist: only buyer-facing fields are present, and `id` is a wire-encoded
prefixed id (never a raw database identifier).

| Property | Type | Optional | Description |
| --- | --- | --- | --- |
| `compareAtPriceCents` | `number \| null` | No | Optional strikethrough "was" price in cents, or `null` when there is no comparison price. |
| `currency` | `string` | No | ISO 4217 currency code (e.g. `'EUR'`). |
| `description` | `string \| null` | No | Long product description, or `null` when the merchant left it empty. |
| `gallery` | `ProductGalleryImage[]` | No | Ordered gallery with per-image metadata. Same images and order as Product.images; prefer this field when you need alt text or captions. Empty array when the product has no images. `gallery.map((g) => g.url)` equals Product.images, and `gallery[0]?.url ?? null` equals Product.thumbnail. |
| `id` | `string` | No | The product id as a prefixed wire id (e.g. `'prod_...'`). Stable; safe to store and link. |
| `images` | `string[]` | No | Ordered public image URLs, or an empty array when the product has no images. |
| `kind` | `"standard" \| "bookable"` | No | `'standard'` for a normal product, `'bookable'` for a reservation product (route it to the slot UI and reservations). |
| `priceCents` | `number` | No | Price in the smallest currency unit (cents). Divide by 100 to display. For a product with variants this is the base "from" price; the selected variant's own ProductVariant.priceCents is the selling price. |
| `seoDescription` | `string \| null` | No | SEO meta description, or `null` when unset. |
| `seoTitle` | `string \| null` | No | SEO title override, or `null` when unset (fall back to `title`). |
| `sku` | `string \| null` | No | Catalogue SKU, or `null` when unset. |
| `slug` | `string` | No | URL-friendly unique slug. Use it to build a product page URL or to address the product in `products.getBySlug()`. |
| `thumbnail` | `string \| null` | No | The primary image URL (mirror of `images[0]`), or `null` when there are no images. |
| `title` | `string` | No | Product title in the requested locale. Always non-empty for a published product. |
| `variants` | `ProductVariant[]` | No | Product variants, ordered by position. Empty when the product has none. |


---

## `ProductGalleryImage`

*Interface*

One product gallery image with its display metadata. The same image also
appears, in the same order, as a bare URL in Product.images.

| Property | Type | Optional | Description |
| --- | --- | --- | --- |
| `alt` | `string \| null` | No | Merchant-provided alt text for the image, or `null` when unset. Use it for `<img alt>`; fall back to the product `title` when null. Max 255 chars. |
| `caption` | `string \| null` | No | Merchant-provided caption, or `null` when unset. Suited to a `<figcaption>`. Max 500 chars. |
| `url` | `string` | No | Public image URL, served from the Lynkow media library. Same value as the corresponding `images[n]` entry. |


---

## `ProductsFilters`

*Interface*

Filters for a storefront product listing. All optional.

| Property | Type | Optional | Description |
| --- | --- | --- | --- |
| `category` | `string` | Yes | Restrict to one category, INCLUDING its sub-categories: its `'pcat_...'` wire id or its slug. |
| `collection` | `string` | Yes | Restrict to one collection: its `'col_...'` wire id or its slug. |
| `kind` | `"standard" \| "bookable"` | Yes | Restrict to a product kind: `'standard'` or `'bookable'`. |
| `limit` | `number` | Yes | Items per page. Defaults to 20, max 100. |
| `page` | `number` | Yes | Page number (1-based). Defaults to 1. |
| `search` | `string` | Yes | Full-text search across title and slug. |
| `sortBy` | `"title" \| "price_cents" \| "created_at"` | Yes | Sort field: `'title'`, `'price_cents'`, or `'created_at'`. Defaults to `'created_at'`. |
| `sortOrder` | `"asc" \| "desc"` | Yes | Sort direction: `'asc'` or `'desc'`. Defaults to `'desc'`. |


---

## `ProductsListResponse`

*Interface*

Paginated product list response: the products on the page plus pagination metadata.

| Property | Type | Optional | Description |
| --- | --- | --- | --- |
| `data` | `Product[]` | No | The published products on this page. |
| `meta` | `PaginationMeta` | No | Pagination info (total, currentPage, lastPage, perPage, hasMorePages). |


---

## `ProductVariant`

*Interface*

A purchasable variant of a product. Present only for published products on
sites with variants enabled; a product without variants has an empty array.

| Property | Type | Optional | Description |
| --- | --- | --- | --- |
| `compareAtPriceCents` | `number \| null` | No | Optional strikethrough "was" price in cents, or `null`. |
| `gallery` | `ProductGalleryImage[]` | No | The variant's own ordered image gallery, with per-image metadata. When the<br>variant selects its own subset of the product images, this carries that subset<br>(same `{@link ProductGalleryImage}` shape as Product.gallery); when it<br>selects none, it falls back to the full product gallery, so it is never empty for<br>a product that has images. Prefer it over Product.gallery when you show a<br>gallery for the selected variant. |
| `id` | `string` | No | The variant id as a prefixed wire id (e.g. `'var_...'`). Stable; safe to store and link. |
| `optionValues` | `ProductVariantOptionValue[]` | No | The option values this variant represents, ordered by option position. |
| `position` | `number` | No | Display order within the product (ascending). |
| `priceCents` | `number` | No | Variant price in the smallest currency unit (cents). Divide by 100 to display. |
| `sku` | `string \| null` | No | Variant SKU, or `null` when unset. |
| `title` | `string` | No | Display title, e.g. `'M / Red'`. |


---

## `ProductVariantOptionValue`

*Interface*

One selected option value carried by a variant (e.g. Size: M).

| Property | Type | Optional | Description |
| --- | --- | --- | --- |
| `option` | `string` | No | The option (axis) label, e.g. `'Size'`. |
| `value` | `string` | No | The selected value label, e.g. `'M'`. |