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

# List Variants

> Get the variants for a product

# List Variants

There is no standalone `/products/{id}/variants.json` route. Variants are
returned **embedded** under each product, in a `variants` array.

To get the variants for a single product, fetch the product and read its
`variants` array:

* `GET /api/v1/products/{id}.json` — one product with its variants.
* `GET /api/v1/products.json` — all products, each with their variants.

Both require the `read_products` scope.

## Path Parameters

<ParamField path="id" type="string" required>
  The product ID (UUID, or the numeric Shopify-compat id).
</ParamField>

## Request

```bash theme={null}
curl -X GET "https://api.launchmystore.io/api/v1/products/prod_xyz789.json" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
```

## Response

Responses use the platform response envelope: `status`, `state`, `message`,
`data`. The variants are nested under `data.product.variants`.

<ResponseField name="status" type="number">HTTP status code.</ResponseField>
<ResponseField name="state" type="string">`success` or `error`.</ResponseField>

<ResponseField name="data" type="object">
  <Expandable title="properties">
    <ResponseField name="product" type="object">
      <Expandable title="product object">
        <ResponseField name="variants" type="array">
          <Expandable title="variant object">
            <ResponseField name="varientId" type="string">Variant ID</ResponseField>
            <ResponseField name="productId" type="string">Parent product ID</ResponseField>
            <ResponseField name="name" type="string">Option name (e.g. "Size")</ResponseField>
            <ResponseField name="value" type="string">Option value (e.g. "Large")</ResponseField>
            <ResponseField name="price" type="number">Variant price</ResponseField>
            <ResponseField name="discountPrice" type="number">Discount / compare-at price</ResponseField>
            <ResponseField name="stock" type="number">Stock quantity</ResponseField>
            <ResponseField name="stockStatus" type="string">Stock status</ResponseField>
            <ResponseField name="skuId" type="string">Stock keeping unit</ResponseField>
            <ResponseField name="weight" type="number">Variant weight</ResponseField>
            <ResponseField name="weightUnit" type="string">Weight unit (e.g. "kg")</ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json theme={null}
  {
    "status": 200,
    "state": "success",
    "message": null,
    "data": {
      "product": {
        "id": "prod_xyz789",
        "name": "Classic Cotton T-Shirt",
        "handle": "classic-cotton-t-shirt",
        "variants": [
          {
            "varientId": "var_abc123",
            "productId": "prod_xyz789",
            "name": "Size",
            "value": "Small",
            "price": 29.99,
            "discountPrice": 39.99,
            "stock": 50,
            "stockStatus": "in_stock",
            "skuId": "TSHIRT-RED-S",
            "weight": 0.2,
            "weightUnit": "kg"
          },
          {
            "varientId": "var_abc124",
            "productId": "prod_xyz789",
            "name": "Size",
            "value": "Medium",
            "price": 29.99,
            "discountPrice": 39.99,
            "stock": 75,
            "stockStatus": "in_stock",
            "skuId": "TSHIRT-RED-M",
            "weight": 0.22,
            "weightUnit": "kg"
          }
        ]
      }
    }
  }
  ```
</ResponseExample>

<Note>
  Merchant (dashboard) JWT callers can also use
  `GET /variants/get-all-unique-variants` to list the distinct variant options
  defined across the store, and `GET /variants/get-single-variant/{id}` to fetch
  one variant by ID.
</Note>
