Publish a product
Create a product, give it images, publish it to a channel and know when it's really live.
The whole loop is two writes and one wait.
1. Create the product
curl -X POST https://api.nembol.com/rest/v1/products \
-H "Authorization: Bearer $NEMBOL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: create-VDJ-001" \
-d '{
"title": "Vintage denim jacket",
"description": "<p>Classic 90s denim jacket.</p>",
"brand": "Acme",
"price": "49.90", "quantity": 3, "sku": "VDJ-M-001",
"images": [{"url": "https://your-cdn.com/jacket.jpg"}]
}'The response is the product, synchronously — grab id and the image ids.
2. Publish it
curl -X POST https://api.nembol.com/rest/v1/listings \
-H "Authorization: Bearer $NEMBOL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: publish-VDJ-001-shopify" \
-d '{"product_id": "prod_…", "channel_account_id": "chac_…"}'202 with status: "ongoing" — publication runs through Nembol's channel
workers. Get the channel_account_id from GET /channel_accounts.
3. Know when it's live
Subscribe to the listing.status_changed webhook
(best), or poll GET /listings/{id} until status is listed — you'll get
id_on_channel and url_on_channel. On a healthy channel this takes
seconds, not minutes.
If the channel rejects it you get status: "error" and the channel's own
message in issues[] — see Handle errors.
Gotchas
- Images first. Channels reject imageless listings — publishing without
images fails upfront with
photo_required_for_channel. - Variants must be a full matrix. With
options(e.g. Color × Size), every combination needs a variant — channels generate the whole matrix, so a sparse set is rejected with422instead of publishing broken variants. - The channel price can differ from yours. Sellers can configure per-channel price rules in Nembol (percentage or fixed adjustment) — don't treat a different price on the channel as a bug.
- WooCommerce may publish as draft. If the seller set product status:
draft in their Nembol channel settings, the listing is
listedbut the product URL is not public until they publish it in WooCommerce. - Publishing is idempotent per
(product_id, channel_account_id): re-POSTing returns the existing listing. If the listing errored, re-POST retries the publication.
Last updated on July 30, 2026
Need help?
The API is in private beta — email us and a human replies, usually within one business day.