Logo
Home

Automated Sales Tax in the QuickBooks Online API – Update

NOTE: Blog updated to reflect release date, changes are available in sandbox now.

============================================================

Changes to US sales tax business logic for Quickbooks Online API coming soon (August 10, 2018). This change impacts only AST enabled compnies for sales transaction lines that do not contain a TaxCodeRef.

With this change, when a sales transaction line does not explicitly specify a TaxCodeRef, we will be treating that line as if the TaxCodeRef is TAX and we will determine the taxability of that line based on the item’s taxability.

This is different from the current behavior in which an empty TaxCodeRef is considered to be equivalent to a NON TaxCodeRef.

Description

An earlier blog tells how the Automated Sales Tax (AST) engine looks for a tax intent by inspecting the sales transaction payload for the TxnTaxDetail section, among others, to determine whether or not to apply sales tax. This blog outlines some of the other ways in which the tax intent is derived going forward.

Note: Every app has unique use cases and uses our APIs differently. There is a chance that this change might impact your application and therefore warrant a code change. We request that you review the details below and let us know if you need further assistance.

The QuickBooks Online vision of AST is for the QuickBooks Online platform to take up the responsibility of applying the right taxes on a transaction. Aligned with that vision, and aligned with QuickBooks Desktop SDK behaviors that are in place, we are tweaking the default behavior of the QuickBooks Online API to apply taxes in the same way the UI would. That is, to apply them based on the following criteria unless explicitly directed not to do so.

  • The taxability of the customer in question.
  • The address of record for the transaction. This is usually the shipping address, but possibly the business’ address or the location address.
  • The taxability of the items for the agencies that apply to the address of record.

The way to explicitly direct the Tax Engine not to apply taxes on a transaction or any of its lines, is to explicitly indicate NON against such lines.

The table below illustrates this change in behavior. For the sake of brevity, the Sample Payload column refers to lines in terms of the value mentioned against TaxCodeRef.

# Scenario Sample Payload Existing Behavior New Behavior
1 All Line Items are explicitly marked taxable. Line 1 – TAX

Line 2 – TAX

Line 3 – TAX

Not taxed (see preceding paragraph). All lines are be taxed.
2 All Items are explicitly marked non-taxable. Line 1 – NON

Line 2 – NON

Line 3 – NON

Not taxed. Not taxed.
3 No Items have taxability Information against them. Line 1 – NULL

Line 2 – NULL

Line 3 – NULL

Not taxed. The taxability of each line’s item is applied to the taxability of that line.
4 Combination of taxable and non-taxable lines. Line 1 – NON

Line 2 – NON

Line 3 – TAX

Not taxed. The 3rd line is Taxed based on the line Item’s taxability.
The first two does not have line taxability applied based on the item.  Note that this may affect e-filing later as the user would be required to specify a reason a given sales line was not taxed.
5 Combination of non-taxable lines and lines without taxability information. Line 1 – NULL

Line 2 – NULL

Line 3 – NON

Not taxed. The first two has the taxability of the item referenced applied to the taxability of the line.

The 3rd line is NOT taxed, overriding any decisions that the tax engine may make.

6 Combination of taxable lines and lines without taxability information. Line 1 – NULL

Line 2 – NULL

Line 3 – TAX

Not taxed. All three lines have the item’s tax rules applied.
7 Combination of taxable and ton-taxable and tines that do not have taxability specified Line 1 – TAX

Line 2 – NON

Line 3 – NULL

Not taxed. The first and third line has the item’s tax rules applied.

The second line is not taxed.

 

Note: In talking about the current and new behavior, this table assumes that the TxnTaxDetail element (transaction-level tax) is omitted from the transaction’s payload. The existing behavior therefore is not taxed for all scenarios, since the absence of that section in any part is currently interpreted as an intent to not apply any tax.

It should be evident from the above table, that if you’d like the Tax engine to NOT apply taxes against any line item, such lines need to explicitly marked NON in the TaxCodeRef section.

There are three ways in which tax can be explicitly mentioned at the line level for a sales transaction today:

  • TaxCodeRef specifying TAX.
  • TaxCodeRef specifying NON.
  • Omit the TaxCodeRef element completely

