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

# Get a published product

**Publié le** : 2026-08-19
**Catégorie** : Commerce

## `GET /products/:idOrSlug`

**Get a published product**

Returns one PUBLISHED product for the `:siteId` in the URL, addressed by its
`prod_` wire id OR its slug, served behind a required storefront publishable
key. A draft, archived, deleted, cross-tenant, or absent product all return
an identical 404 (no existence oracle). The response carries only the public
catalogue whitelist (wire id, slug, title, description, pricing, `images`,
`thumbnail`, the enriched `gallery` of `{ url, alt, caption }` per image, kind,
SEO fields, SKU), never admin or internal fields. `images` stays a plain URL
array; `gallery` is the additive projection carrying per-image alt text and
caption for image SEO and accessibility.

When the `product_variants` slice is on, the payload's `variants` array carries
the closed per-variant whitelist (variant wire id, title, sku, priceCents,
compareAtPriceCents, position, the per-variant `gallery` of `{ url, alt, caption }`
(the variant's own image subset, or the full product gallery when it selects none),
and option-value name pairs ordered by option position); per-variant stock is never
surfaced. When the slice is off, or for a `bookable` product, `variants` is an empty
array. The flag gates serialization ONLY: the published-only, tenant, and
soft-delete filters hold on both flag states.

> **Note:** This endpoint requires the e-commerce feature to be enabled on your site.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `idOrSlug` | path | string | Yes |  |


### Responses

| Status | Description |
| --- | --- |
| `200` | Successful response |
| `401` | Missing or invalid storefront publishable key |
| `402` | The site subscription does not currently permit this operation |
| `403` | The storefront key origin is not allowed |
| `404` | Not found |


---