Update a product
PUT/v1/products/{id}
scope products.write
Partial: keys you omit are left alone. Send attributes only when you want to replace the whole set.
Request body#
| Field | Type | Required | Description |
|---|---|---|---|
title | string | optional | A PARTIAL update: send only what changes. Anything you omit keeps its current value — this is not a replace. |
price | object | optional | Same shape as on create. |
price. | integer | optional | Minor units. For price alone, PATCH /v1/products/{id}/price is the cheaper call. |
attributes | array | optional | Sending this REPLACES every attribute on the listing, so send the complete set, not a delta. Omit the key to leave them untouched. Same {field_id, option_id, value} entries as on create. |
description | string | optional | Every other field from POST /v1/products — description, category_id, stock, sku, ean, gtin, mpn, shipping, images, city_id, county_id — is accepted here with the same meaning, and each is optional. |
images | array | optional | Like attributes: sending it REPLACES every image on the listing (an identical list changes nothing); omit the key to leave them untouched. |
Example
{
"title": "Bicicleta MTB Hardtail 29 actualizata",
"price": {
"amount": 199900
}
}Response#
Example
{
"id": 237224,
"external_id": "ERP-1001",
"sku": "MTB-29-001",
"gtin": null,
"mpn": null,
"ean": null,
"title": "Bicicleta MTB Hardtail 29 inch",
"description": "A hardtail mountain bike in very good condition, barely used.",
"category_id": 4291,
"status": "active",
"is_reviewed": true,
"price": {
"amount": 249900,
"currency": "RON",
"negotiable": true
},
"stock": 4,
"shipping": {
"ship_with_us": true,
"free_shipping": false,
"shipping_class": "bike",
"parcel_tier": "large",
"weight_kg": 14.5,
"width_cm": 80,
"height_cm": 120,
"length_cm": 180
},
"group_id": null,
"images": [
{
"id": 108876841,
"position": 0,
"path": "files/237224/mtb-front.jpg",
"source_url": null
}
],
"attributes": [
{
"field_id": 32,
"option_id": 226,
"value": null
}
],
"created_at": "2026-09-01T08:14:22Z",
"updated_at": "2026-09-11T16:02:51Z"
}