To illustrate this with an example, consider the following payload with three lines:

  …

 “Line”: [

   {

     “Amount”: 120,

     “Description”: “Graphic Tees”,

     “DetailType”: “SalesItemLineDetail”,

     “SalesItemLineDetail”: {

       “ItemRef”: {

         “value”: “5”

       },

        “TaxCodeRef”: {

         “value”: “TAX”

       }

     }

   },

   {

     “Amount”: 200,

     “Description”: “The Magic of Math”,

     “DetailType”: “SalesItemLineDetail”,

     “SalesItemLineDetail”: {

       “ItemRef”: {

         “value”: “3”

       },

        “TaxCodeRef”: {

         “value”: “NON”

       }

     }

   },

       {

     “Amount”: 240,

     “Description”: “Whiteboard Markers”,

     “DetailType”: “SalesItemLineDetail”,

     “SalesItemLineDetail”: {

       “ItemRef”: {

         “value”: “4”

       }

     }

   }

   …

This payload includes three line items, the first is marked taxable, the second is marked non-taxable and the third omits the TaxCodeRef section altogether. In the table above where various scenarios are outlined, the case above maps to # 7.


Posted

in

,

by

Tags:

Comments

15 responses to “Automated Sales Tax in the QuickBooks Online API – Update”

  1. Kevin Avatar
    Kevin

    Will specifying NON work currently? Do we need to wait to implement and if so until what date? Your API is a mess!

    1. Priya Avatar
      Priya

      Yes, it will work right now.

  2. curtis Avatar
    curtis

    So how can we tell the engine to tax at the Company location or the Customers location. There are different rules in may states that require certain items (motorcycles, cars, trucks, etc) to be taxed at the buyers location but tax standard goods at the company location. This is a huge hole I cant seem to get to work right with your existing invoicing UI. Any thoughts

    1. Diana Avatar
      Diana

      Hi Curtis – The AST engine takes into account all the different rules based on the state. For specific items, make sure to add the right value in “SalesTaxCategory” field and “What you sell” field for the tax rules to work correctly.

      1. curtis Avatar
        curtis

        Thanks but i looked at those fields and nothing seems to be what i sell. We sell motorcycles and motorcycle parts. Parts are taxed at the dealership and the motorcycle is taxed at the purchasers address. Where can i find information on how this is decided on the SalesTaxCategory and What you sell values that will work for this

  3. John Avatar
    John

    This post states that the we will be able to use “The taxability of the customer in question.” as a way to determine tax intent. Does this mean that we will be able to swap the tax exempt status of a customer object? I have been unable to set a customer to tax exempt through the API thus far. Updating values for “Taxable” or “TaxExemptionReasonId” seems to have no effect on the tax exempt status of a customer, and I have been unable to find any other properties which have an effect on it either.

  4. CJ Avatar
    CJ

    So assuming we are passing “Non” and “Tax” only, and never end up passing “Null” then this change should not effect us. Is that correct?

    1. Diana Avatar
      Diana

      Yes, that’s correct.

    2. Diana Avatar
      Diana

      Yes, that’s correct

  5. Steve Avatar
    Steve

    Have the changes that are mentioned in this update been instituted?

    1. Diana Avatar
      Diana

      Hi – This will be released next month, blog has been updated to reflect the release date.

  6. Chris Avatar
    Chris

    How can I add a “Sales Tax category” to items?
    If I am unable to add a category to items then using Automated Sales Tax won’t help me in any way.

    1. Diana Avatar
      Diana

      Hi Chris – Currently, this can be added only through the UI when Items are created, we are working on enabling this field in API as well.

  7. Geoff Avatar
    Geoff

    It appears that the behavior of example #3 above is still different in the sandbox versus production even though the article states this change went live 8/10/2018.

    Has this change made it’s way to production?

  8. Brian Avatar
    Brian

    For states that require jurisdictional reporting for a service company, it appears QBO is calculating the tax properly for our customers. However, I have lost 1 customer and having to help another customer establish the “Gross Sales” PER jurisdiction for their monthly Sales Tax submissions to the state. Am I totally misunderstanding the systems ability to report on sales tax? Or does QBO really not provide a report that will display “Gross Sales per Jurisdiction”?

Leave a Reply

Your email address will not be published. Required fields are marked *