Skip to main content

Discounts and sales tax

In most jurisdictions, sales tax is calculated on the taxable sale price of goods or services. Discounts can impact this taxable base, potentially lowering the amount of sales tax collected. However, the impact depends on the type of discount and how tax rules treat it in the relevant jurisdiction.
  • Seller-funded discounts generally reduce the taxable sale price.
  • Vendor-funded discounts often do not reduce the taxable sale price, as they are considered a reimbursement to the seller rather than a true price reduction.
  • The tax effect can vary by state or country.
Our API supports two distinct discount types, each with different tax implications.

Taxwire API

Seller-Funded Discount

discount_amount in the api call body
  • Definition: A discount offered directly by the seller, reducing their own margin.
  • Funding: Paid for entirely by the seller. No third-party reimbursement.
  • Tax Treatment:
    • For tax purposes, this discount is almost always treated as a true reduction in the taxable sale price.
    • The tax base is lowered by the discount amount.
Example:
{
  "discount_amount": "1000"
}
Amounts are strings in the smallest unit of the currency (e.g. cents for USD), so "1000" is $10.00. If the original taxable price is $100 and the seller applies a $10 discount:
  • Taxable sale price = $90
  • Sales tax is calculated on $90.

Vendor-Funded Discount

vendor_discount_amount in the api call body
  • Definition: A discount offered by the seller’s supplier (vendor) but applied by the seller at the time of sale.
  • Funding: The vendor reimburses the seller for the discount, so the seller’s margin is unaffected.
  • Tax Treatment:
    • In most US states, this discount does not reduce the taxable sale price, because the seller is reimbursed.
    • Viewed as a profit transfer from vendor to seller, not a true reduction in retail price.
    • Some states do allow the taxable base to be reduced by this discount.
Example:
{
  "vendor_discount_amount": "1500"
}
Here "1500" is $15.00. If the original taxable price is $100 and a $15 vendor discount is applied in a state that does not allow it to reduce taxable price:
  • Taxable sale price = $100
  • Sales tax is calculated on $100, even though the customer pays $85.

Where a discount is applied: line item vs. invoice

Both discount types (discount_amount and vendor_discount_amount) can be set in two places:
  • On a line item — set the field on a line_items[] entry. This reduces the taxable price of that specific item. It is the most precise option, and we recommend it whenever you know which item a discount belongs to. For a $50 line item with a $10 line-item discount, tax is calculated as if the item were $40.
  • On the invoice — set the field at the top level of the request. Taxwire applies it across the line items when calculating tax (see below).
The line-item and invoice-level discounts are not mutually exclusive — they stack. Taxwire applies each line item’s own discount first, then applies any invoice-level discount to what remains.

How invoice-level discounts are applied

An invoice-level discount is applied to the line items least-taxed items first. This is the safest approach: it avoids reducing the taxable base of the most highly-taxed items, which would risk under-collecting tax. If a state later audits the transaction and disagrees, under-collection is the costly outcome — so Taxwire defaults to the conservative approach.
Invoice-level discounts are applied to the lowest-taxed line items first — not the highest. A discount that lands on an exempt or non-taxable line reduces that line’s price but not the tax it owes, since its rate is already 0.
Simple illustration — an invoice-level discount of $75, with one exempt item of $50 and one taxable item of $50:
  1. The exempt item is the least taxed, so it absorbs the discount first: its price drops $50$0.
  2. The remaining $25 of discount is applied to the taxable item: its taxable price drops $50$25.
Tax is then calculated on $25.

Worked examples

Both examples below send an invoice-level discount_amount of "100" ($1.00) across two $10.00 line items in Austin, TX. They show the discount landing on the less-taxed line in each case. In the response, compare each line’s tax_amount against its tax_amount_before_discounts to see where the discount was absorbed.

SaaS taxed less than tangible goods

