---
title: "Estimate tax"
method: POST
path: "/v1/tax/estimate"
tags: ["Tax Estimation"]
---

# Estimate tax

`POST /v1/tax/estimate`

The Estimate Tax API calculates the estimated tax for a specific
    transaction based on the provided details, including organization nexus,
    transaction details, customer details, and addresses. Optionally simulates nexus being met for tax calculation purposes. The `simulate_nexus_met` parameter is deprecated and will be removed in future releases.

## Query parameters

- `simulate_nexus_met` boolean — **Deprecated:** Use `simulate_active_registration` in the request body instead.

## Headers

- `x-organization-id` string, nullable, required — The unique identifier for the organization making the request

## Request body

- TransactionEstimatePublicRequest — Public request model for tax estimation API documentation. This model excludes internal fields like enriched_fields and total_amount that should not be exposed in API docs.
  - `date` string, date-time, required — The date of the transaction in ISO 8601 format (e.g., 2025-01-25T12:00:00Z).
  - `external_id` string, required — Unique identifier of this transaction in the source system.
  - `currency` 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GGP' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'IMP' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JEP' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRU' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SPL' | 'SRD' | 'STN' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TVD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XDR' | 'XOF' | 'XPF' | 'YER' | 'ZAR' | 'ZMW' | 'ZWD', required
  - `description` string, nullable — An optional description of the transaction.
  - `source` 'BIGCOMMERCE' | 'BESTBUY' | 'BUNNY' | 'CHARGEBEE' | 'SHOPIFY' | 'SHOPLINE' | 'ECWID' | 'STRIPE' | 'AMAZON' | 'TIKTOK' | 'CUSTOM' | 'UNKNOWN' | 'IMPORT' | 'ZUORA' | 'APIDECK' | 'QUICKBOOKS' | 'API' | 'APPLE_APP_STORE' | 'GOOGLE_APP_STORE' | 'WALMART' | 'PAYPAL' | 'NETSUITE' | 'XERO' | 'MAXIO' | 'RECURLY' | 'SALESFORCE' | 'ETSY' | 'EBAY' | 'WIX' | 'SQUARESPACE' | 'WOOCOMMERCE' | 'MAGENTO' | 'MACYS' | 'BILLING_PLATFORM' | 'DEEL' | 'RIPPLING' | 'GUSTO' | 'FACEBOOK' | 'OTHER' | 'ORDWAY' | 'INSTAGRAM' | 'PINTEREST' | 'WAYFAIR' | 'WISH' | 'POS' | 'TARGET' | 'NEWEGG' | 'GROUPON' | 'GOOGLE_EXPRESS' | 'NOCNOC' | 'MERCADO_LIBRE' | 'MODALYST' | 'NORDSTROM' | 'FAIRE' | 'SHOPWARE' | 'ZOHO' | 'SAGE-INTACCT' | 'AIRWALLEX' | 'ORB' | 'ZENSKAR' | 'MICROSOFT_DYNAMICS_365' | 'KICKSTARTER' | 'INTERNAL_ERP' | 'RILLET' | 'CAMPFIRE' | 'KILL_BILL' | 'PROVISION' | 'VERTEX_O_SERIES' | 'CHECKOUTCHAMP' | 'DUALENTRY' | 'ODOO' | 'BILL_COM' | 'INTUIT_ENTERPRISE_SUITE' | 'ACUMATICA'
  - `marketplace` boolean, nullable — Indicates if the transaction involves a marketplace.
  - `transaction_items` TransactionItemEstimateBase[], required — List of items involved in the transaction.
    - `external_id` string, nullable — A unique identifier for the transaction item.
    - `date` string, date-time, required — The date of the transaction item.
    - `description` string, nullable — A description of the item.
    - `external_product_id` string, nullable — External product identifier. If not found and product_subcategory and product_category are not provided, an error occurs.
    - `product_name` string, nullable — Name of the product. Used if creating a new product.
    - `product_description` string, nullable — Description of the product. Used if creating a new product.
    - `product_source` 'BIGCOMMERCE' | 'BESTBUY' | 'BUNNY' | 'CHARGEBEE' | 'SHOPIFY' | 'SHOPLINE' | 'ECWID' | 'STRIPE' | 'AMAZON' | 'TIKTOK' | 'CUSTOM' | 'UNKNOWN' | 'IMPORT' | 'ZUORA' | 'APIDECK' | 'QUICKBOOKS' | 'API' | 'APPLE_APP_STORE' | 'GOOGLE_APP_STORE' | 'WALMART' | 'PAYPAL' | 'NETSUITE' | 'XERO' | 'MAXIO' | 'RECURLY' | 'SALESFORCE' | 'ETSY' | 'EBAY' | 'WIX' | 'SQUARESPACE' | 'WOOCOMMERCE' | 'MAGENTO' | 'MACYS' | 'BILLING_PLATFORM' | 'DEEL' | 'RIPPLING' | 'GUSTO' | 'FACEBOOK' | 'OTHER' | 'ORDWAY' | 'INSTAGRAM' | 'PINTEREST' | 'WAYFAIR' | 'WISH' | 'POS' | 'TARGET' | 'NEWEGG' | 'GROUPON' | 'GOOGLE_EXPRESS' | 'NOCNOC' | 'MERCADO_LIBRE' | 'MODALYST' | 'NORDSTROM' | 'FAIRE' | 'SHOPWARE' | 'ZOHO' | 'SAGE-INTACCT' | 'AIRWALLEX' | 'ORB' | 'ZENSKAR' | 'MICROSOFT_DYNAMICS_365' | 'KICKSTARTER' | 'INTERNAL_ERP' | 'RILLET' | 'CAMPFIRE' | 'KILL_BILL' | 'PROVISION' | 'VERTEX_O_SERIES' | 'CHECKOUTCHAMP' | 'DUALENTRY' | 'ODOO' | 'BILL_COM' | 'INTUIT_ENTERPRISE_SUITE' | 'ACUMATICA'
    - `product_subcategory` string, nullable — Subcategory of the product. Required if product_category is used in place of external_product_id.
    - `product_category` string, nullable — Category of the product. Required if product_subcategory is used in place of external_product_id.
    - `quantity` union — Defaults to 1.0. The quantity of the item.
      - number
      - string
    - `amount` union, required — The total amount of the item.
      - number
      - string
    - `exempt` boolean — Defaults to false. Indicates whether the item is exempt from tax.
    - `is_tax_inclusive` boolean — **Beta — not yet available in production.** When it is not enabled for your environment the field is accepted but ignored, and the response echoes `false`. Defaults to false. When true, `amount` is the gross (tax-included) price and the tax is backed out of it rather than added on top; for a taxable line, `taxable_amount` in the response is then the net base. When the line is not taxed - exempt, or no tax rule applies in the destination - `taxable_amount` is `0.00` rather than the net base, matching how exempt tax-exclusive lines already behave. Read the net amount as `taxable_amount` when `tax_amount` is non-zero, and as `amount` otherwise. This applies to the estimate in this request only. Transactions imported through a connection carry no such flag, so an order quoted here as gross is treated as net when it later syncs, and its recorded tax will be higher than this estimate. Send net amounts on the connection side, or reconcile the difference, until tax-inclusive import support ships.
  - `customer` CustomerBasePublic
    - `phone` string, nullable — Phone number associated with the address.
    - `street_1` string, nullable — Primary street address.
    - `street_2` string, nullable — Additional street address details, such as an apartment or suite number.
    - `city` string, nullable — City where the customer resides.
    - `county` string, nullable — County or district of the customer.
    - `state` string, nullable — State or province of the customer.
    - `postal_code` string, nullable — ZIP or Postal code of the customer.
    - `country` 'AF' | 'AX' | 'AL' | 'DZ' | 'AS' | 'AD' | 'AO' | 'AI' | 'AQ' | 'AG' | 'AR' | 'AM' | 'AW' | 'AU' | 'AT' | 'AZ' | 'BS' | 'BH' | 'BD' | 'BB' | 'BY' | 'BE' | 'BZ' | 'BJ' | 'BM' | 'BT' | 'BO' | 'BQ' | 'BA' | 'BW' | 'BV' | 'BR' | 'IO' | 'BN' | 'BG' | 'BF' | 'BI' | 'CV' | 'KH' | 'CM' | 'CA' | 'KY' | 'CF' | 'TD' | 'CL' | 'CN' | 'CX' | 'CC' | 'CO' | 'KM' | 'CG' | 'CD' | 'CK' | 'CR' | 'HR' | 'CU' | 'CW' | 'CY' | 'CZ' | 'DK' | 'DJ' | 'DM' | 'DO' | 'EC' | 'EG' | 'SV' | 'GQ' | 'ER' | 'EE' | 'SZ' | 'ET' | 'FK' | 'FO' | 'FJ' | 'FI' | 'FR' | 'GF' | 'PF' | 'TF' | 'GA' | 'GM' | 'GE' | 'DE' | 'GH' | 'GI' | 'GR' | 'GL' | 'GD' | 'GP' | 'GU' | 'GT' | 'GG' | 'GN' | 'GW' | 'GY' | 'HT' | 'HM' | 'VA' | 'HN' | 'HK' | 'HU' | 'IS' | 'IN' | 'ID' | 'IR' | 'IQ' | 'IE' | 'IM' | 'IL' | 'IT' | 'CI' | 'JM' | 'JP' | 'JE' | 'JO' | 'KZ' | 'KE' | 'KI' | 'KP' | 'KR' | 'KW' | 'KG' | 'LA' | 'LV' | 'LB' | 'LS' | 'LR' | 'LY' | 'LI' | 'LT' | 'LU' | 'MO' | 'MG' | 'MW' | 'MY' | 'MV' | 'ML' | 'MT' | 'MH' | 'MQ' | 'MR' | 'MU' | 'YT' | 'MX' | 'FM' | 'MD' | 'MC' | 'MN' | 'ME' | 'MS' | 'MA' | 'MZ' | 'MM' | 'NA' | 'NR' | 'NP' | 'NL' | 'NC' | 'NZ' | 'NI' | 'NE' | 'NG' | 'NU' | 'NF' | 'MK' | 'MP' | 'NO' | 'OM' | 'PK' | 'PW' | 'PS' | 'PA' | 'PG' | 'PY' | 'PE' | 'PH' | 'PN' | 'PL' | 'PT' | 'PR' | 'QA' | 'RE' | 'RO' | 'RU' | 'RW' | 'BL' | 'SH' | 'KN' | 'LC' | 'MF' | 'PM' | 'VC' | 'WS' | 'SM' | 'ST' | 'SA' | 'SN' | 'RS' | 'SC' | 'SL' | 'SG' | 'SX' | 'SK' | 'SI' | 'SB' | 'SO' | 'ZA' | 'GS' | 'SS' | 'ES' | 'LK' | 'SD' | 'SR' | 'SJ' | 'SE' | 'CH' | 'SY' | 'TW' | 'TJ' | 'TZ' | 'TH' | 'TL' | 'TG' | 'TK' | 'TO' | 'TT' | 'TN' | 'TR' | 'TM' | 'TC' | 'TV' | 'UG' | 'UA' | 'AE' | 'GB' | 'US' | 'UM' | 'UY' | 'UZ' | 'VU' | 'VE' | 'VN' | 'VG' | 'VI' | 'WF' | 'EH' | 'YE' | 'ZM' | 'ZW' | 'XK' | 'ZZ_EU'
    - `full_address` string, nullable — Complete address string of the customer, which can be used as an alternative to individual fields.
    - `name` string, nullable — Name of the customer.
    - `external_id` string, nullable — A unique identifier for the customer.
    - `status` 'ACTIVE' | 'ARCHIVED'
    - `email` string, nullable — Email address of the customer.
    - `company_name` string, nullable — Registered or legal business name of the customer.
    - `address_status` 'UNVERIFIED' | 'INVALID' | 'PARTIALLY_VERIFIED' | 'VERIFIED' | 'UNVERIFIABLE' | 'BLANK'
    - `source` 'BIGCOMMERCE' | 'BESTBUY' | 'BUNNY' | 'CHARGEBEE' | 'SHOPIFY' | 'SHOPLINE' | 'ECWID' | 'STRIPE' | 'AMAZON' | 'TIKTOK' | 'CUSTOM' | 'UNKNOWN' | 'IMPORT' | 'ZUORA' | 'APIDECK' | 'QUICKBOOKS' | 'API' | 'APPLE_APP_STORE' | 'GOOGLE_APP_STORE' | 'WALMART' | 'PAYPAL' | 'NETSUITE' | 'XERO' | 'MAXIO' | 'RECURLY' | 'SALESFORCE' | 'ETSY' | 'EBAY' | 'WIX' | 'SQUARESPACE' | 'WOOCOMMERCE' | 'MAGENTO' | 'MACYS' | 'BILLING_PLATFORM' | 'DEEL' | 'RIPPLING' | 'GUSTO' | 'FACEBOOK' | 'OTHER' | 'ORDWAY' | 'INSTAGRAM' | 'PINTEREST' | 'WAYFAIR' | 'WISH' | 'POS' | 'TARGET' | 'NEWEGG' | 'GROUPON' | 'GOOGLE_EXPRESS' | 'NOCNOC' | 'MERCADO_LIBRE' | 'MODALYST' | 'NORDSTROM' | 'FAIRE' | 'SHOPWARE' | 'ZOHO' | 'SAGE-INTACCT' | 'AIRWALLEX' | 'ORB' | 'ZENSKAR' | 'MICROSOFT_DYNAMICS_365' | 'KICKSTARTER' | 'INTERNAL_ERP' | 'RILLET' | 'CAMPFIRE' | 'KILL_BILL' | 'PROVISION' | 'VERTEX_O_SERIES' | 'CHECKOUTCHAMP' | 'DUALENTRY' | 'ODOO' | 'BILL_COM' | 'INTUIT_ENTERPRISE_SUITE' | 'ACUMATICA'
    - `registration_number` string, nullable
    - `connection_id` string, nullable — Unique identifier of the connection related to the customer.
  - `addresses` object[], required — List of addresses related to the transaction. At least one BILL_TO or SHIP_TO address must be provided. The address will be validated during estimation, and the transaction may be rejected if the address does not pass validation. The SHIP_TO will be preferred to use for determining tax liability.
    - `type` 'SHIP_TO' | 'BILL_TO', required — Type of the address. Must be either SHIP_TO or BILL_TO.
    - `phone` string — Phone number associated with the customer.
    - `street_1` string — Primary street address of the customer.
    - `street_2` string — Additional street address details, such as an apartment or suite number.
    - `city` string — City where the customer resides.
    - `county` string — County or district of the customer.
    - `state` string, required — State or province of the address.
    - `postal_code` string, required — Postal code of the address.
    - `country` string, required — Country of the address.
    - `full_address` string — Complete address string of the customer, which can be used as an alternative to individual fields.
    - `status` string — Deprecated: ignored on estimate. Accepted for backward compatibility; each address is validated from structured fields.
    - `is_unincorporated` boolean — If true, city-level tax rates are not applied for this address.

