Sample code for 30+ languages & platforms
AutoIt

Quickbooks Send an Invoice

See more QuickBooks Examples

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

Chilkat AutoIt Downloads

AutoIt
Local $bSuccess = False

; 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.
$oJsonToken = ObjCreate("Chilkat.JsonObject")
$bSuccess = $oJsonToken.LoadFile("qa_data/tokens/qb-access-token.json")

$oRest = ObjCreate("Chilkat.Rest")

; Connect to the REST server.
Local $bTls = True
Local $iPort = 443
Local $bAutoReconnect = True
$bSuccess = $oRest.Connect("sandbox-quickbooks.api.intuit.com",$iPort,$bTls,$bAutoReconnect)

$oSbAuth = ObjCreate("Chilkat.StringBuilder")
$oSbAuth.Append("Bearer ")
$oSbAuth.Append($oJsonToken.StringOf("access_token"))
$oRest.Authorization = $oSbAuth.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???)
$oRest.AddHeader("Content-Type","application/octet-stream")
$oRest.AllowHeaderFolding = False

$oSbResponseBody = ObjCreate("Chilkat.StringBuilder")
$bSuccess = $oRest.FullRequestNoBodySb("POST","/v3/company/<realmID>/invoice/<invoiceId>/send?sendTo=<emailAddr>",$oSbResponseBody)
If ($bSuccess <> True) Then
    ConsoleWrite($oRest.LastErrorText & @CRLF)
    Exit
EndIf

Local $iRespStatusCode = $oRest.ResponseStatusCode

; Success is indicated by a 200 response status code.
ConsoleWrite("response status code = " & $iRespStatusCode & @CRLF)

$oJsonResponse = ObjCreate("Chilkat.JsonObject")
$oJsonResponse.LoadSb($oSbResponseBody)
$oJsonResponse.EmitCompact = False
ConsoleWrite($oJsonResponse.Emit() & @CRLF)

If ($oRest.ResponseStatusCode <> 200) Then
    ConsoleWrite("Failed." & @CRLF)
    Exit
EndIf

; 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"
; }
; 

Local $sDescription
Local $sDetailType
Local $sSalesItemLineDetailTaxCodeRefValue
Local $iSalesItemLineDetailQty
Local $iSalesItemLineDetailUnitPrice
Local $sSalesItemLineDetailServiceDate
Local $sSalesItemLineDetailItemRefName
Local $sSalesItemLineDetailItemRefValue
Local $iLineNum
Local $sAmount
Local $sId
Local $sDiscountLineDetailDiscountAccountRefName
Local $sDiscountLineDetailDiscountAccountRefValue
Local $bDiscountLineDetailPercentBased
Local $iDiscountLineDetailDiscountPercent
Local $sTaxLineDetailNetAmountTaxable
Local $iTaxLineDetailTaxPercent
Local $sTaxLineDetailTaxRateRefValue
Local $bTaxLineDetailPercentBased
Local $sStringValue
Local $sType
Local $sName

