Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

Tax exemptions


Private preview

Tax exemptions Private preview

Apply tax exemptions to specific US states, Canadian provinces, or countries for a customer.

Note

Log in or sign up for Stripe to enable Stripe Tax.

Stripe Tax also checks the following on your account:

Tax exemptions let you attach one or more exemptions to a customer in the Dashboard, each scoped to a jurisdiction and date range. Stripe Tax automatically applies or removes tax per transaction depending on whether an active exemption covers that transaction’s tax jurisdiction.

These exemptions only affect tax calculations made by Stripe Tax. They don’t affect tax calculations performed by third-party tax providers, including Avalara and Anrok.

You remain responsible for managing and tracking your customers’ exemption certificates. Stripe Tax doesn’t let you upload, store, validate, or track exemption certificates. This feature only uses the exemptions you configure to determine Stripe Tax calculations.

Request early access to tax exemptions

Tax exemptions are in private preview. Register your interest and we'll follow up to confirm if you're eligible.

Before you begin

  • Activate Stripe Tax on your account.
  • Set the customer’s Tax status to Taxable . If Tax status is set to Exempt or Reverse charge , that global setting takes full precedence over any exemptions you’ve added. See Interact with the global tax status .

How it works

When you add an exemption to a customer, Stripe Tax uses it during calculation as follows:

  1. Stripe loads all active exemptions for the customer.
  2. Stripe matches those exemptions against the jurisdiction where tax is owed.
  3. If a matching active exemption exists, Stripe applies zero tax for that jurisdiction and sets taxability _ reason to customer _ exempt .
  4. Stripe taxes transactions for jurisdictions without a matching exemption normally.

Supported locations

RegionGranularityNotes
United StatesState levelA state-level exemption applies to all local jurisdictions within that state, including home rule jurisdictions.
CanadaProvince and tax typeExemptions can be applied on two levels: for federal GST/HST for all Canadian provinces, and for each of the provincial taxes. See Add Canada exemptions.
Other countriesCountry levelOne entry covers all transactions in that country.

Add an exemption

  1. In the Dashboard, open the customer’s detail page.
  2. In the Tax information section, find the Exemptions subsection and click Add an exemption .
  3. Select a Country from the dropdown.
  • For the United States, select the applicable State .
  • For Canada, select the applicable Province . Or, to exempt GST and HST across all Canadian provinces, select Canada GST and HST .
  1. Optionally set the date range:
  • Start date : If left blank, the exemption starts immediately. Set a future date to schedule the exemption.
  • End date : Set a date if the exemption expires. Leave blank for no expiration.
  1. Click Save .

The exemption appears in the customer’s Exemptions list. You can add as many exemptions as needed for different locations.

If the customer’s global Tax status is set to Exempt or Reverse charge, a warning appears. Set Tax status to Taxable first for exemptions to take effect.

Manage exemptions

View exemptions

In the Tax information section of the customer’s detail page, you can see all active and expired exemptions. Each row shows the location, start date, and end date, or “No end date” if the exemption doesn’t expire.

Delete an exemption

Click the delete icon next to an exemption and confirm. Deletion is permanent, so add the exemption again if you need to reinstate it.

Add US exemptions

Each US exemption is scoped to a single state. A state-level exemption applies to all local jurisdictions within that state, including home rule jurisdictions such as cities in Colorado that administer their own local sales tax.

Add Canada exemptions

The Canadian tax system consists of a combination of federal (GST/HST) and provincial (PST, QST, or RST) taxes. An exemption for the federal GST and HST applies to sales in all provinces, but an exemption for a provincial tax only applies to that tax in that province.

Understand GST and HST cross-province behavior

GST and HST both represent the federal component of Canadian tax. HST is the combined federal and provincial rate used in participating provinces. Because of this, an active GST or HST exemption for any province also exempts the GST or HST component in every other province.

To exempt a customer from GST and HST tax across all provinces, add a Canada GST and HST exemption.

To exempt a customer from provincial tax in a single province, add an exemption for that province.

Add multiple exemptions and overlapping date ranges

You can add multiple exemptions to the same customer. These can be across different locations, or for the same location with different date ranges. This covers common scenarios:

  • Annual exemption renewals : A customer’s 2026 exemption expires December 31. You receive confirmation of their 2027 exemption in November. Add it with a January 1, 2027 start date. The two exemptions can overlap.
  • Replacement exemptions : A customer receives a new tax exemption mid-year. Add it immediately. It can run concurrently with the existing one.

