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 with 422 instead 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 listed but 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.

On this page