Local $sInvoiceTxnDate = $oJsonResponse.StringOf("Invoice.TxnDate")
Local $sInvoiceDomain = $oJsonResponse.StringOf("Invoice.domain")
Local $sInvoiceCurrencyRefName = $oJsonResponse.StringOf("Invoice.CurrencyRef.name")
Local $sInvoiceCurrencyRefValue = $oJsonResponse.StringOf("Invoice.CurrencyRef.value")
Local $sInvoiceShipDate = $oJsonResponse.StringOf("Invoice.ShipDate")
Local $sInvoiceTrackingNum = $oJsonResponse.StringOf("Invoice.TrackingNum")
Local $sInvoiceClassRefName = $oJsonResponse.StringOf("Invoice.ClassRef.name")
Local $sInvoiceClassRefValue = $oJsonResponse.StringOf("Invoice.ClassRef.value")
Local $sInvoicePrintStatus = $oJsonResponse.StringOf("Invoice.PrintStatus")
Local $sInvoiceSalesTermRefValue = $oJsonResponse.StringOf("Invoice.SalesTermRef.value")
Local $sInvoiceDeliveryInfoDeliveryType = $oJsonResponse.StringOf("Invoice.DeliveryInfo.DeliveryType")
Local $sInvoiceDeliveryInfoDeliveryTime = $oJsonResponse.StringOf("Invoice.DeliveryInfo.DeliveryTime")
Local $sInvoiceTotalAmt = $oJsonResponse.StringOf("Invoice.TotalAmt")
Local $sInvoiceDueDate = $oJsonResponse.StringOf("Invoice.DueDate")
Local $sInvoiceMetaDataCreateTime = $oJsonResponse.StringOf("Invoice.MetaData.CreateTime")
Local $sInvoiceMetaDataLastUpdatedTime = $oJsonResponse.StringOf("Invoice.MetaData.LastUpdatedTime")
Local $sInvoiceDocNumber = $oJsonResponse.StringOf("Invoice.DocNumber")
Local $sInvoicePrivateNote = $oJsonResponse.StringOf("Invoice.PrivateNote")
Local $bInvoiceSparse = $oJsonResponse.BoolOf("Invoice.sparse")
Local $sInvoiceDepositToAccountRefName = $oJsonResponse.StringOf("Invoice.DepositToAccountRef.name")
Local $sInvoiceDepositToAccountRefValue = $oJsonResponse.StringOf("Invoice.DepositToAccountRef.value")
Local $sInvoiceCustomerMemoValue = $oJsonResponse.StringOf("Invoice.CustomerMemo.value")
Local $sInvoiceEmailStatus = $oJsonResponse.StringOf("Invoice.EmailStatus")
Local $sInvoiceDeposit = $oJsonResponse.StringOf("Invoice.Deposit")
Local $sInvoiceBalance = $oJsonResponse.StringOf("Invoice.Balance")
Local $sInvoiceCustomerRefName = $oJsonResponse.StringOf("Invoice.CustomerRef.name")
Local $sInvoiceCustomerRefValue = $oJsonResponse.StringOf("Invoice.CustomerRef.value")
Local $sInvoiceTxnTaxDetailTxnTaxCodeRefValue = $oJsonResponse.StringOf("Invoice.TxnTaxDetail.TxnTaxCodeRef.value")
Local $sInvoiceTxnTaxDetailTotalTax = $oJsonResponse.StringOf("Invoice.TxnTaxDetail.TotalTax")
Local $sInvoiceSyncToken = $oJsonResponse.StringOf("Invoice.SyncToken")
Local $sInvoiceBillEmailAddress = $oJsonResponse.StringOf("Invoice.BillEmail.Address")
Local $sInvoiceShipAddrCity = $oJsonResponse.StringOf("Invoice.ShipAddr.City")
Local $sInvoiceShipAddrCountry = $oJsonResponse.StringOf("Invoice.ShipAddr.Country")
Local $sInvoiceShipAddrLine5 = $oJsonResponse.StringOf("Invoice.ShipAddr.Line5")
Local $sInvoiceShipAddrLine4 = $oJsonResponse.StringOf("Invoice.ShipAddr.Line4")
Local $sInvoiceShipAddrLine3 = $oJsonResponse.StringOf("Invoice.ShipAddr.Line3")
Local $sInvoiceShipAddrLine2 = $oJsonResponse.StringOf("Invoice.ShipAddr.Line2")
Local $sInvoiceShipAddrLine1 = $oJsonResponse.StringOf("Invoice.ShipAddr.Line1")
Local $sInvoiceShipAddrPostalCode = $oJsonResponse.StringOf("Invoice.ShipAddr.PostalCode")
Local $sInvoiceShipAddrLat = $oJsonResponse.StringOf("Invoice.ShipAddr.Lat")
Local $sInvoiceShipAddrLong = $oJsonResponse.StringOf("Invoice.ShipAddr.Long")
Local $sInvoiceShipAddrCountrySubDivisionCode = $oJsonResponse.StringOf("Invoice.ShipAddr.CountrySubDivisionCode")
Local $sInvoiceShipAddrId = $oJsonResponse.StringOf("Invoice.ShipAddr.Id")
Local $sInvoiceDepartmentRefName = $oJsonResponse.StringOf("Invoice.DepartmentRef.name")
Local $sInvoiceDepartmentRefValue = $oJsonResponse.StringOf("Invoice.DepartmentRef.value")
Local $sInvoiceShipMethodRefName = $oJsonResponse.StringOf("Invoice.ShipMethodRef.name")
Local $sInvoiceShipMethodRefValue = $oJsonResponse.StringOf("Invoice.ShipMethodRef.value")
Local $sInvoiceBillAddrCity = $oJsonResponse.StringOf("Invoice.BillAddr.City")
Local $sInvoiceBillAddrCountry = $oJsonResponse.StringOf("Invoice.BillAddr.Country")
Local $sInvoiceBillAddrLine5 = $oJsonResponse.StringOf("Invoice.BillAddr.Line5")
Local $sInvoiceBillAddrLine4 = $oJsonResponse.StringOf("Invoice.BillAddr.Line4")
Local $sInvoiceBillAddrLine3 = $oJsonResponse.StringOf("Invoice.BillAddr.Line3")
Local $sInvoiceBillAddrLine2 = $oJsonResponse.StringOf("Invoice.BillAddr.Line2")
Local $sInvoiceBillAddrLine1 = $oJsonResponse.StringOf("Invoice.BillAddr.Line1")
Local $sInvoiceBillAddrPostalCode = $oJsonResponse.StringOf("Invoice.BillAddr.PostalCode")
Local $sInvoiceBillAddrLat = $oJsonResponse.StringOf("Invoice.BillAddr.Lat")
Local $sInvoiceBillAddrLong = $oJsonResponse.StringOf("Invoice.BillAddr.Long")
Local $sInvoiceBillAddrCountrySubDivisionCode = $oJsonResponse.StringOf("Invoice.BillAddr.CountrySubDivisionCode")
Local $sInvoiceBillAddrId = $oJsonResponse.StringOf("Invoice.BillAddr.Id")
Local $bInvoiceApplyTaxAfterDiscount = $oJsonResponse.BoolOf("Invoice.ApplyTaxAfterDiscount")
Local $sInvoiceId = $oJsonResponse.StringOf("Invoice.Id")
Local $sTime = $oJsonResponse.StringOf("time")
Local $i = 0
Local $iCount_i = $oJsonResponse.SizeOfArray("Invoice.Line")
While $i < $iCount_i
    $oJsonResponse.I = $i
    $sDescription = $oJsonResponse.StringOf("Invoice.Line[i].Description")
    $sDetailType = $oJsonResponse.StringOf("Invoice.Line[i].DetailType")
    $sSalesItemLineDetailTaxCodeRefValue = $oJsonResponse.StringOf("Invoice.Line[i].SalesItemLineDetail.TaxCodeRef.value")
    $iSalesItemLineDetailQty = $oJsonResponse.IntOf("Invoice.Line[i].SalesItemLineDetail.Qty")
    $iSalesItemLineDetailUnitPrice = $oJsonResponse.IntOf("Invoice.Line[i].SalesItemLineDetail.UnitPrice")
    $sSalesItemLineDetailServiceDate = $oJsonResponse.StringOf("Invoice.Line[i].SalesItemLineDetail.ServiceDate")
    $sSalesItemLineDetailItemRefName = $oJsonResponse.StringOf("Invoice.Line[i].SalesItemLineDetail.ItemRef.name")
    $sSalesItemLineDetailItemRefValue = $oJsonResponse.StringOf("Invoice.Line[i].SalesItemLineDetail.ItemRef.value")
    $iLineNum = $oJsonResponse.IntOf("Invoice.Line[i].LineNum")
    $sAmount = $oJsonResponse.StringOf("Invoice.Line[i].Amount")
    $sId = $oJsonResponse.StringOf("Invoice.Line[i].Id")
    $sDiscountLineDetailDiscountAccountRefName = $oJsonResponse.StringOf("Invoice.Line[i].DiscountLineDetail.DiscountAccountRef.name")
    $sDiscountLineDetailDiscountAccountRefValue = $oJsonResponse.StringOf("Invoice.Line[i].DiscountLineDetail.DiscountAccountRef.value")
    $bDiscountLineDetailPercentBased = $oJsonResponse.BoolOf("Invoice.Line[i].DiscountLineDetail.PercentBased")
    $iDiscountLineDetailDiscountPercent = $oJsonResponse.IntOf("Invoice.Line[i].DiscountLineDetail.DiscountPercent")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJsonResponse.SizeOfArray("Invoice.TxnTaxDetail.TaxLine")