## Response `200`

Successfully retrieved data

- TransactionEstimateResponse
  - `date` string, date-time, required — The date of the transaction in ISO 8601 format (e.g., 2025-01-25T12:00:00Z).
  - `external_id` string, required — Unique identifier of this transaction in the source system.
  - `currency` 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BZD' | 'CAD' | 'CDF' | 'CHF' | 'CLP' | 'CNY' | 'COP' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GGP' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'IMP' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JEP' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRU' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SPL' | 'SRD' | 'STN' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TVD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'UYU' | 'UZS' | 'VEF' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XCD' | 'XDR' | 'XOF' | 'XPF' | 'YER' | 'ZAR' | 'ZMW' | 'ZWD', required
  - `description` string, nullable — An optional description of the transaction.
  - `source` 'BIGCOMMERCE' | 'BESTBUY' | 'BUNNY' | 'CHARGEBEE' | 'SHOPIFY' | 'SHOPLINE' | 'ECWID' | 'STRIPE' | 'AMAZON' | 'TIKTOK' | 'CUSTOM' | 'UNKNOWN' | 'IMPORT' | 'ZUORA' | 'APIDECK' | 'QUICKBOOKS' | 'API' | 'APPLE_APP_STORE' | 'GOOGLE_APP_STORE' | 'WALMART' | 'PAYPAL' | 'NETSUITE' | 'XERO' | 'MAXIO' | 'RECURLY' | 'SALESFORCE' | 'ETSY' | 'EBAY' | 'WIX' | 'SQUARESPACE' | 'WOOCOMMERCE' | 'MAGENTO' | 'MACYS' | 'BILLING_PLATFORM' | 'DEEL' | 'RIPPLING' | 'GUSTO' | 'FACEBOOK' | 'OTHER' | 'ORDWAY' | 'INSTAGRAM' | 'PINTEREST' | 'WAYFAIR' | 'WISH' | 'POS' | 'TARGET' | 'NEWEGG' | 'GROUPON' | 'GOOGLE_EXPRESS' | 'NOCNOC' | 'MERCADO_LIBRE' | 'MODALYST' | 'NORDSTROM' | 'FAIRE' | 'SHOPWARE' | 'ZOHO' | 'SAGE-INTACCT' | 'AIRWALLEX' | 'ORB' | 'ZENSKAR' | 'MICROSOFT_DYNAMICS_365' | 'KICKSTARTER' | 'INTERNAL_ERP' | 'RILLET' | 'CAMPFIRE' | 'KILL_BILL' | 'PROVISION' | 'VERTEX_O_SERIES' | 'CHECKOUTCHAMP' | 'DUALENTRY' | 'ODOO' | 'BILL_COM' | 'INTUIT_ENTERPRISE_SUITE' | 'ACUMATICA'
  - `marketplace` boolean, nullable — Indicates if the transaction involves a marketplace.
  - `transaction_items` TransactionItemEstimateResponse[], required
    - `external_id` string, nullable — A unique identifier for the transaction item.
    - `date` string, date-time, required — The date of the transaction item.
    - `description` string, nullable — A description of the item.
    - `external_product_id` string, nullable — External product identifier. If not found and product_subcategory and product_category are not provided, an error occurs.
    - `product_name` string, nullable — Name of the product. Used if creating a new product.
    - `product_description` string, nullable — Description of the product. Used if creating a new product.
    - `product_source` 'BIGCOMMERCE' | 'BESTBUY' | 'BUNNY' | 'CHARGEBEE' | 'SHOPIFY' | 'SHOPLINE' | 'ECWID' | 'STRIPE' | 'AMAZON' | 'TIKTOK' | 'CUSTOM' | 'UNKNOWN' | 'IMPORT' | 'ZUORA' | 'APIDECK' | 'QUICKBOOKS' | 'API' | 'APPLE_APP_STORE' | 'GOOGLE_APP_STORE' | 'WALMART' | 'PAYPAL' | 'NETSUITE' | 'XERO' | 'MAXIO' | 'RECURLY' | 'SALESFORCE' | 'ETSY' | 'EBAY' | 'WIX' | 'SQUARESPACE' | 'WOOCOMMERCE' | 'MAGENTO' | 'MACYS' | 'BILLING_PLATFORM' | 'DEEL' | 'RIPPLING' | 'GUSTO' | 'FACEBOOK' | 'OTHER' | 'ORDWAY' | 'INSTAGRAM' | 'PINTEREST' | 'WAYFAIR' | 'WISH' | 'POS' | 'TARGET' | 'NEWEGG' | 'GROUPON' | 'GOOGLE_EXPRESS' | 'NOCNOC' | 'MERCADO_LIBRE' | 'MODALYST' | 'NORDSTROM' | 'FAIRE' | 'SHOPWARE' | 'ZOHO' | 'SAGE-INTACCT' | 'AIRWALLEX' | 'ORB' | 'ZENSKAR' | 'MICROSOFT_DYNAMICS_365' | 'KICKSTARTER' | 'INTERNAL_ERP' | 'RILLET' | 'CAMPFIRE' | 'KILL_BILL' | 'PROVISION' | 'VERTEX_O_SERIES' | 'CHECKOUTCHAMP' | 'DUALENTRY' | 'ODOO' | 'BILL_COM' | 'INTUIT_ENTERPRISE_SUITE' | 'ACUMATICA'
    - `product_subcategory` string, nullable — Subcategory of the product. Required if product_category is used in place of external_product_id.
    - `product_category` string, nullable — Category of the product. Required if product_subcategory is used in place of external_product_id.
    - `quantity` string — Defaults to 1.0. The quantity of the item.
    - `amount` string, required — The total amount of the item.
    - `exempt` boolean — Indicates whether the transaction item is exempt from tax.
    - `is_tax_inclusive` boolean — **Beta — not yet available in production.** When it is not enabled for your environment the field is accepted but ignored, and the response echoes `false`. Defaults to false. When true, `amount` is the gross (tax-included) price and the tax is backed out of it rather than added on top; for a taxable line, `taxable_amount` in the response is then the net base. When the line is not taxed - exempt, or no tax rule applies in the destination - `taxable_amount` is `0.00` rather than the net base, matching how exempt tax-exclusive lines already behave. Read the net amount as `taxable_amount` when `tax_amount` is non-zero, and as `amount` otherwise. This applies to the estimate in this request only. Transactions imported through a connection carry no such flag, so an order quoted here as gross is treated as net when it later syncs, and its recorded tax will be higher than this estimate. Send net amounts on the connection side, or reconcile the difference, until tax-inclusive import support ships.
    - `tax_amount` string — The total tax amount for the transaction item.
    - `taxable_amount` string — The taxable amount for the transaction item.
    - `tax_rate` string — The tax rate applied to the transaction item.
    - `exempt_reason` 'PRODUCT' | 'TRANSACTION' | 'CUSTOMER' | 'WHOLESALE' | 'REGION' | 'REVERSE_CHARGE' | 'ZERO_RATE_TAX' | 'HIGH_VALUE_PHYSICAL_GOODS' | 'EXPORT' | 'ZERO_VALUE_ITEM' | 'NO_RULE_FOUND' | 'IMPORTED' | 'ZERO_RATE_NOT_EXEMPT' — This enum is used to determine if a transaction is exempt from tax.
    - `tax_items` TaxItemEstimate[] — List of tax items applied to the transaction item.
      - `rate` string
      - `name` string, required
      - `amount` string
      - `exempt` boolean
      - `exempt_reason` 'NO_RULE_FOUND' | 'RULE_FOUND_TAXABLE' | 'RULE_FOUND_NOT_TAXABLE' | 'RULE_FOUND_TAXABLE_ZERO_RATE' | 'PRODUCT_EXEMPT' | 'FROM_IMPORT' | 'RULE_EXCLUDED_IN_CALCULATION' | 'REVERSE_CHARGE' — We use this to understand the response from get_tax_items
      - `rule` string, nullable
  - `customer` CustomerBase
    - `phone` string, nullable — Phone number associated with the address.
    - `street_1` string, nullable — Primary street address.
    - `street_2` string, nullable — Additional street address details, such as an apartment or suite number.
    - `city` string, nullable — City where the customer resides.
    - `county` string, nullable — County or district of the customer.
    - `state` string, nullable — State or province of the customer.
    - `postal_code` string, nullable — ZIP or Postal code of the customer.
    - `country` 'AF' | 'AX' | 'AL' | 'DZ' | 'AS' | 'AD' | 'AO' | 'AI' | 'AQ' | 'AG' | 'AR' | 'AM' | 'AW' | 'AU' | 'AT' | 'AZ' | 'BS' | 'BH' | 'BD' | 'BB' | 'BY' | 'BE' | 'BZ' | 'BJ' | 'BM' | 'BT' | 'BO' | 'BQ' | 'BA' | 'BW' | 'BV' | 'BR' | 'IO' | 'BN' | 'BG' | 'BF' | 'BI' | 'CV' | 'KH' | 'CM' | 'CA' | 'KY' | 'CF' | 'TD' | 'CL' | 'CN' | 'CX' | 'CC' | 'CO' | 'KM' | 'CG' | 'CD' | 'CK' | 'CR' | 'HR' | 'CU' | 'CW' | 'CY' | 'CZ' | 'DK' | 'DJ' | 'DM' | 'DO' | 'EC' | 'EG' | 'SV' | 'GQ' | 'ER' | 'EE' | 'SZ' | 'ET' | 'FK' | 'FO' | 'FJ' | 'FI' | 'FR' | 'GF' | 'PF' | 'TF' | 'GA' | 'GM' | 'GE' | 'DE' | 'GH' | 'GI' | 'GR' | 'GL' | 'GD' | 'GP' | 'GU' | 'GT' | 'GG' | 'GN' | 'GW' | 'GY' | 'HT' | 'HM' | 'VA' | 'HN' | 'HK' | 'HU' | 'IS' | 'IN' | 'ID' | 'IR' | 'IQ' | 'IE' | 'IM' | 'IL' | 'IT' | 'CI' | 'JM' | 'JP' | 'JE' | 'JO' | 'KZ' | 'KE' | 'KI' | 'KP' | 'KR' | 'KW' | 'KG' | 'LA' | 'LV' | 'LB' | 'LS' | 'LR' | 'LY' | 'LI' | 'LT' | 'LU' | 'MO' | 'MG' | 'MW' | 'MY' | 'MV' | 'ML' | 'MT' | 'MH' | 'MQ' | 'MR' | 'MU' | 'YT' | 'MX' | 'FM' | 'MD' | 'MC' | 'MN' | 'ME' | 'MS' | 'MA' | 'MZ' | 'MM' | 'NA' | 'NR' | 'NP' | 'NL' | 'NC' | 'NZ' | 'NI' | 'NE' | 'NG' | 'NU' | 'NF' | 'MK' | 'MP' | 'NO' | 'OM' | 'PK' | 'PW' | 'PS' | 'PA' | 'PG' | 'PY' | 'PE' | 'PH' | 'PN' | 'PL' | 'PT' | 'PR' | 'QA' | 'RE' | 'RO' | 'RU' | 'RW' | 'BL' | 'SH' | 'KN' | 'LC' | 'MF' | 'PM' | 'VC' | 'WS' | 'SM' | 'ST' | 'SA' | 'SN' | 'RS' | 'SC' | 'SL' | 'SG' | 'SX' | 'SK' | 'SI' | 'SB' | 'SO' | 'ZA' | 'GS' | 'SS' | 'ES' | 'LK' | 'SD' | 'SR' | 'SJ' | 'SE' | 'CH' | 'SY' | 'TW' | 'TJ' | 'TZ' | 'TH' | 'TL' | 'TG' | 'TK' | 'TO' | 'TT' | 'TN' | 'TR' | 'TM' | 'TC' | 'TV' | 'UG' | 'UA' | 'AE' | 'GB' | 'US' | 'UM' | 'UY' | 'UZ' | 'VU' | 'VE' | 'VN' | 'VG' | 'VI' | 'WF' | 'EH' | 'YE' | 'ZM' | 'ZW' | 'XK' | 'ZZ_EU'
    - `full_address` string, nullable — Complete address string of the customer, which can be used as an alternative to individual fields.
    - `name` string, nullable — Name of the customer.
    - `external_id` string, nullable — A unique identifier for the customer.
    - `status` 'ACTIVE' | 'ARCHIVED'
    - `email` string, nullable — Email address of the customer.
    - `company_name` string, nullable — Registered or legal business name of the customer.
    - `address_status` 'UNVERIFIED' | 'INVALID' | 'PARTIALLY_VERIFIED' | 'VERIFIED' | 'UNVERIFIABLE' | 'BLANK'
    - `source` 'BIGCOMMERCE' | 'BESTBUY' | 'BUNNY' | 'CHARGEBEE' | 'SHOPIFY' | 'SHOPLINE' | 'ECWID' | 'STRIPE' | 'AMAZON' | 'TIKTOK' | 'CUSTOM' | 'UNKNOWN' | 'IMPORT' | 'ZUORA' | 'APIDECK' | 'QUICKBOOKS' | 'API' | 'APPLE_APP_STORE' | 'GOOGLE_APP_STORE' | 'WALMART' | 'PAYPAL' | 'NETSUITE' | 'XERO' | 'MAXIO' | 'RECURLY' | 'SALESFORCE' | 'ETSY' | 'EBAY' | 'WIX' | 'SQUARESPACE' | 'WOOCOMMERCE' | 'MAGENTO' | 'MACYS' | 'BILLING_PLATFORM' | 'DEEL' | 'RIPPLING' | 'GUSTO' | 'FACEBOOK' | 'OTHER' | 'ORDWAY' | 'INSTAGRAM' | 'PINTEREST' | 'WAYFAIR' | 'WISH' | 'POS' | 'TARGET' | 'NEWEGG' | 'GROUPON' | 'GOOGLE_EXPRESS' | 'NOCNOC' | 'MERCADO_LIBRE' | 'MODALYST' | 'NORDSTROM' | 'FAIRE' | 'SHOPWARE' | 'ZOHO' | 'SAGE-INTACCT' | 'AIRWALLEX' | 'ORB' | 'ZENSKAR' | 'MICROSOFT_DYNAMICS_365' | 'KICKSTARTER' | 'INTERNAL_ERP' | 'RILLET' | 'CAMPFIRE' | 'KILL_BILL' | 'PROVISION' | 'VERTEX_O_SERIES' | 'CHECKOUTCHAMP' | 'DUALENTRY' | 'ODOO' | 'BILL_COM' | 'INTUIT_ENTERPRISE_SUITE' | 'ACUMATICA'
    - `registration_number` string, nullable
    - `connection_id` string, nullable — Unique identifier of the connection related to the customer.
  - `addresses` object[], required — List of addresses related to the transaction. At least one BILL_TO or SHIP_TO address must be provided. The address will be validated during estimation, and the transaction may be rejected if the address does not pass validation. The SHIP_TO will be preferred to use for determining tax liability. Optional per-address `status` is deprecated, accepted for backward compatibility, and ignored; estimation always validates from structured address fields.
    - `type` 'SHIP_TO' | 'BILL_TO', required — Type of the address. Must be either SHIP_TO or BILL_TO.
    - `phone` string — Phone number associated with the customer.
    - `street_1` string — Primary street address of the customer.
    - `street_2` string — Additional street address details, such as an apartment or suite number.
    - `city` string — City where the customer resides.
    - `county` string — County or district of the customer.
    - `state` string, required — State or province of the address.
    - `postal_code` string, required — Postal code of the address.
    - `country` string, required — Country of the address.
    - `full_address` string — Complete address string of the customer, which can be used as an alternative to individual fields.
    - `status` string — Deprecated: ignored on estimate. Accepted for backward compatibility; each address is validated from structured fields.
    - `enriched_fields` string — Additional enriched fields related to the address.
    - `is_unincorporated` boolean — If true, city-level tax rates are not applied for this address.
  - `total_tax_amount_calculated` string — The total amount of tax determined for the transaction.
  - `taxable_amount` string — The taxable amount for the transaction.
  - `tax_rate_calculated` string — The calculated tax rate for the transaction.
  - `nexus_met` boolean — Indicates if nexus was met for the transaction.**Deprecated:** Use `has_active_registration` instead.
  - `has_active_registration` boolean — Indicates if there is an active registration for the transaction.

## Other responses

- `400` — Invalid tax-estimation input
- `401` — Authorization Error
- `404` — Resource Not Found
- `422` — Validation Error
- `500` — Server Error
- `503` — Address validation temporarily unavailable

## Changes

- **2026-08-29** `6ba4f4c774c3` — 129 breaking, 17 warning, 34 info
  - added the new required `header` request parameter `x-organization-id`
  - removed the enum value `AIRWALLEX` of the request property `source`
  - removed the enum value `AIRWALLEX` of the request property `transaction_items/items/product_source`
  - removed the enum value `AMAZON` of the request property `source`
  - …176 more
  - …this revision’s changelog is incomplete

[Change history](https://skmtc.dev/trykintsugi/apis/tax-platform/changes/v1/tax/estimate/post.md)

---

[API](https://skmtc.dev/trykintsugi/apis/tax-platform.md) · [All operations](https://skmtc.dev/trykintsugi/apis/tax-platform/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/trykintsugi/tax-platform/revisions/619f68f41988/schema)
