Guides and Examples
...
Quotes
Bundles
32 min
bundles bundle products are composite products that contain child components bundled items, required options, and optional add ons when you add a bundle to a quote, the pricing engine automatically expands the bundle by including its bundled and required items optional add ons are specified explicitly via the addons array use this guide when you need to create quotes that include bundle products for simple standalone products, see the docid\ iupfrldiwgoehemeyadpb guide for advanced scenarios such as nested bundles, dynamic product options, and per addon overrides, see docid\ cwj ggpeevww9xgqwrwpe all examples below use the preview endpoint ( post /cpq/quotes\ preview ) to persist the quote, replace the url with https //api nue io/cpq/quotes the request body is identical for both modes authentication const myheaders = new headers(); myheaders append("nue api key", "your api key here"); myheaders append("content type", "application/json"); example products the examples in this guide reference the following products from the nue test catalog bundles bundle sku uom list price description nue rise edition nue rise edition user/month $0 00 starter bundle with bundled options nue gem edition nue gem edition user/month $0 00 mid tier bundle with required + bundled options bundle components component sku uom list price option type nue platform nue platform user/month $15 00 bundled (auto included) nue on salesforce nue on salesforce user/month $29 90 bundled (auto included) cpq module cpq module user/month $10 00 required (auto included) billing module billing module user/month $12 00 required (auto included) tax manager tax manager user/month $8 00 optional (specify in addons) premium support premium support user/month $5 00 optional (specify in addons) standalone products product sku uom list price revenue model implementation service implementation service hour $250 00 one time key behaviors behavior details auto expansion bundled and required items are automatically included when you add a bundle to the quote you do not need to list them in the request optional add ons optional items must be explicitly specified in the addons array on the bundle product entry response nesting bundle children appear in the childrenlineitems array of the parent line item, not as top level entries in quotelineitems $0 bundled items bundled items often have a $0 list price (included in the bundle price) they still appear as children in the response linktobundlequantity when a component is configured with linktobundlequantity , its quantity automatically matches the bundle parent's quantity quantity override you can override the default quantity of an add on by specifying quantity in the addons entry, unless the component is linked to the bundle quantity invalid add ons specifying a product in addons that is not a valid option for the bundle returns a warning and the invalid add on is ignored use case 1 basic bundle add a bundle product by sku the pricing engine automatically expands the bundle and includes all bundled options as children scenario add the nue rise edition bundle with 10 users the bundle auto populates its bundled components (nue platform and nue on salesforce) request body { "opportunityid" "006xx000001abc123", "name" "rise edition quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue rise edition", "uom" "user/month", "quantity" 10 } ] } curl curl x post 'https //api nue io/cpq/quotes\ preview' \\ h 'nue api key your api key here' \\ h 'content type application/json' \\ d '{ "opportunityid" "006xx000001abc123", "name" "rise edition quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue rise edition", "uom" "user/month", "quantity" 10 } ] }' javascript fetch const myheaders = new headers(); myheaders append("nue api key", "your api key here"); myheaders append("content type", "application/json"); const quotedata = { opportunityid "006xx000001abc123", name "rise edition quote", subscriptionstartdate "2026 01 01", subscriptionenddate "2027 01 01", subscriptiontermdimension "month", subscriptionterm 12, products \[ { productsku "nue rise edition", uom "user/month", quantity 10 } ] }; fetch('https //api nue io/cpq/quotes\ preview', { method 'post', headers myheaders, body json stringify(quotedata) }) then(response => response json()) then(result => { const bundle = result data quotelineitems\[0]; console log(`bundle ${bundle product sku}, qty=${bundle quantity}`); console log(`children ${bundle childrenlineitems length}`); bundle childrenlineitems foreach(child => { console log(` ${child product sku} $${child totalprice}`); }); }) catch(error => console log('error ', error)); expected response { "status" "succeed", "data" { "quote" { "id" null, "name" "rise edition quote", "totalamount" 0 00 }, "quotelineitems" \[ { "product" { "sku" "nue rise edition", "name" "nue rise edition" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "childrenlineitems" \[ { "product" { "sku" "nue platform", "name" "nue platform" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "nue on salesforce", "name" "nue on salesforce" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" } ] } ] }, "warnings" \[] } the bundled items are automatically included as children their list price is $0 00 because they are included in the bundle the children inherit the bundle's quantity use case 2 bundle with required items some bundles include both bundled options and required options both types are auto expanded you do not need to list them in the request scenario add the nue gem edition bundle it auto populates bundled items (nue platform, nue on salesforce) and required items (cpq module, billing module) request body { "opportunityid" "006xx000001abc123", "name" "gem edition quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue gem edition", "uom" "user/month", "quantity" 10 } ] } curl curl x post 'https //api nue io/cpq/quotes\ preview' \\ h 'nue api key your api key here' \\ h 'content type application/json' \\ d '{ "opportunityid" "006xx000001abc123", "name" "gem edition quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue gem edition", "uom" "user/month", "quantity" 10 } ] }' javascript fetch const quotedata = { opportunityid "006xx000001abc123", name "gem edition quote", subscriptionstartdate "2026 01 01", subscriptionenddate "2027 01 01", subscriptiontermdimension "month", subscriptionterm 12, products \[ { productsku "nue gem edition", uom "user/month", quantity 10 } ] }; fetch('https //api nue io/cpq/quotes\ preview', { method 'post', headers myheaders, body json stringify(quotedata) }) then(response => response json()) then(result => { const bundle = result data quotelineitems\[0]; console log(`bundle ${bundle product sku}`); console log(`children ${bundle childrenlineitems length}`); // 4 bundle childrenlineitems foreach(child => { console log(` ${child product sku} (${child optiontype}) $${child totalprice}`); }); }) catch(error => console log('error ', error)); expected response { "status" "succeed", "data" { "quote" { "id" null, "name" "gem edition quote", "totalamount" 2640 00 }, "quotelineitems" \[ { "product" { "sku" "nue gem edition", "name" "nue gem edition" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "childrenlineitems" \[ { "product" { "sku" "nue platform", "name" "nue platform" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "nue on salesforce", "name" "nue on salesforce" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "cpq module", "name" "cpq module" }, "quantity" 10, "listprice" 10 00, "listtotalprice" 1200 00, "totalprice" 1200 00, "optiontype" "required" }, { "product" { "sku" "billing module", "name" "billing module" }, "quantity" 10, "listprice" 12 00, "listtotalprice" 1440 00, "totalprice" 1440 00, "optiontype" "required" } ] } ] }, "warnings" \[] } bundled items have $0 pricing (included in bundle) required items carry their own pricing cpq module at $10 x 10 x 12 = $1,200 and billing module at $12 x 10 x 12 = $1,440 use case 3 optional add ons optional bundle components are not auto included you must specify them in the addons array on the bundle product entry scenario add the nue gem edition bundle with an optional tax manager add on request body { "opportunityid" "006xx000001abc123", "name" "gem edition with add on", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue gem edition", "uom" "user/month", "quantity" 10, "addons" \[ { "productsku" "tax manager", "quantity" 1 } ] } ] } curl curl x post 'https //api nue io/cpq/quotes\ preview' \\ h 'nue api key your api key here' \\ h 'content type application/json' \\ d '{ "opportunityid" "006xx000001abc123", "name" "gem edition with add on", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue gem edition", "uom" "user/month", "quantity" 10, "addons" \[ { "productsku" "tax manager", "quantity" 1 } ] } ] }' javascript fetch const quotedata = { opportunityid "006xx000001abc123", name "gem edition with add on", subscriptionstartdate "2026 01 01", subscriptionenddate "2027 01 01", subscriptiontermdimension "month", subscriptionterm 12, products \[ { productsku "nue gem edition", uom "user/month", quantity 10, addons \[ { productsku "tax manager", quantity 1 } ] } ] }; fetch('https //api nue io/cpq/quotes\ preview', { method 'post', headers myheaders, body json stringify(quotedata) }) then(response => response json()) then(result => { const bundle = result data quotelineitems\[0]; console log(`bundle children ${bundle childrenlineitems length}`); // 5 bundle childrenlineitems foreach(child => { console log(` ${child product sku} (${child optiontype}) $${child totalprice}`); }); }) catch(error => console log('error ', error)); expected response { "status" "succeed", "data" { "quote" { "id" null, "name" "gem edition with add on", "totalamount" 2736 00 }, "quotelineitems" \[ { "product" { "sku" "nue gem edition", "name" "nue gem edition" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "childrenlineitems" \[ { "product" { "sku" "nue platform", "name" "nue platform" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "nue on salesforce", "name" "nue on salesforce" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "cpq module", "name" "cpq module" }, "quantity" 10, "listprice" 10 00, "listtotalprice" 1200 00, "totalprice" 1200 00, "optiontype" "required" }, { "product" { "sku" "billing module", "name" "billing module" }, "quantity" 10, "listprice" 12 00, "listtotalprice" 1440 00, "totalprice" 1440 00, "optiontype" "required" }, { "product" { "sku" "tax manager", "name" "tax manager" }, "quantity" 1, "listprice" 8 00, "listtotalprice" 96 00, "totalprice" 96 00, "optiontype" "optional" } ] } ] }, "warnings" \[] } the tax manager add on appears as a fifth child with optiontype "optional" its quantity is 1 as specified in the addons array pricing $8 00 x 1 x 12 = $96 00 use case 4 invalid add on if you specify a product in addons that is not a valid option for the bundle, the api returns a warning and ignores the invalid add on the rest of the bundle processes normally scenario attempt to add implementation service (a standalone product) as an add on to the nue rise edition bundle request body { "opportunityid" "006xx000001abc123", "name" "invalid add on quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue rise edition", "uom" "user/month", "quantity" 10, "addons" \[ { "productsku" "implementation service", "quantity" 1 } ] } ] } curl curl x post 'https //api nue io/cpq/quotes\ preview' \\ h 'nue api key your api key here' \\ h 'content type application/json' \\ d '{ "opportunityid" "006xx000001abc123", "name" "invalid add on quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue rise edition", "uom" "user/month", "quantity" 10, "addons" \[ { "productsku" "implementation service", "quantity" 1 } ] } ] }' javascript fetch const quotedata = { opportunityid "006xx000001abc123", name "invalid add on quote", subscriptionstartdate "2026 01 01", subscriptionenddate "2027 01 01", subscriptiontermdimension "month", subscriptionterm 12, products \[ { productsku "nue rise edition", uom "user/month", quantity 10, addons \[ { productsku "implementation service", quantity 1 } ] } ] }; fetch('https //api nue io/cpq/quotes\ preview', { method 'post', headers myheaders, body json stringify(quotedata) }) then(response => response json()) then(result => { if (result warnings && result warnings length > 0) { console log('warnings '); result warnings foreach(w => console log(` ${w}`)); } const bundle = result data quotelineitems\[0]; console log(`children ${bundle childrenlineitems length}`); // 2 (only valid bundled items) }) catch(error => console log('error ', error)); expected response { "status" "succeed", "data" { "quote" { "id" null, "name" "invalid add on quote", "totalamount" 0 00 }, "quotelineitems" \[ { "product" { "sku" "nue rise edition", "name" "nue rise edition" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "childrenlineitems" \[ { "product" { "sku" "nue platform", "name" "nue platform" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "nue on salesforce", "name" "nue on salesforce" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" } ] } ] }, "warnings" \[ "product 'implementation service' is not a valid option for bundle 'nue rise edition' the add on was ignored " ] } the warnings array contains a message about the invalid add on the bundle still processes normally with its valid bundled items use case 5 quantity mechanics linktobundlequantity when a bundle component is configured with linktobundlequantity , its quantity automatically matches the parent bundle's quantity you do not need to specify the add on quantity it is derived from the bundle scenario add the nue gem edition bundle with quantity 3 the tax manager add on is configured with linktobundlequantity , so its quantity automatically becomes 3 request body { "opportunityid" "006xx000001abc123", "name" "linktobundlequantity quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue gem edition", "uom" "user/month", "quantity" 3, "addons" \[ { "productsku" "tax manager" } ] } ] } curl curl x post 'https //api nue io/cpq/quotes\ preview' \\ h 'nue api key your api key here' \\ h 'content type application/json' \\ d '{ "opportunityid" "006xx000001abc123", "name" "linktobundlequantity quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue gem edition", "uom" "user/month", "quantity" 3, "addons" \[ { "productsku" "tax manager" } ] } ] }' javascript fetch const quotedata = { opportunityid "006xx000001abc123", name "linktobundlequantity quote", subscriptionstartdate "2026 01 01", subscriptionenddate "2027 01 01", subscriptiontermdimension "month", subscriptionterm 12, products \[ { productsku "nue gem edition", uom "user/month", quantity 3, addons \[ { productsku "tax manager" } ] } ] }; fetch('https //api nue io/cpq/quotes\ preview', { method 'post', headers myheaders, body json stringify(quotedata) }) then(response => response json()) then(result => { const bundle = result data quotelineitems\[0]; console log(`bundle qty ${bundle quantity}`); // 3 bundle childrenlineitems foreach(child => { console log(` ${child product sku} qty=${child quantity}`); // all qty=3 }); }) catch(error => console log('error ', error)); expected response { "status" "succeed", "data" { "quote" { "id" null, "name" "linktobundlequantity quote", "totalamount" 1080 00 }, "quotelineitems" \[ { "product" { "sku" "nue gem edition", "name" "nue gem edition" }, "quantity" 3, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "childrenlineitems" \[ { "product" { "sku" "nue platform", "name" "nue platform" }, "quantity" 3, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "nue on salesforce", "name" "nue on salesforce" }, "quantity" 3, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "cpq module", "name" "cpq module" }, "quantity" 3, "listprice" 10 00, "listtotalprice" 360 00, "totalprice" 360 00, "optiontype" "required" }, { "product" { "sku" "billing module", "name" "billing module" }, "quantity" 3, "listprice" 12 00, "listtotalprice" 432 00, "totalprice" 432 00, "optiontype" "required" }, { "product" { "sku" "tax manager", "name" "tax manager" }, "quantity" 3, "listprice" 8 00, "listtotalprice" 288 00, "totalprice" 288 00, "optiontype" "optional" } ] } ] }, "warnings" \[] } all children have quantity 3, matching the bundle parent the tax manager was not given an explicit quantity in the request it inherited the bundle quantity via linktobundlequantity use case 6 quantity override on add on when an add on is not linked to the bundle quantity, you can specify an independent quantity scenario add the nue gem edition bundle with 10 users, but only 5 premium support add ons request body { "opportunityid" "006xx000001abc123", "name" "add on quantity override quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue gem edition", "uom" "user/month", "quantity" 10, "addons" \[ { "productsku" "premium support", "quantity" 5 } ] } ] } curl curl x post 'https //api nue io/cpq/quotes\ preview' \\ h 'nue api key your api key here' \\ h 'content type application/json' \\ d '{ "opportunityid" "006xx000001abc123", "name" "add on quantity override quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue gem edition", "uom" "user/month", "quantity" 10, "addons" \[ { "productsku" "premium support", "quantity" 5 } ] } ] }' javascript fetch const quotedata = { opportunityid "006xx000001abc123", name "add on quantity override quote", subscriptionstartdate "2026 01 01", subscriptionenddate "2027 01 01", subscriptiontermdimension "month", subscriptionterm 12, products \[ { productsku "nue gem edition", uom "user/month", quantity 10, addons \[ { productsku "premium support", quantity 5 } ] } ] }; fetch('https //api nue io/cpq/quotes\ preview', { method 'post', headers myheaders, body json stringify(quotedata) }) then(response => response json()) then(result => { const bundle = result data quotelineitems\[0]; console log(`bundle qty ${bundle quantity}`); // 10 bundle childrenlineitems foreach(child => { console log(` ${child product sku} qty=${child quantity}`); }); // bundled/required items qty=10 (linked to bundle) // premium support qty=5 (explicitly overridden) }) catch(error => console log('error ', error)); expected response { "status" "succeed", "data" { "quote" { "id" null, "name" "add on quantity override quote", "totalamount" 2940 00 }, "quotelineitems" \[ { "product" { "sku" "nue gem edition", "name" "nue gem edition" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "childrenlineitems" \[ { "product" { "sku" "nue platform", "name" "nue platform" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "nue on salesforce", "name" "nue on salesforce" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "cpq module", "name" "cpq module" }, "quantity" 10, "listprice" 10 00, "listtotalprice" 1200 00, "totalprice" 1200 00, "optiontype" "required" }, { "product" { "sku" "billing module", "name" "billing module" }, "quantity" 10, "listprice" 12 00, "listtotalprice" 1440 00, "totalprice" 1440 00, "optiontype" "required" }, { "product" { "sku" "premium support", "name" "premium support" }, "quantity" 5, "listprice" 5 00, "listtotalprice" 300 00, "totalprice" 300 00, "optiontype" "optional" } ] } ] }, "warnings" \[] } the bundle has quantity 10, and the bundled/required items inherit that quantity the premium support add on has quantity 5 as explicitly specified pricing $5 00 x 5 x 12 = $300 00 use case 7 bundle + standalone in same quote a quote can contain both bundle products and standalone products each is processed independently scenario add the nue gem edition bundle with an optional add on, plus a standalone implementation service request body { "opportunityid" "006xx000001abc123", "name" "bundle + standalone quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue gem edition", "uom" "user/month", "quantity" 10, "addons" \[ { "productsku" "tax manager", "quantity" 10 } ] }, { "productsku" "implementation service", "uom" "hour", "quantity" 20 } ] } curl curl x post 'https //api nue io/cpq/quotes\ preview' \\ h 'nue api key your api key here' \\ h 'content type application/json' \\ d '{ "opportunityid" "006xx000001abc123", "name" "bundle + standalone quote", "subscriptionstartdate" "2026 01 01", "subscriptionenddate" "2027 01 01", "subscriptiontermdimension" "month", "subscriptionterm" 12, "products" \[ { "productsku" "nue gem edition", "uom" "user/month", "quantity" 10, "addons" \[ { "productsku" "tax manager", "quantity" 10 } ] }, { "productsku" "implementation service", "uom" "hour", "quantity" 20 } ] }' javascript fetch const quotedata = { opportunityid "006xx000001abc123", name "bundle + standalone quote", subscriptionstartdate "2026 01 01", subscriptionenddate "2027 01 01", subscriptiontermdimension "month", subscriptionterm 12, products \[ { productsku "nue gem edition", uom "user/month", quantity 10, addons \[ { productsku "tax manager", quantity 10 } ] }, { productsku "implementation service", uom "hour", quantity 20 } ] }; fetch('https //api nue io/cpq/quotes\ preview', { method 'post', headers myheaders, body json stringify(quotedata) }) then(response => response json()) then(result => { console log(`total amount $${result data quote totalamount}`); console log(`top level items ${result data quotelineitems length}`); // 2 result data quotelineitems foreach(item => { console log(`${item product sku} $${item totalprice}`); if (item childrenlineitems && item childrenlineitems length > 0) { item childrenlineitems foreach(child => { console log(` └─ ${child product sku} (${child optiontype}) $${child totalprice}`); }); } }); }) catch(error => console log('error ', error)); expected response { "status" "succeed", "data" { "quote" { "id" null, "name" "bundle + standalone quote", "totalamount" 8600 00 }, "quotelineitems" \[ { "product" { "sku" "nue gem edition", "name" "nue gem edition" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "childrenlineitems" \[ { "product" { "sku" "nue platform", "name" "nue platform" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "nue on salesforce", "name" "nue on salesforce" }, "quantity" 10, "listprice" 0 00, "listtotalprice" 0 00, "totalprice" 0 00, "optiontype" "bundled" }, { "product" { "sku" "cpq module", "name" "cpq module" }, "quantity" 10, "listprice" 10 00, "listtotalprice" 1200 00, "totalprice" 1200 00, "optiontype" "required" }, { "product" { "sku" "billing module", "name" "billing module" }, "quantity" 10, "listprice" 12 00, "listtotalprice" 1440 00, "totalprice" 1440 00, "optiontype" "required" }, { "product" { "sku" "tax manager", "name" "tax manager" }, "quantity" 10, "listprice" 8 00, "listtotalprice" 960 00, "totalprice" 960 00, "optiontype" "optional" } ] }, { "product" { "sku" "implementation service", "name" "implementation service" }, "quantity" 20, "listprice" 250 00, "listtotalprice" 5000 00, "totalprice" 5000 00, "revenuemodel" "one time", "childrenlineitems" \[] } ] }, "warnings" \[] } the quotelineitems array contains two top level entries the bundle (with 5 children) and the standalone product the bundle children total $3,600 (required + optional), and the standalone implementation service is $5,000 total $8,600 00 response structure bundle products have a nested structure the bundle parent is a top level entry in quotelineitems , and its components appear in the childrenlineitems array { "data" { "quotelineitems" \[ { "product" { "sku" "nue gem edition", "name" "nue gem edition" }, "quantity" 10, "totalprice" 0 00, "childrenlineitems" \[ { "product" { "sku" "nue platform", "name" "nue platform" }, "optiontype" "bundled", "totalprice" 0 00 }, { "product" { "sku" "cpq module", "name" "cpq module" }, "optiontype" "required", "totalprice" 1200 00 }, { "product" { "sku" "tax manager", "name" "tax manager" }, "optiontype" "optional", "totalprice" 96 00 } ] } ] } } each child line item includes an optiontype field option type description auto included bundled included in the bundle at $0 yes required required component with its own pricing yes optional optional add on, must be specified in addons no summary use case bundle key concept 1 basic bundle nue rise edition auto expansion of bundled items 2 required items nue gem edition required + bundled auto expand 3 optional add ons nue gem edition + tax manager addons array for optional items 4 invalid add on nue rise edition + invalid warning returned, add on ignored 5 linktobundlequantity nue gem edition qty=3 children inherit parent quantity 6 quantity override nue gem edition + premium support qty=5 independent add on quantity 7 bundle + standalone nue gem edition + implementation service mixed product types in one quote for advanced bundle scenarios including nested bundles, dynamic product options, and per addon overrides, see docid\ cwj ggpeevww9xgqwrwpe