Skip to content

Catalog Product — Copy ​

Duplicates an existing catalog product. Fires catalog.product.create.before / catalog.product.create.after so listeners (search index, cache flush) trigger on the copy.

Endpoint ​

EndpointMethod
/api/admin/catalog/products/{sourceId}/copyPOST

Path parameters ​

FieldTypeRequiredNotes
sourceIdintegeryesID of the product to duplicate.

Request body ​

Empty. Send an empty JSON object {} if your client requires a body.

Response ​

200 OK

FieldTypeNotes
idintegerID of the newly created copy.
sourceIdintegerID of the source product.
skustringGenerated SKU, always temporary-sku-<hex> — it does not derive from the source SKU.
typestringProduct type, matching the source.
namestring|nullSource name prefixed with Copy Of .
successbooleanAlways true on success. Failures come back as an error status, never as success: false.
messagestringTranslated confirmation.

The copy is created disabled (status: 0) with a null urlKey, so it is never live on the storefront by accident. Give it a real SKU, name, and URL key through Update before enabling it.

The response is a small summary, not a product payload — read the copy back with Product Detail using the returned id.

Errors ​

HTTPCause
401 UnauthorizedMissing or invalid admin Bearer token.
403 ForbiddenAdmin role lacks catalog.products.create.
404 Not FoundSource product not found.
422 Unprocessable EntitySource is a configurable variant (parent_id != null).
500 Internal Server ErrorUnderlying copy threw an exception.

What Gets Copied ​

Attribute values, images, categories, inventories, and customer-group prices all carry over, as do the type-specific structures — a configurable's variants, a bundle's options, a grouped product's links.

Two things do not: the SKU and URL key are regenerated, and the copy starts disabled.

Variants Cannot Be Copied ​

Passing a configurable variant id returns 422 with Variants of configurable products cannot be copied. Copy the parent configurable product instead. Copying the parent brings its variants along, which is what you want in nearly every case.

Released under the MIT License.