curl --request PATCH \
--url https://api.cubbo.com/v1/products/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Widget Pro Black v2",
"description": "<p>Updated description.</p>",
"price": 109.99
}
'{
"id": 12345,
"name": "Widget Pro Black v2",
"billing_name": null,
"description": "<p>Updated description.</p>",
"has_imei": false,
"requires_unit_code": false,
"allow_unit_code_substitution": false,
"personalized_units": false,
"is_fragile": false,
"is_kit": false,
"bar_code": "7501234567890",
"is_dropshipping": false,
"has_expiration": true,
"freshness": 180,
"stock": {
"IN_WAREHOUSE": 250,
"AVAILABLE": 188,
"AVAILABLE_NOT_EXTERNALLY_CONFIRMED": 0,
"AVAILABLE_EXTERNALLY_CONFIRMED": 188,
"UNAVAILABLE": 22,
"RECEPTION-INCOMING-SELL-AHEAD": 0,
"INCOMING-SELL-AHEAD": 0,
"RESERVED-RECEPTION-INCOMING-SELL-AHEAD": 0,
"RESERVED-INCOMING-SELL-AHEAD": 0,
"DAMAGED": 2,
"RECEPTION": 0,
"OUT_OF_STOCK": 0,
"RESERVED": 40,
"RESERVED_BY_ORDERS": 40,
"RESERVED_BY_RETURNS": 0,
"ACTIVE": 188,
"RESERVED-WITHOUT-SELL-AHEAD": 40,
"EXPIRED": 20,
"HOLDED": 20,
"BUFFER_STOCK": 0
},
"full_name": "Widget Pro Black v2",
"is_scannable": true,
"product_image_path": null,
"price": "109.99",
"weight": 0.75,
"weight_unit": "kg",
"origin": "NATIONAL",
"buffer_stock": null,
"is_packageless": false,
"length": "12.5",
"width": "7.0",
"height": "3.0",
"dimension_unit": "cm",
"is_discarded": false,
"product_codes": [
{
"id": 9001,
"product_id": 12345,
"sku": "SKU-RED-M",
"created_at": "2026-10-12T15:04:05.000Z",
"updated_at": "2026-10-12T15:04:05.000Z"
}
],
"kit_childs": [],
"store": {
"id": 1234,
"name": "Example Store"
},
"ncm_configuration": null
}Inventory
Update a product
Updates the editable fields of one product: name, description, price, image, barcode, SKUs, weight and dimensions. Only the fields you send are changed; everything else is kept.
- SKU and barcode changes are blocked once the product has stock in the warehouse (any unit, in any status). The whole request is rejected with 422 in that case, even if it also carries other fields.
skusreplaces the product’s full SKU list: existing SKUs are removed and the ones you send are added. An empty array is treated as “no change”. The new SKUs must not be in use by another product of the store.bar_codemust be unique in the store and must not match a SKU of another product.weightis stored in kilograms; sendweight_unit: "g"(or"gr") to send grams and have the value converted.weightmust be greater than 0.length,widthandheightmust be between 0.01 and 999999.99.- Concurrent updates of the same product are serialized; a second simultaneous update receives
202 Accepted. - The response is the full product in the same format the Cubbo app uses (see
ProductDetailed).
PATCH
/
products
/
{id}
curl --request PATCH \
--url https://api.cubbo.com/v1/products/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Widget Pro Black v2",
"description": "<p>Updated description.</p>",
"price": 109.99
}
'{
"id": 12345,
"name": "Widget Pro Black v2",
"billing_name": null,
"description": "<p>Updated description.</p>",
"has_imei": false,
"requires_unit_code": false,
"allow_unit_code_substitution": false,
"personalized_units": false,
"is_fragile": false,
"is_kit": false,
"bar_code": "7501234567890",
"is_dropshipping": false,
"has_expiration": true,
"freshness": 180,
"stock": {
"IN_WAREHOUSE": 250,
"AVAILABLE": 188,
"AVAILABLE_NOT_EXTERNALLY_CONFIRMED": 0,
"AVAILABLE_EXTERNALLY_CONFIRMED": 188,
"UNAVAILABLE": 22,
"RECEPTION-INCOMING-SELL-AHEAD": 0,
"INCOMING-SELL-AHEAD": 0,
"RESERVED-RECEPTION-INCOMING-SELL-AHEAD": 0,
"RESERVED-INCOMING-SELL-AHEAD": 0,
"DAMAGED": 2,
"RECEPTION": 0,
"OUT_OF_STOCK": 0,
"RESERVED": 40,
"RESERVED_BY_ORDERS": 40,
"RESERVED_BY_RETURNS": 0,
"ACTIVE": 188,
"RESERVED-WITHOUT-SELL-AHEAD": 40,
"EXPIRED": 20,
"HOLDED": 20,
"BUFFER_STOCK": 0
},
"full_name": "Widget Pro Black v2",
"is_scannable": true,
"product_image_path": null,
"price": "109.99",
"weight": 0.75,
"weight_unit": "kg",
"origin": "NATIONAL",
"buffer_stock": null,
"is_packageless": false,
"length": "12.5",
"width": "7.0",
"height": "3.0",
"dimension_unit": "cm",
"is_discarded": false,
"product_codes": [
{
"id": 9001,
"product_id": 12345,
"sku": "SKU-RED-M",
"created_at": "2026-10-12T15:04:05.000Z",
"updated_at": "2026-10-12T15:04:05.000Z"
}
],
"kit_childs": [],
"store": {
"id": 1234,
"name": "Example Store"
},
"ncm_configuration": null
}Authorizations
Body
application/json
Body of PATCH /products/{id}. Every field is optional; only the fields sent are changed.
Response
Product updated.
Full product representation, as used by the Cubbo app. Returned by PATCH /products/{id} and, as an array, by POST /products with variants.