Skip to main content
PATCH
/
api
/
v3
/
admin
/
products
/
{id}
Spree Admin SDK
import { createAdminClient } from '@spree/admin-sdk'

const client = createAdminClient({
  baseUrl: 'https://your-store.com',
  secretKey: 'sk_xxx',
})

const product = await client.products.update('prod_86Rf07xd4z', {
  name: 'Updated Name',
  status: 'active',
  tags: ['eco', 'sale'],
})
{
  "id": "prod_UkLWZg9DAJ",
  "name": "Updated Name",
  "slug": "product-637278",
  "meta_title": null,
  "meta_description": null,
  "meta_keywords": null,
  "variant_count": 0,
  "available_on": null,
  "purchasable": true,
  "in_stock": false,
  "backorderable": true,
  "available": true,
  "description": "Voluptate deserunt iure ea pariatur aspernatur. Exercitationem aspernatur quo quidem sit necessitatibus. Facere eos consectetur neque voluptatem cupiditate explicabo. Modi optio consectetur ipsa vero assumenda reiciendis. Itaque quae unde illum reiciendis repellendus doloremque aperiam. Vitae laboriosam vel consequatur cumque quos deleniti ratione. Velit dolor illum nesciunt minus. Tenetur molestias dicta iusto eum soluta. Velit non deserunt quasi eum earum sit commodi.",
  "description_html": "Voluptate deserunt iure ea pariatur aspernatur. Exercitationem aspernatur quo quidem sit necessitatibus. Facere eos consectetur neque voluptatem cupiditate explicabo. Modi optio consectetur ipsa vero assumenda reiciendis.\nItaque quae unde illum reiciendis repellendus doloremque aperiam. Vitae laboriosam vel consequatur cumque quos deleniti ratione. Velit dolor illum nesciunt minus. Tenetur molestias dicta iusto eum soluta. Velit non deserunt quasi eum earum sit commodi.",
  "default_variant_id": "variant_UkLWZg9DAJ",
  "thumbnail_url": null,
  "tags": [],
  "price": {
    "id": "price_UkLWZg9DAJ",
    "amount": "19.99",
    "amount_in_cents": 1999,
    "compare_at_amount": null,
    "compare_at_amount_in_cents": null,
    "currency": "USD",
    "display_amount": "$19.99",
    "display_compare_at_amount": null,
    "price_list_id": null,
    "variant_id": "variant_UkLWZg9DAJ",
    "created_at": "2026-06-17T13:37:42.729Z",
    "updated_at": "2026-06-17T13:37:42.729Z"
  },
  "original_price": null,
  "status": "active",
  "metadata": {},
  "deleted_at": null,
  "created_at": "2026-06-17T13:37:42.719Z",
  "updated_at": "2026-06-17T13:37:43.018Z",
  "tax_category_id": "taxcat_UkLWZg9DAJ"
}

Authorizations

x-spree-api-key
string
header
required

Secret API key for admin access

Authorization
string
header
required

JWT token for admin user authentication

Headers

x-spree-api-key
string
required
Authorization
string
required

Bearer token for admin authentication

Path Parameters

id
string
required

Product ID

Body

application/json
name
string
Example:

"Premium T-Shirt"

description
string
slug
string
status
enum<string>
Available options:
draft,
active,
archived
tax_category_id
string

Tax category ID

category_ids
string[]

Array of category IDs

tags
string[]
Example:
["eco", "sale"]
prices
object[]

Shorthand for a simple (no-options) product: per-currency prices that forward to the product's sole variant. For products with options, set prices per variant under variants: instead.

variants
object[]

Array of variant payloads. Variants can declare multiple option pairs via options: and per-currency prices via prices:. Stock counts go in stock_items: (per stock location).

Response

product updated

id
string
required
name
string
required
slug
string
required
meta_title
string | null
required
meta_description
string | null
required
meta_keywords
string | null
required
variant_count
number
required
available_on
string | null
required
purchasable
boolean
required
in_stock
boolean
required
backorderable
boolean
required
available
boolean
required
description
string | null
required
description_html
string | null
required
default_variant_id
string
required
thumbnail_url
string | null
required
tags
string[]
required
price
object
required
original_price
object
required
status
string
required
metadata
object
required
deleted_at
string | null
required
created_at
string
required
updated_at
string
required
tax_category_id
string | null
required
primary_media
object
media
object[]
variants
object[]
default_variant
object
option_types
object[]
option_values
object[]
categories
object[]
custom_fields
object[]
prior_price
object
product_publications
object[]
channels
object[]