An Item bundle is a container for a collection of items with a quantity that applies separately to each item. Group items that are often sold together into bundles so they can be added all at once to a transaction. For example, you sell a Deluxe Fountain that includes 2 pumps, 1 fountain, lighting, and installation. Here, the bundle is the Deluxe Fountain; the bundle items are pumps, fountain, lighting, and installation. Now, instead of adding each individual item that comprises a Deluxe Fountain into an invoice or sales receipt, you can simply add the Deluxe Fountain Item bundle. This eliminates the chance of errors when each item is entered and also provides a convenient framework for including a package discount.
What you need to know:
Item.type
attribute set to Group
.Item.type = Category
).GroupItemLine
line type.The table below outlines support for various Item bundle operations.
Create | Update | Deactivate | Read and Query | |
QuickBooks Online UI | √ | √ | √ | √ |
QuickBooks Online API | not supported | not supported | not supported | √ |
Create Item bundles from the QuickBooks Online UI, only. Creating them via the QuickBooks Online API is not supported. Click on the animation to the left to see how to create the Deluxe Fountain bundle with the following items:
Resulting object:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | { "Name": "Deluxe Fountain", "Sku": "234", "Active": true, "FullyQualifiedName": "Deluxe Fountain", "Taxable": false, "UnitPrice": 0, "Type": "Group", "PurchaseCost": 0, "TrackQtyOnHand": false, "PrintGroupedItems": true, "ItemGroupDetail": { "ItemGroupLine": [{ "ItemRef": { "value": "5", "name": "Rock Fountain", "type": "Inventory" }, "Qty": 1 }, { "ItemRef": { "value": "11", "name": "Pump", "type": "Inventory" }, "Qty": 2 }, { "ItemRef": { "value": "8", "name": "Lighting", "type": "Service" }, "Qty": 1 }, { "ItemRef": { "value": "7", "name": "Installation", "type": "Service" }, "Qty": 1 }] } } |
Once created, Item bundles are available for use in sales transactions.
GroupLineDetail
line detail type to the list of lines for the transaction. The GroupLineDetail
detail type is, itself, an array of SalesItemlineDetail
elements representing the members of the bundle.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | { "Invoice": { "Deposit": 0, "AllowIPNPayment": false, "AllowOnlinePayment": false, "AllowOnlineCreditCardPayment": false, "AllowOnlineACHPayment": false, "domain": "QBO", "sparse": false, "Id": "162", "SyncToken": "0", "MetaData": { "CreateTime": "2016-09-27T10:40:53-07:00", "LastUpdatedTime": "2016-09-27T10:40:53-07:00" }, "CustomField": [{ "DefinitionId": "1", "Name": "Crew #", "Type": "StringType" }, { "DefinitionId": "2", "Name": "Shift #", "Type": "StringType" }], "DocNumber": "1047", "TxnDate": "2016-09-27", "CurrencyRef": { "value": "USD", "name": "United States Dollar" }, "ExchangeRate": 1, "LinkedTxn": [], "Line": [{ "Id": "1", "LineNum": 1, "Amount": 0, "DetailType": "GroupLineDetail", "GroupLineDetail": { "GroupItemRef": { "value": "22", "name": "Deluxe Fountain" }, "Quantity": 1, "Line": [{ "Id": "2", "LineNum": 2, "Description": "Rock Fountain", "Amount": 275.0, "DetailType": "SalesItemLineDetail", "SalesItemLineDetail": { "ItemRef": { "value": "5", "name": "Rock Fountain" }, "UnitPrice": 275, "Qty": 1, "TaxCodeRef": { "value": "TAX" } } }, { "Id": "3", "LineNum": 3, "Description": "Fountain Pump", "Amount": 30.0, "DetailType": "SalesItemLineDetail", "SalesItemLineDetail": { "ItemRef": { "value": "11", "name": "Pump" }, "UnitPrice": 15, "Qty": 2, "TaxCodeRef": { "value": "TAX" } } }, { "Id": "4", "LineNum": 4, "Description": "Garden Lighting", "Amount": 0, "DetailType": "SalesItemLineDetail", "SalesItemLineDetail": { "ItemRef": { "value": "8", "name": "Lighting" }, "UnitPrice": 0, "Qty": 1, "TaxCodeRef": { "value": "TAX" } } }, { "Id": "5", "LineNum": 5, "Description": "Installation of landscape design", "Amount": 50.0, "DetailType": "SalesItemLineDetail", "SalesItemLineDetail": { "ItemRef": { "value": "7", "name": "Installation" }, "UnitPrice": 50, "Qty": 1, "TaxCodeRef": { "value": "NON" } } }] } }, { "Amount": 355.0, "DetailType": "SubTotalLineDetail", "SubTotalLineDetail": {} }], "TxnTaxDetail": { "TotalTax": 0 }, "CustomerRef": { "value": "4", "name": "Diego Rodriguez" }, "CustomerMemo": { "value": "Thank you for your business and have a great day!" }, "BillAddr": { "Id": "5", "Line1": "321 Channing", "City": "Palo Alto", "CountrySubDivisionCode": "CA", "PostalCode": "94303", "Lat": "37.443231", "Long": "-122.1561846" }, "ShipAddr": { "Id": "5", "Line1": "321 Channing", "City": "Palo Alto", "CountrySubDivisionCode": "CA", "PostalCode": "94303", "Lat": "37.443231", "Long": "-122.1561846" }, "SalesTermRef": { "value": "3" }, "DueDate": "2016-10-27", "TotalAmt": 355.0, "HomeTotalAmt": 355.0, "ApplyTaxAfterDiscount": false, "PrintStatus": "NeedToPrint", "EmailStatus": "NotSet", "BillEmail": { "Address": "Diego@Rodriguez.com" }, "Balance": 355.0, "HomeBalance": 355.0 }, "time": "2016-09-27T13:19:18.581-07:00" } |
QuickBooks companies have recently been enabled for Item bundles and as a result, they could start appearing in your user’s sales transactions. Currently, your app handles transactions containing a list of lines with a DetailType
of SalesItemLine
being the most common type, referencing an
Item object and quantity. With bundles, there is an additional DetailType
of GroupLineDetail
that includes the bundle name and a nested array of lines representing the members of the bundle.
Now, consider some of the things that can happen in your app when it sees this new line type:
GroupItemLineDetail
type line entirely, your app shows a transaction to the user that is completely missing a line, and the total of the remaining lines doesn’t add up to the amount of the transaction.GroupItemLineDetail
line, the group line is completely stripped out and the user purchasing the assembled bundle is suddenly getting an empty box because the order just has a description and a subtotal line.