One line is tangible personal property (TPP), the other is SaaS. Austin’s combined rate of 8.25% (Texas 6.25% + Austin city 1% + transit 1%) applies to both, but Texas taxes SaaS on only 80% of its price, so the SaaS line is the less-taxed of the two. The invoice discount is applied to it.
Request
{
  "discount_amount": "100",
  "line_items": [
    {
      "unit_price": "1000",
      "quantity": "1",
      "customer": { "address": { "country": "US", "city": "Austin", "state": "TX" } },
      "product": { "tax_attributes": ["TANGIBLE_PERSONAL_PROPERTY"] }
    },
    {
      "unit_price": "1000",
      "quantity": "1",
      "customer": { "address": { "country": "US", "city": "Austin", "state": "TX" } },
      "product": { "tax_attributes": ["DIGITAL_SERVICES.SOFTWARE_AS_A_SERVICE"] }
    }
  ]
}
Line itemTax attributePriceInvoice discount appliedTaxable baseTax
#1TANGIBLE_PERSONAL_PROPERTY$10.00$10.00 (1000)$0.825 (82.5000)
#2SOFTWARE_AS_A_SERVICE$10.00$1.00$7.20 (720.0)$0.594 (59.40000)
Total tax: $1.419 (141.90000). The SaaS taxable base of $7.20 is (10.00 − 1.00) × 80%. On the SaaS line, tax_amount (59.40000) is below tax_amount_before_discounts (82.5000); on the TPP line the two are equal (82.5000), confirming the discount never touched it.
{
  "currency": "USD",
  "tax_amount": "141.90000",
  "line_items": [
    {
      "id": "item_909f05c0-5121-476c-9ee5-d4ad2a5d83e2",
      "tax_amount": "82.5000",
      "tax_amount_before_discounts": "82.5000",
      "discounts": [],
      "taxes": [
        { "detail": "TRANSIT", "jurisdiction_name": "AUSTIN METRO TRANSIT AUTHORITY", "jurisdiction_type": "district", "tax_amount": "10.00", "taxable_base": "1000", "tax_rate": "0.01", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true },
        { "detail": "CITY", "jurisdiction_name": "AUSTIN", "jurisdiction_type": "municipality", "tax_amount": "10.00", "taxable_base": "1000", "tax_rate": "0.01", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true },
        { "detail": "TEXAS STATE", "jurisdiction_name": "TEXAS", "jurisdiction_type": "state", "tax_amount": "62.5000", "taxable_base": "1000", "tax_rate": "0.0625", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true }
      ]
    },
    {
      "id": "item_510f2845-3188-49bd-ab39-fe20ee45978a",
      "tax_amount": "59.40000",
      "tax_amount_before_discounts": "82.5000",
      "discounts": [],
      "taxes": [
        { "detail": "TRANSIT", "jurisdiction_name": "AUSTIN METRO TRANSIT AUTHORITY", "jurisdiction_type": "district", "tax_amount": "7.200", "taxable_base": "720.0", "tax_rate": "0.01", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true },
        { "detail": "CITY", "jurisdiction_name": "AUSTIN", "jurisdiction_type": "municipality", "tax_amount": "7.200", "taxable_base": "720.0", "tax_rate": "0.01", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true },
        { "detail": "TEXAS STATE", "jurisdiction_name": "TEXAS", "jurisdiction_type": "state", "tax_amount": "45.00000", "taxable_base": "720.0", "tax_rate": "0.0625", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true }
      ]
    }
  ]
}
The EXEMPT - INTERSTATE OR FOREIGN COMMERCE (VIRGINIA SALES TAX) entries returned at 0 are omitted here for brevity.

Non-taxable line absorbs the discount

