Skip to main content

Create Drafts in Bulk

POST 

/api/v2/listing-drafts/bulk

Create one create-purpose draft per product on a sales channel and return them, then pass the returned ids to Bulk Publish Drafts. Each draft is resolved and validated on creation.

Required scope: products:write

Grant this scope to your token under Settings → Developer → Personal Access Tokens.

Send either products[] (per-product category, template and provenance — typically what Resolve Draft Categories returned) or plain product_ids[], or both; a product in product_ids that has no products[] row uses the top-level sales_channel_category_id / sales_channel_product_template_id. A product that ends up with no category at all is resolved like a single draft: its override on the channel, else its product type's mapped category, with that category's default template.

Products the channel's catalog excludes do not fail the request — they are returned in skipped with a reason and the remaining drafts are still created.

Authentication: Requires Bearer token.

Fields:

  • sales_channel_id (required, integer)
  • products (required unless product_ids is sent, array, 1–500)
  • products[].product_id (required, integer)
  • products[].sales_channel_category_id (nullable, integer)
  • products[].sales_channel_product_template_id (nullable, integer)
  • products[].category_provenance (nullable, override | type_map | manual) — where that row's category came from; a supplied category without it is recorded as manual
  • product_ids (required unless products is sent, array of integers, 1–500)
  • sales_channel_category_id (nullable, integer) — fallback category for rows that do not set their own
  • sales_channel_product_template_id (nullable, integer) — fallback template
  • sales_channel_listing_profile_id (nullable, integer) — applied to every draft

The returned drafts are the compact form (no fields, field_overrides or resolved_values); read a draft to get those. skipped[] rows carry product_id, sku, name, reason.

Requires permission: listings.create

Request

Responses

Created

Response Headers
    Content-Type