Integration API · Catalog sync
Update part of a product
PATCHhttps://{store}/api/v1/integrations/catalog/products/{external_id}
Changes only the fields you send, for example stock and price from an ERP. The product must already exist for this key (create it with PUT first). For a product with variants send the whole variants list.
To take a product off sale send status draft: products are hidden, never deleted, because orders keep referring to them.
Integration key with the
catalog:write ability: Authorization: Bearer {key}.
Path parameters
external_idstringrequiredYour product id.
Request body application/json
namestringProduct name.
skustringSKU of the product’s variant.
priceintegerPrice in minor units (599900 = 5 999.00).
quantityintegerStock.
descriptionstringPlain-text description.
statusstringdraft or published.
draftpublished
image_urlstringPublic https URL of the main image.
category_external_idsarray of stringsYour category ids; replaces the links.
tag_external_idsarray of stringsYour tag ids; replaces the links.
attributesobjectCharacteristics by name, such as {"Матеріал": ["Бавовна", "Льон"], "Вага": "180 г", "Водонепроникний": true}; null removes one, names not sent stay. For a store on the one attribute model; elsewhere tags carry characteristics.
variantsarray of objectsUp to 100 variants: sku (required), price, quantity and options, an object of option name → value such as {"Колір": "Чорний", "Розмір": "M"}. When present, the top-level sku, price and quantity are not used.
Example
{
"price": 549900,
"quantity": 18
}
Responses
200The updated product.
{
"external_id": "erp-10045",
"data": {
"id": 12,
"name": "Навушники Sonar ANC повнорозмірні",
"description": "Активне шумозаглушення, 40 годин роботи.",
"sku": "SONAR-ANC-BLK",
"thumbnail_url": "https://your-store.storeforma.shop/media/12/sonar-anc.webp",
"quantity": 24,
"currency_code": "UAH",
"min_price": 599900,
"max_price": 599900,
"weight": 0.32,
"length": null,
"height": null,
"width": null,
"has_offers": false,
"is_archived": false,
"category_id": 7,
"attributes": [
{
"handle": "kolir",
"name": "Колір",
"type": "swatch",
"unit": null,
"group": null,
"variant_axis": false,
"values": [
"Чорний"
]
},
{
"handle": "vaga",
"name": "Вага",
"type": "number",
"unit": "г",
"group": "Загальні",
"variant_axis": false,
"values": [
"320 г"
]
}
],
"input_options": [
{
"key": "hraviiuvannia",
"label": "Гравіювання",
"type": "text",
"required": false,
"price": 10000,
"max": 30,
"choices": []
}
],
"created_at": "2026-10-01 10:12:00",
"updated_at": "2026-10-12 08:40:00"
}
} 401Missing, unknown or revoked key.
{
"code": "unauthenticated",
"message": "Integration key is inactive.",
"field": null
} 403The key lacks catalog:write, or the store’s plan has no API access.
{
"code": "forbidden",
"message": "Integration key cannot catalog:write.",
"field": null
} 422A field is invalid; field names it.
{
"code": "validation_error",
"message": "name is required.",
"field": "name"
} 429More than 60 requests a minute for this key. Wait Retry-After seconds.
{
"code": "rate_limited",
"message": "Too many integration requests.",
"field": null
}