The second line is non-taxable. It is the least-taxed line (rate 0), so the invoice discount is applied to it — reducing its taxable base but not the tax, since the rate is 0.
Request
{
  "discount_amount": "100",
  "line_items": [
    {
      "unit_price": "1000",
      "quantity": "1",
      "customer": { "address": { "country": "US", "city": "Austin", "state": "TX" } },
      "product": { "tax_attributes": ["TANGIBLE_PERSONAL_PROPERTY"] }
    },
    {
      "unit_price": "1000",
      "quantity": "1",
      "customer": { "address": { "country": "US", "city": "Austin", "state": "TX" } },
      "product": { "tax_attributes": ["NONTAXABLE"] }
    }
  ]
}
Line itemTax attributePriceInvoice discount appliedTaxable baseTax
#1TANGIBLE_PERSONAL_PROPERTY$10.00$10.00 (1000)$0.825 (82.5000)
#2NONTAXABLE$10.00$1.00$9.00 (900)$0
Total tax: $0.825 (82.5000) — the same as if no discount were sent. Because the discount lands on the non-taxable line, its taxable base drops 1000900 but the tax stays 0. Sending that discount against the taxable TPP line instead would have lowered the tax and risked under-collection — which is exactly why Taxwire applies it to the least-taxed line first.
{
  "currency": "USD",
  "tax_amount": "82.5000",
  "line_items": [
    {
      "id": "item_ce4c59ce-52e8-4d05-876c-f040a87fa172",
      "tax_amount": "82.5000",
      "tax_amount_before_discounts": "82.5000",
      "discounts": [],
      "taxes": [
        { "detail": "TRANSIT", "jurisdiction_name": "AUSTIN METRO TRANSIT AUTHORITY", "jurisdiction_type": "district", "tax_amount": "10.00", "taxable_base": "1000", "tax_rate": "0.01", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true },
        { "detail": "CITY", "jurisdiction_name": "AUSTIN", "jurisdiction_type": "municipality", "tax_amount": "10.00", "taxable_base": "1000", "tax_rate": "0.01", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true },
        { "detail": "TEXAS STATE", "jurisdiction_name": "TEXAS", "jurisdiction_type": "state", "tax_amount": "62.5000", "taxable_base": "1000", "tax_rate": "0.0625", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true }
      ]
    },
    {
      "id": "item_0d17026a-85ce-45b4-a467-344a98f2b6b6",
      "tax_amount": "0",
      "tax_amount_before_discounts": "0",
      "discounts": [],
      "taxes": [
        { "detail": "NONTAXABLE", "jurisdiction_name": "AUSTIN METRO TRANSIT AUTHORITY", "jurisdiction_type": "district", "tax_amount": "0", "taxable_base": "900", "tax_rate": "0", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true },
        { "detail": "NONTAXABLE", "jurisdiction_name": "AUSTIN", "jurisdiction_type": "municipality", "tax_amount": "0", "taxable_base": "900", "tax_rate": "0", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true },
        { "detail": "NONTAXABLE", "jurisdiction_name": "TEXAS", "jurisdiction_type": "state", "tax_amount": "0", "taxable_base": "900", "tax_rate": "0", "tax_type": "TEXAS RETAILER USE TAX", "is_registered": true }
      ]
    }
  ]
}
The VIRGINIA SALES TAX entries returned at 0 are omitted here for brevity.

Multi-Merchant Transactions

When processing transactions involving multiple merchants (vendors) but one invoice:
  • Tax Calculation:
    • Assigning discounts to the correct line items is critical for determining the correct taxable amounts and jurisdictions.
    • Since there is only one customer per invoice, discounts won’t affect which jurisdictions get the tax — only how much tax is collected.
  • Order-Level Discounts:
    • The type of discount (discount_amount vs. vendor_discount_amount) determines the tax treatment, not which vendor offered it.
    • An unassigned, invoice-level discount is applied to the least-taxed line items first (see How invoice-level discounts are applied), regardless of which vendor’s item is discounted.
  • Tax Responsibility:
    • In a marketplace model, the marketplace (as retailer) is responsible for tax remittance.
    • Vendor identity does not change who remits the tax.
    • The main risk is that order-level discounts can lead to customers overpaying tax if applied incorrectly.