Commerce · Products
Updates a product. Fields you leave out keep their current values. Works with Shopify accounts.
https://api.pozy.ai/v1/accounts/{accountId}/products/{productId}Request
Send your API key as Authorization: Bearer pz_live_.... Read-only keys cannot call it. Keys with the commerce resource group disabled get 403 resource_group_disabled. Authentication
Path parameters
| Name | Type | Notes |
|---|---|---|
accountIdrequired | string | |
productIdrequired | string | Matches ^\d+$ |
Request body
application/json, required
titlestringdescriptionHtmlstringhandlestringvendorstringproductTypestringtagsarray of stringstatusstringOne of
active,draft,archived.seoobjecttitlestringdescriptionstring
variantsarray of objectAt least 1 item. Up to 100 items.
idstringrequiredMatches
^\d+$.pricenumber or stringcompareAtPricenumber or string
Example
curl -X PATCH "https://api.pozy.ai/v1/accounts/696e0b682d0a31188e7a2ba9/products/659773d34b353e6821202f21" \
-H "Authorization: Bearer $POZY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Launch day",
"descriptionHtml": "string",
"handle": "acme",
"vendor": "string"
}'const res = await fetch("https://api.pozy.ai/v1/accounts/696e0b682d0a31188e7a2ba9/products/659773d34b353e6821202f21", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.POZY_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Launch day",
descriptionHtml: "string",
handle: "acme",
vendor: "string"
}),
});
const data = await res.json();
if (!res.ok) throw new Error(data?.error ?? `Request failed with status ${res.status}`);
console.log(data);import os
import requests
resp = requests.patch(
"https://api.pozy.ai/v1/accounts/696e0b682d0a31188e7a2ba9/products/659773d34b353e6821202f21",
headers={"Authorization": f"Bearer {os.environ['POZY_API_KEY']}"},
json={
"title": "Launch day",
"descriptionHtml": "string",
"handle": "acme",
"vendor": "string",
},
timeout=30,
)
resp.raise_for_status()
print(resp.json())Response
200 on success
platformstringOne of
shopify.productobject19 child fields
idstringplatformstringOne of
shopify.titlestringhandlestringdescriptionHtmlstringCan be null.
vendorstringCan be null.
productTypestringCan be null.
tagsarray of stringstatusstringOne of
active,draft,archived.featuredImageobjectOne of:
Product Image (2 fields)
urlstringaltTextstringCan be null.
imagesarray of object2 child fields
urlstringaltTextstringCan be null.
optionsarray of object2 child fields
namestringvaluesarray of string
variantsarray of object9 child fields
idstringtitlestringskustringCan be null.
barcodestringCan be null.
pricestringcompareAtPricestringCan be null.
inventoryQuantityintegerCan be null.
availableForSalebooleanselectedOptionsarray of object2 child fields
namestringvaluestring
seoobject2 child fields
titlestringCan be null.
descriptionstringCan be null.
totalInventoryintegerCan be null.
onlineStoreUrlstringCan be null.
createdAtstring (date-time)Can be null.
updatedAtstring (date-time)Can be null.
publishedAtstring (date-time)Can be null.
{
"platform": "shopify",
"product": {
"id": "6bfebd43ddc270f6d2c56fc5",
"platform": "shopify",
"title": "Launch day",
"handle": "acme",
"descriptionHtml": "string",
"vendor": "string",
"productType": "string",
"tags": [
"string"
],
"status": "active",
"featuredImage": {
"url": "https://pozy.ai/media/example-1.jpg",
"altText": "Hello from Pozy"
},
"images": [
{
"url": "https://pozy.ai/media/example-1.jpg",
"altText": "Hello from Pozy"
}
],
"options": [
{
"name": "Acme",
"values": [
"string"
]
}
],
"variants": [
{
"id": "6bfebd43ddc270f6d2c56fc5",
"title": "Launch day",
"sku": "string",
"barcode": "string",
"price": "string",
"compareAtPrice": "string",
"inventoryQuantity": 1,
"availableForSale": true,
"selectedOptions": [
{
"name": "Acme",
"value": "string"
}
]
}
],
"seo": {
"title": "Launch day",
"description": "A short description"
},
"totalInventory": 42,
"onlineStoreUrl": "https://pozy.ai/media/example-1.jpg",
"createdAt": "2026-10-02T09:00:00.000Z",
"updatedAt": "2026-10-02T09:00:00.000Z",
"publishedAt": "2026-10-02T09:00:00.000Z"
}
}Errors
Errors use one shape: { error, type, code, param?, details? }. The ones you are most likely to see here:
| 400 | invalid_request_error | A parameter or body field is missing or invalid. param names it. |
| 401 | authentication_error | The API key is missing, revoked or expired. |
| 403 | permission_error | The key is read-only, scoped to other profiles, or has this resource group disabled. |
| 404 | not_found | Nothing with that id exists in your workspace. |
| 429 | rate_limit_error | Too many requests this minute. Wait for Retry-After seconds. |
Every code is listed in Errors.