> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trychannel3.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Product Detail

Fetch a single product by ID with [`GET /v1/products/{product_id}`](/api-reference/v1/product-detail). This endpoint is **free** — use it to refresh prices, availability, offers, and buy links after search or lookup.

You get the full [Product](/product-model) object, including images, offers, variants, and metadata.

## Basic retrieve

Pass a product ID from search, lookup, or similar:

```typescript TypeScript theme={"theme":{"light":"github-light","dark":"github-dark"}}
import Channel3 from "@channel3/sdk";

const client = new Channel3();
const product = await client.products.retrieve("2yh8WH5");

console.log(product.title);
console.log(product.offers.map((o) => o.domain));
```

```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
from channel3_sdk import Channel3

client = Channel3()
product = client.products.retrieve("2yh8WH5")

print(product.title)
print([o.domain for o in product.offers])
```

```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl https://api.trychannel3.com/v1/products/2yh8WH5 \
  -H "x-api-key: $CHANNEL3_API_KEY"
```

## Constrain the buy URL

When a product has offers from multiple merchants, pass `website_ids` to prefer buy URLs from specific stores. Accepts website IDs or domains (e.g. `"nike.com"`):

```typescript TypeScript theme={"theme":{"light":"github-light","dark":"github-dark"}}
const product = await client.products.retrieve("2yh8WH5", {
  website_ids: ["nike.com"],
});
```

```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
product = client.products.retrieve("2yh8WH5", website_ids=["nike.com"])
```

```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl "https://api.trychannel3.com/v1/products/2yh8WH5?website_ids=nike.com" \
  -H "x-api-key: $CHANNEL3_API_KEY"
```

## Locale and units

Set `language`, `country`, and `currency` so offers and prices match the shopper's market. Optionally set `length_unit` and `weight_unit` for dimensions. See [Set Locale](/guides/locale) and [Localization](/guides/localization).

```typescript TypeScript theme={"theme":{"light":"github-light","dark":"github-dark"}}
const product = await client.products.retrieve("2yh8WH5", {
  country: "GB",
  language: "en",
  currency: "GBP",
});
```

```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
product = client.products.retrieve(
    "2yh8WH5",
    country="GB",
    language="en",
    currency="GBP",
)
```

```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl "https://api.trychannel3.com/v1/products/2yh8WH5?country=GB&language=en&currency=GBP" \
  -H "x-api-key: $CHANNEL3_API_KEY"
```

## Variants

To resolve a specific size/color (or other options), pass `option_<OptionName>=<Label>` query params. The response updates product fields and sets `variants.selected` to the effective selection. See [Variants](/variants).

## When to use it

* **Refresh at display time** — cache `product.id` from search, then retrieve before showing price or buy links ([Caching](/guides/caching))
* **Hydrate variant availability** — search results may omit live stock; detail fills in `available`
* **Deep links** — look up a known product ID from your app or agent state

> **[API reference](/api-reference/v1/product-detail)**
>
> Full parameter list and response schema for product detail.

> **[Product model](/product-model)**
>
> Fields on the Product object returned by this endpoint.

> **[Variants](/variants)**
>
> Select options and read variants.selected after retrieve.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.