Sample code for 30+ languages & platforms
Dart

Quickbooks Update an Invoice

See more QuickBooks Examples

Demonstrates how to update 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.
  // --------------------------------------------------------------------------

  // Create the following JSON:

  // {
  //   "DocNumber": "1070",
  //   "SyncToken": "0",
  //   "domain": "QBO",
  //   "Balance": 150.0,
  //   "BillAddr": {
  //     "City": "Bayshore",
  //     "Line1": "4581 Finch St.",
  //     "PostalCode": "94326",
  //     "Lat": "INVALID",
  //     "Long": "INVALID",
  //     "CountrySubDivisionCode": "CA",
  //     "Id": "2"
  //   },
  //   "TxnDate": "2015-07-24",
  //   "TotalAmt": 150.0,
  //   "CustomerRef": {
  //     "name": "Amy's Bird Sanctuary",
  //     "value": "1"
  //   },
  //   "CustomerMemo": {
  //     "value": "Added customer memo."
  //   },
  //   "ShipAddr": {
  //     "City": "Bayshore",
  //     "Line1": "4581 Finch St.",
  //     "PostalCode": "94326",
  //     "Lat": "INVALID",
  //     "Long": "INVALID",
  //     "CountrySubDivisionCode": "CA",
  //     "Id": "109"
  //   },
  //   "LinkedTxn": [
  //   ],
  //   "DueDate": "2015-08-23",
  //   "PrintStatus": "NeedToPrint",
  //   "EmailStatus": "NotSet",
  //   "sparse": false,
  //   "Line": [
  //     {
  //       "LineNum": 1,
  //       "Amount": 150.0,
  //       "SalesItemLineDetail": {
  //         "TaxCodeRef": {
  //           "value": "NON"
  //         },
  //         "ItemRef": {
  //           "name": "Services",
  //           "value": "1"
  //         }
  //       },
  //       "Id": "1",
  //       "DetailType": "SalesItemLineDetail"
  //     },
  //     {
  //       "DetailType": "SubTotalLineDetail",
  //       "Amount": 150.0,
  //       "SubTotalLineDetail": {}
  //     }
  //   ],
  //   "ApplyTaxAfterDiscount": false,
  //   "CustomField": [
  //     {
  //       "DefinitionId": "1",
  //       "Type": "StringType",
  //       "Name": "Crew #"
  //     }
  //   ],
  //   "Id": "239",
  //   "TxnTaxDetail": {
  //     "TotalTax": 0
  //   },
  //   "MetaData": {
  //     "CreateTime": "2015-07-24T10:35:08-07:00",
  //     "LastUpdatedTime": "2015-07-24T10:35:08-07:00"
  //   }
  // }
  // 
  // Use the this online tool to generate the code from sample JSON: 
  // Generate Code to Create JSON

  final jsonReq = CkJsonObject();
  jsonReq.updateString('DocNumber', '1070');
  jsonReq.updateString('SyncToken', '0');
  jsonReq.updateString('domain', 'QBO');
  jsonReq.updateNumber('Balance', '150.0');
  jsonReq.updateString('BillAddr.City', 'Bayshore');
  jsonReq.updateString('BillAddr.Line1', '4581 Finch St.');
  jsonReq.updateString('BillAddr.PostalCode', '94326');
  jsonReq.updateString('BillAddr.Lat', 'INVALID');
  jsonReq.updateString('BillAddr.Long', 'INVALID');
  jsonReq.updateString('BillAddr.CountrySubDivisionCode', 'CA');
  jsonReq.updateString('BillAddr.Id', '2');
  jsonReq.updateString('TxnDate', '2015-07-24');
  jsonReq.updateNumber('TotalAmt', '150.0');
  jsonReq.updateString('CustomerRef.name', 'Amy\'s Bird Sanctuary');
  jsonReq.updateString('CustomerRef.value', '1');
  jsonReq.updateString('CustomerMemo.value', 'Added customer memo.');
  jsonReq.updateString('ShipAddr.City', 'Bayshore');
  jsonReq.updateString('ShipAddr.Line1', '4581 Finch St.');
  jsonReq.updateString('ShipAddr.PostalCode', '94326');
  jsonReq.updateString('ShipAddr.Lat', 'INVALID');
  jsonReq.updateString('ShipAddr.Long', 'INVALID');
  jsonReq.updateString('ShipAddr.CountrySubDivisionCode', 'CA');
  jsonReq.updateString('ShipAddr.Id', '109');
  jsonReq.updateNewArray('LinkedTxn');
  jsonReq.updateString('DueDate', '2015-08-23');
  jsonReq.updateString('PrintStatus', 'NeedToPrint');
  jsonReq.updateString('EmailStatus', 'NotSet');
  jsonReq.updateBool('sparse', false);
  jsonReq.updateInt('Line[0].LineNum', 1);
  jsonReq.updateNumber('Line[0].Amount', '150.0');
  jsonReq.updateString('Line[0].SalesItemLineDetail.TaxCodeRef.value', 'NON');
  jsonReq.updateString('Line[0].SalesItemLineDetail.ItemRef.name', 'Services');
  jsonReq.updateString('Line[0].SalesItemLineDetail.ItemRef.value', '1');
  jsonReq.updateString('Line[0].Id', '1');
  jsonReq.updateString('Line[0].DetailType', 'SalesItemLineDetail');
  jsonReq.updateString('Line[1].DetailType', 'SubTotalLineDetail');
  jsonReq.updateNumber('Line[1].Amount', '150.0');
  jsonReq.updateNewObject('Line[1].SubTotalLineDetail');
  jsonReq.updateBool('ApplyTaxAfterDiscount', false);
  jsonReq.updateString('CustomField[0].DefinitionId', '1');
  jsonReq.updateString('CustomField[0].Type', 'StringType');
  jsonReq.updateString('CustomField[0].Name', 'Crew #');
  jsonReq.updateString('Id', '239');
  jsonReq.updateInt('TxnTaxDetail.TotalTax', 0);
  jsonReq.updateString('MetaData.CreateTime', '2015-07-24T10:35:08-07:00');
  jsonReq.updateString('MetaData.LastUpdatedTime', '2015-07-24T10:35:08-07:00');

  final sbRequestBody = CkStringBuilder();
  jsonReq.emitSb(sbRequestBody);

  rest.addHeader('Content-Type', 'application/json');
  rest.addHeader('Accept', 'application/json');
  rest.allowHeaderFolding = false;

  final sbResponseBody = CkStringBuilder();
  try {
    rest.fullRequestSb('POST', '/v3/company/<realmID>/invoice', sbRequestBody, 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": "2015-07-24",
  //     "domain": "QBO",
  //     "PrintStatus": "NeedToPrint",
  //     "TotalAmt": 150.0,
  //     "Line": [
  //       {
  //         "LineNum": 1,
  //         "Amount": 150.0,
  //         "SalesItemLineDetail": {
  //           "TaxCodeRef": {
  //             "value": "NON"
  //           },
  //           "ItemRef": {
  //             "name": "Services",
  //             "value": "1"
  //           }
  //         },
  //         "Id": "1",
  //         "DetailType": "SalesItemLineDetail"
  //       },
  //       {
  //         "DetailType": "SubTotalLineDetail",
  //         "Amount": 150.0,
  //         "SubTotalLineDetail": {}
  //       }
  //     ],
  //     "DueDate": "2015-08-23",
  //     "ApplyTaxAfterDiscount": false,
  //     "DocNumber": "1070",
  //     "sparse": false,
  //     "CustomerMemo": {
  //       "value": "Added customer memo."
  //     },
  //     "Deposit": 0,
  //     "Balance": 150.0,
  //     "CustomerRef": {
  //       "name": "Amy's Bird Sanctuary",
  //       "value": "1"
  //     },
  //     "TxnTaxDetail": {
  //       "TotalTax": 0
  //     },
  //     "SyncToken": "1",
  //     "LinkedTxn": [
  //     ],
  //     "ShipAddr": {
  //       "CountrySubDivisionCode": "CA",
  //       "City": "Bayshore",
  //       "PostalCode": "94326",
  //       "Id": "118",
  //       "Line1": "4581 Finch St."
  //     },
  //     "EmailStatus": "NotSet",
  //     "BillAddr": {
  //       "CountrySubDivisionCode": "CA",
  //       "City": "Bayshore",
  //       "PostalCode": "94326",
  //       "Id": "117",
  //       "Line1": "4581 Finch St."
  //     },
  //     "MetaData": {
  //       "CreateTime": "2015-07-24T10:35:08-07:00",
  //       "LastUpdatedTime": "2015-07-24T10:53:39-07:00"
  //     },
  //     "CustomField": [
  //       {
  //         "DefinitionId": "1",
  //         "Type": "StringType",
  //         "Name": "Crew #"
  //       }
  //     ],
  //     "Id": "239"
  //   },
  //   "time": "2015-07-24T10:53:39.287-07:00"
  // }
  // 

  var lineNum = 0;
  var amount = '';
  var salesItemLineDetailTaxCodeRefValue = '';
  var salesItemLineDetailItemRefName = '';
  var salesItemLineDetailItemRefValue = '';
  var id = '';
  var detailType = '';
  var definitionId = '';
  var invType = '';
  var name = '';

  final invoiceTxnDate = jsonResponse.stringOf('Invoice.TxnDate');
  final invoiceDomain = jsonResponse.stringOf('Invoice.domain');
  final invoicePrintStatus = jsonResponse.stringOf('Invoice.PrintStatus');
  final invoiceTotalAmt = jsonResponse.stringOf('Invoice.TotalAmt');
  final invoiceDueDate = jsonResponse.stringOf('Invoice.DueDate');
  final invoiceDocNumber = jsonResponse.stringOf('Invoice.DocNumber');
  final invoiceCustomerMemoValue = jsonResponse.stringOf('Invoice.CustomerMemo.value');
  final invoiceDeposit = jsonResponse.intOf('Invoice.Deposit');
  final invoiceBalance = jsonResponse.stringOf('Invoice.Balance');
  final invoiceCustomerRefName = jsonResponse.stringOf('Invoice.CustomerRef.name');
  final invoiceCustomerRefValue = jsonResponse.stringOf('Invoice.CustomerRef.value');
  final invoiceTxnTaxDetailTotalTax = jsonResponse.intOf('Invoice.TxnTaxDetail.TotalTax');
  final invoiceSyncToken = jsonResponse.stringOf('Invoice.SyncToken');
  final invoiceShipAddrCountrySubDivisionCode = jsonResponse.stringOf('Invoice.ShipAddr.CountrySubDivisionCode');
  final invoiceShipAddrCity = jsonResponse.stringOf('Invoice.ShipAddr.City');
  final invoiceShipAddrPostalCode = jsonResponse.stringOf('Invoice.ShipAddr.PostalCode');
  final invoiceShipAddrId = jsonResponse.stringOf('Invoice.ShipAddr.Id');
  final invoiceShipAddrLine1 = jsonResponse.stringOf('Invoice.ShipAddr.Line1');
  final invoiceEmailStatus = jsonResponse.stringOf('Invoice.EmailStatus');
  final invoiceBillAddrCountrySubDivisionCode = jsonResponse.stringOf('Invoice.BillAddr.CountrySubDivisionCode');
  final invoiceBillAddrCity = jsonResponse.stringOf('Invoice.BillAddr.City');
  final invoiceBillAddrPostalCode = jsonResponse.stringOf('Invoice.BillAddr.PostalCode');
  final invoiceBillAddrId = jsonResponse.stringOf('Invoice.BillAddr.Id');
  final invoiceBillAddrLine1 = jsonResponse.stringOf('Invoice.BillAddr.Line1');
  final invoiceMetaDataCreateTime = jsonResponse.stringOf('Invoice.MetaData.CreateTime');
  final invoiceMetaDataLastUpdatedTime = jsonResponse.stringOf('Invoice.MetaData.LastUpdatedTime');
  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;
    lineNum = jsonResponse.intOf('Invoice.Line[i].LineNum');
    amount = jsonResponse.stringOf('Invoice.Line[i].Amount');
    salesItemLineDetailTaxCodeRefValue = jsonResponse.stringOf('Invoice.Line[i].SalesItemLineDetail.TaxCodeRef.value');
    salesItemLineDetailItemRefName = jsonResponse.stringOf('Invoice.Line[i].SalesItemLineDetail.ItemRef.name');
    salesItemLineDetailItemRefValue = jsonResponse.stringOf('Invoice.Line[i].SalesItemLineDetail.ItemRef.value');
    id = jsonResponse.stringOf('Invoice.Line[i].Id');
    detailType = jsonResponse.stringOf('Invoice.Line[i].DetailType');
    i++;
  }

  i = 0;
  countI = jsonResponse.sizeOfArray('Invoice.LinkedTxn');
  while (i < countI) {
    jsonResponse.i = i;
    i++;
  }

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