Sample code for 30+ languages & platforms
Dart

Quickbooks Send an Invoice

See more QuickBooks Examples

Demonstrates how to send an invoice using the Quickbooks REST API.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  // First get our previously obtained OAuth2 access token.
  final jsonToken = CkJsonObject();
  jsonToken.loadFile('qa_data/tokens/qb-access-token.json');

  final rest = CkRest();

  // Connect to the REST server.
  final bTls = true;
  final port = 443;
  final bAutoReconnect = true;
  rest.connect('sandbox-quickbooks.api.intuit.com', port, bTls, bAutoReconnect);

  final sbAuth = CkStringBuilder();
  sbAuth.append('Bearer ');
  sbAuth.append(jsonToken.stringOf('access_token'));
  rest.authorization = sbAuth.getAsString();

  // --------------------------------------------------------------------------
  // Note: The above code to setup the initial REST connection
  // can be done once.  After connecting, any number of REST calls can be made.
  // If the connection is lost, the next REST method call will automatically
  // reconnect if needed.
  // --------------------------------------------------------------------------

  // Technically, the POST has an empty request body, but the Quickbooks documentation indicates that 
  // the Content-Type header should be set to "application/octet-stream", which really makes no sense
  // because there is not content. (How can no content have a type???)
  rest.addHeader('Content-Type', 'application/octet-stream');
  rest.allowHeaderFolding = false;

  final sbResponseBody = CkStringBuilder();
  try {
    rest.fullRequestNoBodySb('POST', '/v3/company/<realmID>/invoice/<invoiceId>/send?sendTo=<emailAddr>', sbResponseBody);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final respStatusCode = rest.responseStatusCode;

  // Success is indicated by a 200 response status code.
  print('response status code = $respStatusCode');

  final jsonResponse = CkJsonObject();
  jsonResponse.loadSb(sbResponseBody);
  jsonResponse.emitCompact = false;
  print(jsonResponse.emit());

  if (rest.responseStatusCode != 200) {
    print('Failed.');
    return;
  }

  // Sample output...
  // (See the parsing code below..)
  // 
  // Use the this online tool to generate parsing code from sample JSON: 
  // Generate Parsing Code from JSON

  // {
  //   "Invoice": {
  //     "TxnDate": "2013-03-14",
  //     "domain": "QBO",
  //     "CurrencyRef": {
  //       "name": "United States Dollar",
  //       "value": "USD"
  //     },
  //     "ShipDate": "2013-03-01",
  //     "TrackingNum": "123456789",
  //     "ClassRef": {
  //       "name": "Class 1",
  //       "value": "200900000000000003901"
  //     },
  //     "PrintStatus": "NeedToPrint",
  //     "SalesTermRef": {
  //       "value": "4"
  //     },
  //     "DeliveryInfo": {
  //       "DeliveryType": "Email",
  //       "DeliveryTime": "2014-12-17T11:50:52-08:00"
  //     },
  //     "TotalAmt": 52.0,
  //     "Line": [
  //       {
  //         "Description": "Sample invoice create request",
  //         "DetailType": "SalesItemLineDetail",
  //         "SalesItemLineDetail": {
  //           "TaxCodeRef": {
  //             "value": "TAX"
  //           },
  //           "Qty": 1,
  //           "UnitPrice": 50,
  //           "ServiceDate": "2013-03-04",
  //           "ItemRef": {
  //             "name": "Hours",
  //             "value": "2"
  //           }
  //         },
  //         "LineNum": 1,
  //         "Amount": 50.0,
  //         "Id": "1"
  //       },
  //       {
  //         "DetailType": "SubTotalLineDetail",
  //         "Amount": 50.0,
  //         "SubTotalLineDetail": {}
  //       },
  //       {
  //         "DetailType": "DiscountLineDetail",
  //         "Amount": 5.0,
  //         "DiscountLineDetail": {
  //           "DiscountAccountRef": {
  //             "name": "Discounts given",
  //             "value": "30"
  //           },
  //           "PercentBased": true,
  //           "DiscountPercent": 10
  //         }
  //       },
  //       {
  //         "DetailType": "SalesItemLineDetail",
  //         "Amount": 2.0,
  //         "SalesItemLineDetail": {
  //           "ItemRef": {
  //             "value": "SHIPPING_ITEM_ID"
  //           }
  //         }
  //       }
  //     ],
  //     "DueDate": "2013-05-13",
  //     "MetaData": {
  //       "CreateTime": "2013-03-14T01:42:16-07:00",
  //       "LastUpdatedTime": "2014-12-17T11:50:58-08:00"
  //     },
  //     "DocNumber": "Sample_Inv#2",
  //     "PrivateNote": "Summary for sample invoice",
  //     "sparse": false,
  //     "DepositToAccountRef": {
  //       "name": "Undeposited Funds",
  //       "value": "4"
  //     },
  //     "CustomerMemo": {
  //       "value": "This is the customer message"
  //     },
  //     "EmailStatus": "EmailSent",
  //     "Deposit": 12.0,
  //     "Balance": 40.0,
  //     "CustomerRef": {
  //       "name": "Mr V3 Service Customer Jr2",
  //       "value": "15"
  //     },
  //     "TxnTaxDetail": {
  //       "TxnTaxCodeRef": {
  //         "value": "5"
  //       },
  //       "TotalTax": 5.0,
  //       "TaxLine": [
  //         {
  //           "DetailType": "TaxLineDetail",
  //           "Amount": 5.0,
  //           "TaxLineDetail": {
  //             "NetAmountTaxable": 50.0,
  //             "TaxPercent": 10,
  //             "TaxRateRef": {
  //               "value": "2"
  //             },
  //             "PercentBased": true
  //           }
  //         }
  //       ]
  //     },
  //     "SyncToken": "0",
  //     "BillEmail": {
  //       "Address": "test@intuit.com"
  //     },
  //     "ShipAddr": {
  //       "City": "San Jose",
  //       "Country": "USA",
  //       "Line5": "Cube 999",
  //       "Line4": "Dept 12",
  //       "Line3": "123 street",
  //       "Line2": "Building 1",
  //       "Line1": "Intuit",
  //       "PostalCode": "95123",
  //       "Lat": "37.2374847",
  //       "Long": "-121.8277925",
  //       "CountrySubDivisionCode": "CA",
  //       "Id": "36"
  //     },
  //     "DepartmentRef": {
  //       "name": "Mountain View",
  //       "value": "1"
  //     },
  //     "ShipMethodRef": {
  //       "name": "UPS",
  //       "value": "UPS"
  //     },
  //     "BillAddr": {
  //       "City": "Mountain View",
  //       "Country": "USA",
  //       "Line5": "Cube 999",
  //       "Line4": "Dept 12",
  //       "Line3": "123 street",
  //       "Line2": "Building 1",
  //       "Line1": "Google",
  //       "PostalCode": "95123",
  //       "Lat": "37.2374847",
  //       "Long": "-121.8277925",
  //       "CountrySubDivisionCode": "CA",
  //       "Id": "35"
  //     },
  //     "ApplyTaxAfterDiscount": false,
  //     "CustomField": [
  //       {
  //         "StringValue": "Custom1",
  //         "Type": "StringType",
  //         "Name": "Custom 1"
  //       },
  //       {
  //         "StringValue": "Custom2",
  //         "Type": "StringType",
  //         "Name": "Custom 2"
  //       },
  //       {
  //         "StringValue": "Custom3",
  //         "Type": "StringType",
  //         "Name": "Custom 3"
  //       }
  //     ],
  //     "Id": "96"
  //   },
  //   "time": "2013-03-14T13:32:04.895-07:00"
  // }
  // 

  var description = '';
  var detailType = '';
  var salesItemLineDetailTaxCodeRefValue = '';
  var salesItemLineDetailQty = 0;
  var salesItemLineDetailUnitPrice = 0;
  var salesItemLineDetailServiceDate = '';
  var salesItemLineDetailItemRefName = '';
  var salesItemLineDetailItemRefValue = '';
  var lineNum = 0;
  var amount = '';
  var id = '';
  var discountLineDetailDiscountAccountRefName = '';
  var discountLineDetailDiscountAccountRefValue = '';
  var discountLineDetailDiscountPercent = 0;
  var taxLineDetailNetAmountTaxable = '';
  var taxLineDetailTaxPercent = 0;
  var taxLineDetailTaxRateRefValue = '';
  var stringValue = '';
  var type = '';
  var name = '';

  final invoiceTxnDate = jsonResponse.stringOf('Invoice.TxnDate');
  final invoiceDomain = jsonResponse.stringOf('Invoice.domain');
  final invoiceCurrencyRefName = jsonResponse.stringOf('Invoice.CurrencyRef.name');
  final invoiceCurrencyRefValue = jsonResponse.stringOf('Invoice.CurrencyRef.value');
  final invoiceShipDate = jsonResponse.stringOf('Invoice.ShipDate');
  final invoiceTrackingNum = jsonResponse.stringOf('Invoice.TrackingNum');
  final invoiceClassRefName = jsonResponse.stringOf('Invoice.ClassRef.name');
  final invoiceClassRefValue = jsonResponse.stringOf('Invoice.ClassRef.value');
  final invoicePrintStatus = jsonResponse.stringOf('Invoice.PrintStatus');
  final invoiceSalesTermRefValue = jsonResponse.stringOf('Invoice.SalesTermRef.value');
  final invoiceDeliveryInfoDeliveryType = jsonResponse.stringOf('Invoice.DeliveryInfo.DeliveryType');
  final invoiceDeliveryInfoDeliveryTime = jsonResponse.stringOf('Invoice.DeliveryInfo.DeliveryTime');
  final invoiceTotalAmt = jsonResponse.stringOf('Invoice.TotalAmt');
  final invoiceDueDate = jsonResponse.stringOf('Invoice.DueDate');
  final invoiceMetaDataCreateTime = jsonResponse.stringOf('Invoice.MetaData.CreateTime');
  final invoiceMetaDataLastUpdatedTime = jsonResponse.stringOf('Invoice.MetaData.LastUpdatedTime');
  final invoiceDocNumber = jsonResponse.stringOf('Invoice.DocNumber');
  final invoicePrivateNote = jsonResponse.stringOf('Invoice.PrivateNote');
  final invoiceDepositToAccountRefName = jsonResponse.stringOf('Invoice.DepositToAccountRef.name');
  final invoiceDepositToAccountRefValue = jsonResponse.stringOf('Invoice.DepositToAccountRef.value');
  final invoiceCustomerMemoValue = jsonResponse.stringOf('Invoice.CustomerMemo.value');
  final invoiceEmailStatus = jsonResponse.stringOf('Invoice.EmailStatus');
  final invoiceDeposit = jsonResponse.stringOf('Invoice.Deposit');
  final invoiceBalance = jsonResponse.stringOf('Invoice.Balance');
  final invoiceCustomerRefName = jsonResponse.stringOf('Invoice.CustomerRef.name');
  final invoiceCustomerRefValue = jsonResponse.stringOf('Invoice.CustomerRef.value');
  final invoiceTxnTaxDetailTxnTaxCodeRefValue = jsonResponse.stringOf('Invoice.TxnTaxDetail.TxnTaxCodeRef.value');
  final invoiceTxnTaxDetailTotalTax = jsonResponse.stringOf('Invoice.TxnTaxDetail.TotalTax');
  final invoiceSyncToken = jsonResponse.stringOf('Invoice.SyncToken');
  final invoiceBillEmailAddress = jsonResponse.stringOf('Invoice.BillEmail.Address');
  final invoiceShipAddrCity = jsonResponse.stringOf('Invoice.ShipAddr.City');
  final invoiceShipAddrCountry = jsonResponse.stringOf('Invoice.ShipAddr.Country');
  final invoiceShipAddrLine5 = jsonResponse.stringOf('Invoice.ShipAddr.Line5');
  final invoiceShipAddrLine4 = jsonResponse.stringOf('Invoice.ShipAddr.Line4');
  final invoiceShipAddrLine3 = jsonResponse.stringOf('Invoice.ShipAddr.Line3');
  final invoiceShipAddrLine2 = jsonResponse.stringOf('Invoice.ShipAddr.Line2');
  final invoiceShipAddrLine1 = jsonResponse.stringOf('Invoice.ShipAddr.Line1');
  final invoiceShipAddrPostalCode = jsonResponse.stringOf('Invoice.ShipAddr.PostalCode');
  final invoiceShipAddrLat = jsonResponse.stringOf('Invoice.ShipAddr.Lat');
  final invoiceShipAddrLong = jsonResponse.stringOf('Invoice.ShipAddr.Long');
  final invoiceShipAddrCountrySubDivisionCode = jsonResponse.stringOf('Invoice.ShipAddr.CountrySubDivisionCode');
  final invoiceShipAddrId = jsonResponse.stringOf('Invoice.ShipAddr.Id');
  final invoiceDepartmentRefName = jsonResponse.stringOf('Invoice.DepartmentRef.name');
  final invoiceDepartmentRefValue = jsonResponse.stringOf('Invoice.DepartmentRef.value');
  final invoiceShipMethodRefName = jsonResponse.stringOf('Invoice.ShipMethodRef.name');
  final invoiceShipMethodRefValue = jsonResponse.stringOf('Invoice.ShipMethodRef.value');
  final invoiceBillAddrCity = jsonResponse.stringOf('Invoice.BillAddr.City');
  final invoiceBillAddrCountry = jsonResponse.stringOf('Invoice.BillAddr.Country');
  final invoiceBillAddrLine5 = jsonResponse.stringOf('Invoice.BillAddr.Line5');
  final invoiceBillAddrLine4 = jsonResponse.stringOf('Invoice.BillAddr.Line4');
  final invoiceBillAddrLine3 = jsonResponse.stringOf('Invoice.BillAddr.Line3');
  final invoiceBillAddrLine2 = jsonResponse.stringOf('Invoice.BillAddr.Line2');
  final invoiceBillAddrLine1 = jsonResponse.stringOf('Invoice.BillAddr.Line1');
  final invoiceBillAddrPostalCode = jsonResponse.stringOf('Invoice.BillAddr.PostalCode');
  final invoiceBillAddrLat = jsonResponse.stringOf('Invoice.BillAddr.Lat');
  final invoiceBillAddrLong = jsonResponse.stringOf('Invoice.BillAddr.Long');
  final invoiceBillAddrCountrySubDivisionCode = jsonResponse.stringOf('Invoice.BillAddr.CountrySubDivisionCode');
  final invoiceBillAddrId = jsonResponse.stringOf('Invoice.BillAddr.Id');
  final invoiceId = jsonResponse.stringOf('Invoice.Id');
  final time = jsonResponse.stringOf('time');
  var i = 0;
  var countI = jsonResponse.sizeOfArray('Invoice.Line');
  while (i < countI) {
    jsonResponse.i = i;
    description = jsonResponse.stringOf('Invoice.Line[i].Description');
    detailType = jsonResponse.stringOf('Invoice.Line[i].DetailType');
    salesItemLineDetailTaxCodeRefValue = jsonResponse.stringOf('Invoice.Line[i].SalesItemLineDetail.TaxCodeRef.value');
    salesItemLineDetailQty = jsonResponse.intOf('Invoice.Line[i].SalesItemLineDetail.Qty');
    salesItemLineDetailUnitPrice = jsonResponse.intOf('Invoice.Line[i].SalesItemLineDetail.UnitPrice');
    salesItemLineDetailServiceDate = jsonResponse.stringOf('Invoice.Line[i].SalesItemLineDetail.ServiceDate');
    salesItemLineDetailItemRefName = jsonResponse.stringOf('Invoice.Line[i].SalesItemLineDetail.ItemRef.name');
    salesItemLineDetailItemRefValue = jsonResponse.stringOf('Invoice.Line[i].SalesItemLineDetail.ItemRef.value');
    lineNum = jsonResponse.intOf('Invoice.Line[i].LineNum');
    amount = jsonResponse.stringOf('Invoice.Line[i].Amount');
    id = jsonResponse.stringOf('Invoice.Line[i].Id');
    discountLineDetailDiscountAccountRefName = jsonResponse.stringOf('Invoice.Line[i].DiscountLineDetail.DiscountAccountRef.name');
    discountLineDetailDiscountAccountRefValue = jsonResponse.stringOf('Invoice.Line[i].DiscountLineDetail.DiscountAccountRef.value');
    jsonResponse.boolOf('Invoice.Line[i].DiscountLineDetail.PercentBased');
    discountLineDetailDiscountPercent = jsonResponse.intOf('Invoice.Line[i].DiscountLineDetail.DiscountPercent');
    i++;
  }

  i = 0;
  countI = jsonResponse.sizeOfArray('Invoice.TxnTaxDetail.TaxLine');
  while (i < countI) {
    jsonResponse.i = i;
    detailType = jsonResponse.stringOf('Invoice.TxnTaxDetail.TaxLine[i].DetailType');
    amount = jsonResponse.stringOf('Invoice.TxnTaxDetail.TaxLine[i].Amount');
    taxLineDetailNetAmountTaxable = jsonResponse.stringOf('Invoice.TxnTaxDetail.TaxLine[i].TaxLineDetail.NetAmountTaxable');
    taxLineDetailTaxPercent = jsonResponse.intOf('Invoice.TxnTaxDetail.TaxLine[i].TaxLineDetail.TaxPercent');
    taxLineDetailTaxRateRefValue = jsonResponse.stringOf('Invoice.TxnTaxDetail.TaxLine[i].TaxLineDetail.TaxRateRef.value');
    jsonResponse.boolOf('Invoice.TxnTaxDetail.TaxLine[i].TaxLineDetail.PercentBased');
    i++;
  }

  i = 0;
  countI = jsonResponse.sizeOfArray('Invoice.CustomField');
  while (i < countI) {
    jsonResponse.i = i;
    stringValue = jsonResponse.stringOf('Invoice.CustomField[i].StringValue');
    type = jsonResponse.stringOf('Invoice.CustomField[i].Type');
    name = jsonResponse.stringOf('Invoice.CustomField[i].Name');
    i++;
  }
}