---
title: Create an Invoice with a Bundle Item
slug: quickbooks/create-an-invoice-with-a-bundle-item
docTags: 
createdAt: 2023-12-12T11:53:45.456Z
---

The following is an example of creating an Invoice with a Bundle Item.

:::hint{type="info"}
Note:  You can only create one record at a time.
:::

:::CodeblockTabs
Request

```apex
//  Create a Map to store all the data of an Invoice
List<Object> invoiceList = new List<Object>();
Map<String, Object> invoiceMap = new Map<String, Object>();
invoiceMap.put('TxnDate', '2025/05/08');
invoiceMap.put('DocNumber', 'I001');
invoiceMap.put('ExchangeRate', 1.0);

// Contact and Customer Info
invoiceMap.put('SalesTermRef', new Map<String, Object>{'value' => '4'});
invoiceMap.put('CustomerRef', new Map<String, Object>{'value' => '74'});

// Line Items
List<Object> lineItemList = new List<Object>();
// GroupLineDetail item
Map<String, Object> groupLineItem = new Map<String, Object>();
groupLineItem.put('Amount', 100.0);
groupLineItem.put('DetailType', 'GroupLineDetail');
Map<String, Object> groupLineDetail = new Map<String, Object>();
groupLineDetail.put('GroupItemRef', new Map<String, Object>{'value' => '26'});
groupLineDetail.put('Quantity', 1);
// Sub-line items inside group
List<Object> groupSubLines = new List<Object>();
Map<String, Object> subItem1 = new Map<String, Object>();
subItem1.put('Amount', 50.0);
subItem1.put('DetailType', 'SalesItemLineDetail');
subItem1.put('SalesItemLineDetail', new Map<String, Object>{
    'ItemRef' => new Map<String, Object>{'value' => '23'},
    'Qty' => 2,
    'UnitPrice' => 25
});
groupSubLines.add(subItem1);
Map<String, Object> subItem2 = new Map<String, Object>();
subItem2.put('Amount', 50.0);
subItem2.put('DetailType', 'SalesItemLineDetail');
subItem2.put('SalesItemLineDetail', new Map<String, Object>{
    'ItemRef' => new Map<String, Object>{'value' => '24'},
    'Qty' => 1,
    'UnitPrice' => 50
});
groupSubLines.add(subItem2);

// Add sub-lines to GroupLineDetail
groupLineDetail.put('Line', groupSubLines);
groupLineItem.put('GroupLineDetail', groupLineDetail);
lineItemList.add(groupLineItem);

// Add Line items to invoice
invoiceMap.put('Line', lineItemList);
invoiceList.add(invoiceMap);

// Final Request Map
Map<String, Object> reqJSONMap = new Map<String, Object>(); 
reqJSONMap.put('invoices', invoiceList); 
String reqJSON = JSON.serialize(reqJSONMap); 
Map<String, Object> finalReqMap = new Map<String, Object>(); 
finalReqMap.put('options', new Map<String, Object>());
finalReqMap.put('version', '1.0'); 
finalReqMap.put('action', 'createInvoice'); 
finalReqMap.put('RequestJSON', reqJSON); 
finalReqMap.put('skipDML', false);
finalReqMap.put('qbOrgId', '9341454612812784'); 
System.debug('Request ::: ' + finalReqMap);

// API Call
Map<String, Object> respMap = breadwinner_qbo.BreadwinnerQBAPI.call(finalReqMap);
System.debug('Response ::: ' + respMap);
```

Response

```json
{
  action=createInvoice,
  responseJSON={
    "statusCode":200,
    "invoices":[
      {
        "TxnTaxDetail":{
          "TotalTax":0
        },
        "TxnDate":"2025-05-08",
        "TotalAmt":100.00,
        "SyncToken":"0",
        "sparse":false,
        "SFRecordID":"a0AJ2000006g0UBMAY",
        "SalesTermRef":{
          "value":"4",
          "name":"Net 60"
        },
        "salesforceRecordId":"a0AJ2000006g0UBMAY",
        "MetaData":{
          "LastUpdatedTime":"2025-05-19T06:09:43-07:00",
          "CreateTime":"2025-05-19T06:09:43-07:00"
        },
        "Line":[
          {
            "LineNum":1,
            "Id":"1",
            "GroupLineDetail":{
              "Quantity":1,
              "Line":[
                {
                  "SalesItemLineDetail":{
                    "UnitPrice":25,
                    "TaxCodeRef":{
                      "value":"NON"
                    },
                    "Qty":2,
                    "ItemRef":{
                      "value":"23",
                      "name":"Inv1"
                    }
                  },
                  "LineNum":2,
                  "Id":"2",
                  "DetailType":"SalesItemLineDetail",
                  "Amount":50.00
                },
                {
                  "SalesItemLineDetail":{
                    "UnitPrice":50,
                    "TaxCodeRef":{
                      "value":"NON"
                    },
                    "Qty":1,
                    "ItemRef":{
                      "value":"24",
                      "name":"inv2"
                    }
                  },
                  "LineNum":3,
                  "Id":"3",
                  "DetailType":"SalesItemLineDetail",
                  "Amount":50.00
                }
              ],
              "GroupItemRef":{
                "value":"26",
                "name":"Inv"
              }
            },
            "DetailType":"GroupLineDetail",
            "Amount":100.00
          },
          {
            "DetailType":"SubTotalLineDetail",
            "Amount":100.00
          }
        ],
        "Id":"181",
        "HomeBalance":100.00,
        "ExchangeRate":1,
        "EmailStatus":"NotSet",
        "DueDate":"2025-07-07",
        "DocNumber":"I001",
        "CustomField":[],
        "CustomerRef":{
          "value":"74",
          "name":"Bundle Cust"
        },
        "CurrencyRef":{
          "value":"USD",
          "name":"United States Dollar"
        },
        "Balance":100.00,
        "AllowOnlineCreditCardPayment":false,
        "AllowOnlineACHPayment":false
      }
    ]
  },
  timestamp=1747660186183,
  validRequest=true,
  version=1.0
}
```
:::

Do you want to know the list of supported parameters for Create and Send Invoice? See [here.](docId\:gEE1Fj42aMxfapEUMYyQi)
