> ## 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.

# Get Variant

> Get a single variant by ID

<Note>
  There is **no dedicated variant endpoint on the OAuth App API** (`/api/v1/`).
  Installed apps read variants **embedded on their parent product** via
  [`GET /api/v1/products/{id}.json`](/api-reference/products/get) — the
  response includes a `variants[]` array.

  The route documented here is the **merchant admin** route
  (`GET /variants/get-single-variant/{id}`), authenticated with a merchant
  session token (any authenticated store user), not an app access token. It is
  also the route the MCP tools and the admin UI use.
</Note>

## Authentication

Merchant JWT (`Authorization: Bearer <merchant-token>`). Any authenticated
user of the store may call it.

## Path Parameters

<ParamField path="id" type="string" required>
  The variant ID
</ParamField>

## Response

The platform response envelope is `{ status, state, message, data }`. The
`data` object is the raw variant record.

<ResponseField name="status" type="number">
  HTTP status code (e.g. `200`).
</ResponseField>

<ResponseField name="state" type="string">
  `"success"` or `"error"`.
</ResponseField>

<ResponseField name="message" type="string">
  `null` on success, an error string otherwise.
</ResponseField>

<ResponseField name="data" type="object">
  <Expandable title="variant properties">
    <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. "Medium")</ResponseField>
    <ResponseField name="price" type="number">Variant price</ResponseField>
    <ResponseField name="discountPrice" type="number">Discounted/sale price</ResponseField>
    <ResponseField name="stock" type="number">Current stock quantity</ResponseField>
    <ResponseField name="stockStatus" type="string">Stock status (e.g. `IN_STOCK`)</ResponseField>
    <ResponseField name="skuId" type="string">SKU</ResponseField>
    <ResponseField name="weight" type="number">Weight</ResponseField>
    <ResponseField name="weightUnit" type="string">Weight unit (e.g. `kg`, `g`, `lb`, `oz`)</ResponseField>
    <ResponseField name="mainImageUrl" type="string">Variant image URL</ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json theme={null}
  {
    "status": 200,
    "state": "success",
    "message": null,
    "data": {
      "varientId": "8f1c2d34-...",
      "productId": "prod_xyz789",
      "name": "Size",
      "value": "Medium",
      "price": 29.99,
      "discountPrice": 24.99,
      "stock": 50,
      "stockStatus": "IN_STOCK",
      "skuId": "TSHIRT-RED-M",
      "weight": 0.2,
      "weightUnit": "kg",
      "mainImageUrl": "https://assets.launchmystore.io/...",
      "createdAt": "2024-01-15T10:30:00.000Z",
      "updatedAt": "2024-01-15T10:30:00.000Z"
    }
  }
  ```
</ResponseExample>

<Note>
  If the variant does not exist the endpoint returns `status: 400` with
  `state: "error"` and `message: "Variant Not Found"`.
</Note>
