Integrate Avalara for Point of Sale

Automate tax calculations and tax filing by using Avalara in Point of Sale.

When you configure Avalara for POS, Avalara performs all tax computations for sale transactions.

Requirements:

  • Modern POS App Build: 6.2.3 or later
  • Platform Support: iPad
  • Offline Support: Yes
  • Avalara account
  • Product feed file with a column for Avalara's Tax Code
  • OMS integration for refunds, exchanges, and cancellations

Set Up Tax Engine

Important
Important Use Avalara V2 integration. Avalara V2 synchronizes detailed tax information, including item tax, shipping tax, and total tax, with Avalara's system to verify accurate tax calculations for all orders. Avalara V1 doesn't offer syncing support and can result in tax miscalculations.
  1. In CMS, go to Integrations | Tax Engine Configuration.
  2. Click Create.
  3. Under Tax Engine, select Avalara V2.
  4. Configure the remaining fields. For field descriptions, see Integrate Tax Engines.
  5. (Optional) After filling out the fields under Connectivity and Authentication, click Verify to test the connection to Avalara.
  6. In CMS, go to Store Management | Store Settings | OMS | Advanced.
  7. Turn on Pre-generate order ID and use it as cart ID. This setting enables Avalara's Sales Invoice Number to use Point of Sale's Order ID.
  8. Save your changes.

Product Field Mapping

Field mapping applies only if you upload products using feed files and support both online and offline transactions. If you upload products using an API, provide the tax class using the selected custom attribute in the payload. For payload specifications, see Point of Sale's SwaggerHub documentation.

To support tax calculation in offline mode, map product feed attributes to include tax types dynamically.

  1. In CMS, go to Feeds | Field Mapping | Products.
  2. Under Source Fields, map the tax custom attributes to a different custom attribute. For example, map taxClassID to CustomString12.A form shows field transformation from SKU to custom string.
  3. In CMS, go to Store Management | Store Settings | Checkout.
  4. Expand Tax.
  5. Under Product Field to read tax class, enter the custom string you previously mapped in camelCase format (for example, customString12).An input box contains a product field.
Note
Note Don't send a separate tax class field in the product feed.

This screenshot shows the tax class "GENERIC" configured in the product feed. During offline processing, this tax class determines the tax rate. Your tax class can differ (for example, PC040100 or PC000000) based on your Avalara mapping.

A field transformation form enables modification of a string with regular expressions.

Offline process requires this product feed setting because offline processing supports a default tax class configured for all store locations.

Note
Note Upload the product feed after completing these settings.

Schedule Tax Rate File Download

Avalara computes taxes directly, so the tax feed isn't necessary for online processing. If you support both online and offline processing, upload the tax feed from Avalara to calculate taxes during offline mode. Tax rates are zip code-specific, so make sure that the store's postal code in CMS and Avalara match. For more information, see Avalara's Download Feature.

