---
title: "Modify an existing Product Variant."
method: PUT
path: "/products/{id}/variants/{variant_id}.json"
tags: ["Product Variants"]
---

# Modify an existing Product Variant.

`PUT /products/{id}/variants/{variant_id}.json`

## Request

- Base URL: `https://api.jumpseller.com/v1`
- URL: `https://api.jumpseller.com/v1/products/{id}/variants/{variant_id}.json`
- Auth: one of:
  - HTTP basic
  - API key in query parameter `login` and API key in query parameter `authtoken`
  - OAuth 2
    - Authorization code: `https://accounts.jumpseller.com/oauth/authorize`
    - Token URL: `https://accounts.jumpseller.com/oauth/token` scopes: `write_products`

## Path parameters

- `id` integer, required
- `variant_id` integer, required

## Query parameters

- `fields` string, string

## Request body

- VariantEdit
  - `variant` VariantEditFields
    - `price` number, float: Price of the Product's Variant
    - `sku` string: Stock Keeping Unit of the Product's Variant
    - `barcode` string: Barcode of the Product's Variant
    - `stock` integer: Quantity in stock for the Product's Variant
    - `stock_unlimited` boolean: True if the Product's Variant has unlimited stock
    - `stock_threshold` integer: Low stock threshold quantity.
    - `stock_notification` boolean: True if the low stock threshold notification is enabled. Only applied when updating a variant.
    - `cost_per_item` number: Cost per item for the Product's Variant (only you can see this)
    - `compare_at_price` number: Used to show a sale price. Value must be higher than the price
    - `image_id` integer: Unique identifier of the product image to associate with this variant
    - `options` ProductOptionVariantEdit[]: Option values that identify the variant. Required when creating a variant; ignored when updating one.
      - `name` string, required: Name of the product option. Created if it does not exist.
      - `option_type` 'option' | 'color': Type of the product option that generates variants
      - `value` string, required: Value of the product option. Required; created if it does not exist.
      - `custom` string: Hexadecimal value of color (e.g. #FF0000). Required for product option type 'color'
    - `weight` number, float: Weight of the Product's Variant

## Response `200`

OK

- Variant
  - `variant` VariantFields
    - `id` integer: Unique identifier of the Product's Variant
    - `position` integer: Position of the Product's Variant
    - `created_at` string: Date of the Product's Variant creation
    - `updated_at` string: Date of the Product's Variant last update
    - `price` number, float: Price of the Product's Variant
    - `sku` string: Stock Keeping Unit of the Product's Variant
    - `barcode` string: Barcode of the Product's Variant
    - `stock` integer: Quantity in stock for the Product's Variant
    - `stock_unlimited` boolean: True if the Product's Variant has unlimited stock
    - `stock_threshold` integer: Low stock threshold quantity.
    - `stock_notification` boolean: True if the Product has low stock threshold quantity enabled
    - `cost_per_item` number, nullable: Cost per item for the Product's Variant (only you can see this)
    - `compare_at_price` number, nullable: Used to show a sale price. Value must be higher than the price
    - `options` ProductVariantOptionFields[]
      - `product_option_id` integer: Unique identifier of the product option
      - `product_option_value_id` integer: Unique identifier of the product option value
      - `option_type` 'option' | 'color': Type of the product option. Only present for option types that generate variants.
      - `name` string: Name of the product option
      - `value` string: Value of the product option
      - `custom` string, nullable: Hexadecimal value of color. Only used for product option type 'color'
      - `product_option_position` integer: Position of the product option
      - `product_value_position` integer: Position of the product option value
    - `image` ImageFields
      - `id` integer: Unique identifier of the image
      - `position` integer: Position of the image
      - `url` string: Complete URL of the image
    - `weight` number, float: Weight of the Product's Variant
    - `discount` number: Discount of the Product's Variant

## Other responses

- `404`: Product or Product Variant Not Found.

## Changes

- **2026-10-15** `53dc9f2c1329`: 5 breaking, 2 warning, 10 info
  - the request property `variant/options/items/name` became required
  - the request property `variant/options/items/value` became required
  - the response property `variant/compare_at_price` became nullable for the status `200`
  - the response property `variant/cost_per_item` became nullable for the status `200`
  - …13 more
- **2026-09-28** `6d9bc2d4601a`: 2 info
  - added the optional property `variant/created_at` to the response with the `200` status
  - added the optional property `variant/updated_at` to the response with the `200` status

[Operation history](https://skmtc.dev/jumpseller/apis/jumpseller-api/changes/products/:id/variants/:variant_id.json/put.md)

---

[API](https://skmtc.dev/jumpseller/apis/jumpseller-api.md) - [All operations](https://skmtc.dev/jumpseller/apis/jumpseller-api/llms.txt) - [OpenAPI document](https://skmtc.dev/jumpseller/apis/jumpseller-api/revisions/09f991a20d74?raw)
