# Get a product

GET https://api.oletapp.com/your-store/v1/products/{id}

Returns the whole product document in one call: `codes`, `tags` (with names), `suppliers` (with `supplier_name`), `variant_options`, `variant_attributes`, and `components`. There are no separate sub-resource reads for any of these.

- `variant_attributes` is populated on a variant parent and empty everywhere else; `variant_options` is the child side, populated only on a variant child.
- `suppliers` carries the link's own `id` as well as `supplier_id`, and never `supply_price`: supplier cost is not exposed through this API.
- `version` moves when any part of the document changes, including when an attached tag or supplier is itself renamed.

- `404 NOT_FOUND`: the id is foreign, unknown, or deleted.

**Requires scope:** `catalog:read`

Required scope: `catalog:read`

## Parameters

| Name | In | Type | Required |
|---|---|---|---|
| `id` | path | string | yes |

## Response (200)

```
{
  data: {
  active: boolean
  brand_id: string | null
  category_id: string
  codes: ProductCode[]
  components: ProductComponent[]
  created_at: string
  description: string | null
  dimension_unit: string | null
  has_inventory: boolean
  has_variants: boolean
  height: number | null
  id: string
  image_thumb_url: string | null
  image_url: string | null
  is_composite: boolean
  is_gift_card: boolean
  length: number | null
  loyalty_amount: integer | null
  name: string
  purchase_account_code: string | null
  retail_price: integer
  sales_account_code: string | null
  sku: string
  suppliers: ProductSupplier[]
  tags: ProductTag[]
  updated_at: string
  variant_attributes: ProductAttribute[]
  variant_options: ProductVariantOption[]
  variant_parent_id: string | null
  version: string
  weight: number | null
  weight_unit: string | null
  width: number | null
}
}
```

Errors follow the standard error envelope: https://getolet.com/resources/developers/errors.md

## Example

```bash
curl -X GET "https://api.oletapp.com/your-store/v1/products/{id}" \
  -H "Authorization: Bearer olet_live_YOUR_API_KEY"
```