Two exemptions for the same location with the same start and end date count as an exact duplicate and can’t be added.

Interact with the global tax status

When you set a customer’s global tax status in the Dashboard, Stripe Tax uses that customer’s tax status globally by default, so a customer is either taxable, fully exempt, or subject to reverse charge everywhere.

The customer’s Tax status controls a global override that takes precedence over all exemptions:

Customer Tax statusExemptions presentResult
TaxableNoneTax calculated normally
TaxableActive exemptionsExemptions applied
ExemptAnyCustomer is exempt on all transactions
Reverse chargeAnyReverse charge on all transactions

Set the customer’s Tax status to Taxable in the Tax information section to activate behavior.

Exemptions and customizations

If you use Stripe Tax customizations to set custom tax rates, exemptions take precedence. A customer with an active exemption in a jurisdiction receives zero tax for that jurisdiction even if a custom rate is configured.

Unsupported scenarios

The following scenarios aren’t supported:

  • Local jurisdiction exemptions : You can’t scope an exemption to a specific city or county within a state, such as Chicago within Illinois. A state exemption applies to the entire state including all locals.
  • Exemption types : You can’t record the category of an exemption, such as resale, government, or nonprofit.
  • Exemption certificate management : Stripe Tax doesn’t let you upload, store, validate, or track exemption certificates. You must manage and track those certificates outside Stripe Tax.
  • Reduced-rate exemptions : You can’t apply a partial reduction in tax rate. Exemptions always result in zero tax for the covered jurisdiction.
  • Reverse charge per jurisdiction : You can’t set a reverse charge for a single jurisdiction. Collect your customer’s tax ID or use the global Reverse charge tax status. See Zero tax and reverse charges .

Test with the Tax Calculations API

If you use the Tax Calculations API, exemptions apply automatically when you pass a customer ID — you don’t need any additional parameters. Stripe loads the customer’s active exemptions and factors them into the calculation.

The example below creates a calculation for a customer. If that customer has an active exemption covering the transaction’s situs, the line item returns zero tax with taxability_reason: "customer_exempt". If no exemption applies, Stripe taxes the transaction normally.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

When an exemption applies, the line item returns zero tax and taxability_reason is customer_exempt:

{
 "object": "tax.calculation",
 "currency": "eur",
 "tax_amount_exclusive": 0,
 "line_items": {
 "data": [{
 "reference": "line item 1",
 "amount": 1000,
 "tax_amount": 0,
 "tax_breakdown": [{
 "taxability_reason": "customer_exempt",
 "tax_rate_details": null,
 "amount": 0
 }]
 }]
 }
}

When no exemption applies, Stripe taxes the transaction at the rate for the transaction’s jurisdiction:

{
 "object": "tax.calculation",
 "currency": "eur",
 "tax_amount_exclusive": 210,
 "line_items": {
 "data": [{
 "reference": "line item 1",
 "amount": 1000,
 "tax_amount": 210,
 "tax_breakdown": [{
 "taxability_reason": "standard_rated",
 "tax_rate_details": {
 "percentage_decimal": "21.0",
 "tax_type": "vat"
 },
 "amount": 210
 }]
 }]
 }
}

The customer’s shipping or billing address is one of the factors that determines the situs. Stripe matches that situs against the customer’s active exemptions, so the same customer can return exempt on one transaction and taxable on another depending on where each transaction ships.

Use with Invoices, Subscriptions, and Checkout Sessions

Exemptions apply automatically to Invoices, Subscriptions, and Checkout Sessions when you pass a customer ID. Pass customer as a reference to an existing Customer object (not as inline customer_details or customer_email), so Stripe can load the customer’s active exemptions. Enable automatic_tax as you would for any automatic tax integration. No additional parameters are required.

Invoices

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Subscriptions

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Stripe evaluates the customer’s active exemptions on each invoice generated by the subscription. If an exemption expires between billing cycles, the next invoice taxes the customer normally for that jurisdiction.

Checkout Sessions

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

In all three cases, when an active exemption covers the transaction’s situs, Stripe applies zero tax with taxability_reason: "customer_exempt". The field is exposed at a different path depending on the Stripe product:

  • Invoice : lines. data[]. taxes[]. taxability _ reason
  • Subscription : on each generated invoice at lines. data[]. taxes[]. taxability _ reason
  • Checkout Session : line _ items. data[]. taxes[]. taxability _ reason , available when the session is expanded with ?expand[]=line _ items. data. taxes

See also

Last verified 2026-09-24

Is this helpful?