Load your products
Create and update products one by one, in batches or with a queued import.
Send up to 100 products per call to POST /products/batch. Each product is checked and written on its own: an invalid one comes back as invalid with its errors, the others are written.
curl -X POST https://api-catalog.nucleoplatform.com/api/catalog/v1/products/batch \
-H "Authorization: Bearer $NUCLEO_CATALOG_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: load-2026-10-14-part-1" \
-d '{
"products": [
{
"sku": "TEE-001",
"external_id": "erp-778",
"title": "Basic tee",
"description": "<p>Organic cotton.</p>",
"status": "active",
"brand": "Acme",
"category": "Clothing > Tops",
"attributes": { "color": "red", "fit": "regular" },
"translations": { "it": { "title": "Maglietta basic" } },
"variants": [
{
"sku": "TEE-001-M",
"barcode": "8001234567890",
"size": "M",
"prices": [{ "price_list": "eu", "price": 19.9, "sale_price": 15 }],
"stock": [{ "location": "main", "available": 7 }]
}
]
}
]
}'The answer has one result per product, in the order you sent them:
{
"data": [
{ "index": 0, "sku": "TEE-001", "product_id": 1201, "status": "created", "errors": [], "notes": [] }
],
"summary": { "created": 1, "updated": 0, "partial": 0, "skipped": 0, "failed": 0, "invalid": 0 }
}partial: some variants could not be written (seeerrors), the rest was.skipped: your key's field rule left nothing to write.notesexplains fields that were not written — for example a field another connected system owns.
More than 100 products? Queue them with POST /imports (up to 5,000 per call). The answer is 202 with the import id; follow it with GET /imports/{id} until status is done, partial or failed. Products are written in groups of 100 and the results fill in as they go. Usually an import starts within a minute.
Good to know
- Only the fields you send are written. An absent or empty field never clears a value in Nucleo.
- Variants, prices and stock are added or updated, never removed by omission. To delete a variant use
DELETE /products/{product}/variants/{variant}; to delete a product,DELETE /products/{product}(it goes to Nucleo's trash, restorable for 30 days). external_idis your own id. Nucleo remembers it for your key: later you can send it instead ofskuto find the product, and it comes back in every read.image_urlsare linked as they are. To have Nucleo download and store an image, usePOST /products/{product}/imageswith itsurl(or upload the file).- One request can carry up to 20 MB.