You can upload the tax feed from Avalara at scheduled intervals.

  1. In CMS, go to Feeds | Scheduled Upload.
  2. Click the plus (+) icon and select Tax Rates.
  3. Configure the date and time of the schedule. For field descriptions, see Scheduling Feeds.
  4. Under Feed Source Type, select Avalara.
  5. Under Account ID, enter your Avalara account ID.
  6. Under License Key, enter your Avalara license key.
  7. Under Base URL, enter the Avalara base URL (for example, https://sandbox-rest.avatax.com/api/v2).
  8. Under Feed File Type, select the feed file type (for example, CSV or TSV).
Note
Note A separate feed file for the tax rate isn't required.

Commit Tax Transaction

Point of Sale supports conditional tax transaction commits in Avalara after a sale transaction to confirm that the appropriate tax applies in the app. By default, Point of Sale doesn't auto-commit the tax transaction. To turn on auto-commit after completing a sale transaction, configure this setting.

  1. In CMS, go to Store Management | Store Settings.
  2. Under Modules, go to Tax.
  3. Turn on Submit/Finalize Tax Details After Order Submission.

Enable Value-added Tax (VAT)

To send tax-inclusive pricing to Avalara and map external tax IDs to your downstream systems, enable the VAT setting.

  1. In CMS, go to Store Management | Store Settings | Tax.
  2. Turn on Is VAT enabled for this merchant.

OMS Integration

Set up an OMS integration (for example, NetSuite) to post order refunds, exchanges, and cancellations to Avalara.

  1. In CMS, go to Integrations | OMS Configuration.
  2. Click Create.
  3. Select the OMS type and configure the remaining fields.

Additional Information

Onboard Merchant for Avalara Integration

Point of Sale's integration with Avalara uses the REST model for authentication. For more information, see Avalara's Authentication Method.

For offline transactions, Point of Sale supports tax rate file downloads from Avalara. Tax rates are zip code-specific. For more information, see Avalara's Download Feature.

Product feed changes for Avalara integration:

  • Online transactions only: You don't need to add tax-related attributes in the product feed.
  • Online and offline transactions: POS requires the CMS configurations in this topic for proper tax computation during offline transactions.

Tax Codes

Avalara Tax Codes apply the appropriate tax rates to individual products. Map the codes to your products as described in Product Field Mapping.

After mapping, Point of Sale sends the product ID as the itemCode and the mapped field (for example, CustomString12) as the taxCode. Avalara first looks for a match of the itemCode. If found, Avalara associates it with a tax code. If not found, Avalara looks for a match of the taxCode and applies the appropriate tax rate. Avalara defaults to P0000000 if the taxCode isn't available.

Offline Tax Feed Generation

A sequence diagram illustrates offline tax file generation.

Supported Avalara Endpoints

Point of Sale supports these Avalara endpoints:

Avalara Endpoint Point of Sale Usage
CreateOrAdjustTransaction
  • Tax computation during cart operations.
  • All Avalara tax requests, belonging to the same Point of Sale cart, group under the same Avalara transaction code.
  • Point of Sale cart uses salesInvoice to perform Avalara transactions for sale purposes.
CommitTransaction
  • After completing the sales transaction, Point of Sale commits the Avalara transaction created during cart operation.
  • This commit is conditional and POS does auto-commit if Submit/Finalize Tax Details After Order Submission is on. Refer to Commit Tax Transaction
DownloadTaxRatesByZipCode

Example JSON Request

When Point of Sale calls Avalara's API, we provide the following information and more:

  • Product IDs
  • Tax classes
  • Shipping addresses
  • Store addresses
Example
Example
Tax service request: {
 "createTransactionModel": {
   "code": "PS00270499",
   "type": "SalesInvoice",
   "companyCode": "DEFAULT",
   "date": "2023-11-28",
   "purchaseOrderNo": "PS00270499",
   "currencyCode": "USD",
   "lines": [
     {
       "number": "1",
       "quantity": 1,
       "amount": 40.00,
       "taxCode": "P0000000",
       "itemCode": "HRL75-RF1A",
       "description": "CRMSN SPARKLE DRESS-TM D",
       "addresses": {
         "shipFrom": {
           "line1": "75 Rockefeller Plaza",
           "city": "New York",
           "region": "NY",
           "postalCode": "10019"
       },
       "shipTo": {
         "line1": "75 Rockefeller Plaza",
         "city": "New York",
         "region": "NY",
         "postalCode": "10019"
       }
     }
   },
   {
     "number": "2",
     "quantity": 1,
     "amount": 0.05,
     "itemCode": "ECHOBAGNY05",
     "description": "ORDINANCE BAG TAX",
     "addresses": {
       "shipFrom": {
         "line1": "75 Rockefeller Plaza",
         "city": "New York",
         "region": "NY",
         "postalCode": "10019"
     },
     "shipTo": {
       "line1": "75 Rockefeller Plaza",
       "city": "New York",
       "region": "NY",
       "postalCode": "10019"
     }
   }
 }
 ],
   "addresses": {
     "shipFrom": {
       "line1": "75 Rockefeller Plaza",
       "city": "New York",
       "region": "NY",
       "postalCode": "10019"
  },
   "shipTo": {
     "line1": "75 Rockefeller Plaza",
     "city": "New York",
     "region": "NY",
     "postalCode": "10019"
    }
  },
  "customerCode": "Guest"
}
}, apiEndpoint: /transactions/createoradjust, method:POST

Known Issues and Restrictions

The following features have limitations with Avalara integration:

  • POS uses tax class during offline tax calculation only. Online tax calculation is based on the mapping provided in Avalara.
  • Offline tax exemption isn't available because Avalara doesn't provide a tax exemption feed for offline processing.
  • Configure overridden tax rates (for example, tax holidays) in Avalara to support tax override.
  • Fee for online mode is available only if configured in the Avalara system.
  • POS doesn't support offline tax override.
  • POS doesn't support fee for offline mode.