Stripe Tax Fresh
Automatically calculate, collect, and report tax on your Stripe payments. Supports 90+ countries and all US states.
Setup overview
| Step | Description |
|---|---|
| 1. Set head office address | Tell Stripe where your business is located |
| 2. Select preset tax code | Default product classification for tax rates |
| 3. Set tax behavior | Whether prices include or exclude tax |
| 4. Add registrations | Register with local tax authorities where you're liable |
| 5. Enable in integration | Add automatic_tax[enabled]=true to API calls |
| 6. Set up filing | Automate return submission with TaxJar or Taxually |
Step 1: Set your head office address
Your head office is where your business is located (or for physical goods, where you ship from). By default Stripe uses your Stripe business address — review and confirm in Dashboard → Settings → Tax.
Via API:
bash
curl https://api.stripe.com/v1/tax/settings \
-u "sk_test_YOUR_KEY:" \
-d "head_office[address][line1]=123 Main St" \
-d "head_office[address][city]=San Francisco" \
-d "head_office[address][state]=CA" \
-d "head_office[address][country]=US" \
-d "head_office[address][postal_code]=94111"Step 2: Select your preset tax code
A tax code classifies your product or service for accurate tax rate calculation. The preset tax code applies when you don't specify a tax_code on individual products.
Set in Dashboard → Settings → Tax → Preset product tax code.
Then review your product catalog (Dashboard → Products) to confirm the default is correct for each product. Edit individual products to assign a more specific tax code where needed.
For physical goods: also set a preset shipping tax code to apply correct treatment to shipping fees.
Step 3: Select tax behavior
Tax behavior determines whether Stripe adds tax on top of your price or treats the price as already inclusive.
| Option | Description |
|---|---|
| Exclusive | Tax is added on top of the price (customer pays price + tax) |
| Inclusive | Tax is included in the price (total doesn't change) |
| Automatic | Stripe decides based on currency: exclusive for USD/CAD, inclusive for all others |
Set the default in Dashboard → Settings → Tax. Override per-price using the tax_behavior field on the Price object.
Step 4: Add registrations
You must register with local tax authorities before collecting tax in a region. A tax registration tells Stripe it's eligible to calculate tax for that region.
Add registrations in Dashboard → Tax → Locations.
You can schedule a future registration effective date if you're planning to register but haven't yet.
bash
# Create a tax registration
curl https://api.stripe.com/v1/tax/registrations \
-u "sk_test_YOUR_KEY:" \
-d country=US \
-d "country_options[us][state]=CA" \
-d "country_options[us][type]=state_sales_tax" \
-d active_from=nowStep 5: Enable tax in your integration
API integrations
Add automatic_tax[enabled]=true to Checkout Sessions, Subscriptions, or Invoices:
bash
# Enable tax on a Checkout Session
curl https://api.stripe.com/v1/checkout/sessions \
-u "sk_test_YOUR_KEY:" \
-d mode=payment \
-d "line_items[0][price]=price_YOUR_PRICE_ID" \
-d "line_items[0][quantity]=1" \
-d "automatic_tax[enabled]=true" \
-d success_url="https://example.com/success" \
-d cancel_url="https://example.com/cancel"
# Enable tax on an Invoice
curl https://api.stripe.com/v1/invoices \
-u "sk_test_YOUR_KEY:" \
-d customer={{CUSTOMER_ID}} \
-d "automatic_tax[enabled]=true"
# Enable tax on a Subscription
curl https://api.stripe.com/v1/subscriptions \
-u "sk_test_YOUR_KEY:" \
-d customer={{CUSTOMER_ID}} \
-d "items[0][price]"={{PRICE_ID}} \
-d "automatic_tax[enabled]=true"Node.js example
javascript
const stripe = require('stripe')('sk_test_YOUR_KEY');
const session = await stripe.checkout.sessions.create({
mode: 'payment',
line_items: [{
price: 'price_YOUR_PRICE_ID',
quantity: 1,
}],
automatic_tax: { enabled: true },
success_url: 'https://example.com/success',
cancel_url: 'https://example.com/cancel',
});Integration support
| Integration | How to enable |
|---|---|
| Invoicing | Add automatic_tax[enabled]=true to Invoice or enable in Dashboard |
| Subscriptions | Add automatic_tax[enabled]=true to Subscription |
| Checkout | Add automatic_tax[enabled]=true to Checkout Session |
| Payment Links | Enable in Dashboard → Payment Links settings |
| Custom flows (PaymentIntents) | Use Tax Calculation API before creating PaymentIntent |
Update existing recurring integrations
Enabling Tax does not automatically update existing subscriptions, invoices, or payment links. Update them separately:
bash
# Update existing subscription to enable tax
curl https://api.stripe.com/v1/subscriptions/{{SUBSCRIPTION_ID}} \
-u "sk_test_YOUR_KEY:" \
-d "automatic_tax[enabled]=true"
# Update existing invoice
curl https://api.stripe.com/v1/invoices/{{INVOICE_ID}} \
-u "sk_test_YOUR_KEY:" \
-d "automatic_tax[enabled]=true"Or update in bulk via Dashboard → Subscriptions / Invoices / Payment Links.
Step 6: Set up filing
After you start collecting tax, set up automated return filing:
| Region | Filing partner |
|---|---|
| US (all 50 states) | Stripe, powered by TaxJar |
| Other countries (90+) | Taxually |
Automated filing provides:
- Automatic return preparation and submission
- Email notifications before scheduled returns
- Status tracking per filing
- Copies of completed filings
Configure in Dashboard → Tax → Filing.
Disable tax collection
To stop collecting tax:
- Turn off automatic tax in Dashboard → Settings → Tax
- Remove active registrations in Dashboard → Tax → Locations
- Update existing recurring integrations to
automatic_tax[enabled]=false
Tax behavior on prices
Set tax_behavior on individual prices to override the account default:
bash
curl https://api.stripe.com/v1/prices \
-u "sk_test_YOUR_KEY:" \
-d product={{PRODUCT_ID}} \
-d currency=usd \
-d unit_amount=2000 \
-d tax_behavior=exclusiveValid values: exclusive, inclusive, unspecified (inherits account default).