While $i < $iCount_i
    $oJsonResponse.I = $i
    $sDetailType = $oJsonResponse.StringOf("Invoice.TxnTaxDetail.TaxLine[i].DetailType")
    $sAmount = $oJsonResponse.StringOf("Invoice.TxnTaxDetail.TaxLine[i].Amount")
    $sTaxLineDetailNetAmountTaxable = $oJsonResponse.StringOf("Invoice.TxnTaxDetail.TaxLine[i].TaxLineDetail.NetAmountTaxable")
    $iTaxLineDetailTaxPercent = $oJsonResponse.IntOf("Invoice.TxnTaxDetail.TaxLine[i].TaxLineDetail.TaxPercent")
    $sTaxLineDetailTaxRateRefValue = $oJsonResponse.StringOf("Invoice.TxnTaxDetail.TaxLine[i].TaxLineDetail.TaxRateRef.value")
    $bTaxLineDetailPercentBased = $oJsonResponse.BoolOf("Invoice.TxnTaxDetail.TaxLine[i].TaxLineDetail.PercentBased")
    $i = $i + 1
Wend
$i = 0
$iCount_i = $oJsonResponse.SizeOfArray("Invoice.CustomField")
While $i < $iCount_i
    $oJsonResponse.I = $i
    $sStringValue = $oJsonResponse.StringOf("Invoice.CustomField[i].StringValue")
    $sType = $oJsonResponse.StringOf("Invoice.CustomField[i].Type")
    $sName = $oJsonResponse.StringOf("Invoice.CustomField[i].Name")
    $i = $i + 1
Wend