Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

Set up manual rules as a fallback for automatic tax


Private preview

Set up manual rules as a fallback for automatic tax Private preview

Define tax rules for jurisdictions where Stripe Tax doesn't calculate tax automatically.

Sign up

Request access to manual rules fallback

Manual rules fallback lets you define tax rules for jurisdictions where Stripe Tax doesn't calculate automatically. When a customer is in an unsupported region, Stripe applies your manual rules instead of returning zero tax.

When Stripe Tax can’t calculate tax because a customer’s jurisdiction is unsupported, it attempts to use a manual rule you’ve defined. If a matching rule exists, Stripe applies the tax rate you configured instead of returning zero tax.

How it works

When Stripe Tax processes a transaction for a customer whose location is in an unsupported jurisdiction, it checks whether you’ve defined manual rules that match the customer’s location and product type. If a matching rule exists, Stripe applies it and includes fallback metadata in the response so you know which rules were used.

The fallback applies when all of the following are true:

  • Automatic tax is enabled.
  • The customer’s location is in a jurisdiction Stripe Tax doesn’t support.
  • You’ve created a manual rule that matches the customer’s location and product tax code.

If no matching rule exists, the transaction proceeds with zero tax for that jurisdiction, which is the same behavior as when you’ve enabled no fallback.

Limitations

Some limitations apply depending on how you integrate with Stripe Tax.

Subscriptions

Manual rules fallback is only supported on subscriptions running with billing_mode.type = flexible. See Billing mode for more information.

Checkout

When using Checkout with minimal customer address collection, customers can only select the country for many countries that have special territories (for example, Canary Islands). This means Stripe Tax can’t match manual rules created for these regions to the customer’s address, because the customer can’t input their full address. For a workaround:

Before you begin

After you get confirmation that your account was added to the private preview:

  • Set up Stripe Tax and enable automatic tax on your subscriptions or invoices.
  • This feature is for customers in jurisdictions where Stripe Tax isn’t available. Identify the jurisdictions where your customers are located that Stripe Tax doesn’t currently support.
  • See the list of supported jurisdictions
  • See the list of unsupported jurisdictions
  • Determine the tax rates and tax rate types (for example, VAT, GST, or Sales Tax) that apply to your products in those unsupported jurisdictions.

Create manual rules

Use the Manual Rules API to define tax rules for unsupported jurisdictions. Each rule maps a combination of location and product tax code to a specific tax rate.

You can create rules by country or by both the country and state for more specific coverage:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

When you create a rule, Stripe validates that the location and product tax code combination doesn’t conflict with an existing rule.

Supported locations

Manual rules support country-level and location-specific rules. This includes overseas territories that have distinct tax regimes from their parent country.

Use ISO-3166 country codes for all locations, both when you create the manual rule and when you set the customer’s address:

LocationTerritory
country: GPGuadeloupe
country: MQMartinique
country: GFFrench Guiana
country: REReunion
country: YTMayotte
country: ES, state: CNCanary Islands
country: ES, state: CECeuta
country: ES, state: MLMelilla
country: PT, state: 20Azores
country: PT, state: 30Madeira

You can also define rules for any country code that Stripe Tax doesn’t cover, without specifying a state.

Enable manual rules fallback

Manual rules fallback is in private preview. Sign up to request access.

Test your integration

To verify that manual rules fallback works correctly:

  1. Create a manual rule for a test jurisdiction and product tax code.
  2. Create a customer with an address in that jurisdiction.
  3. Create a subscription or invoice with automatic tax enabled.
  4. Confirm the response includes tax _ calculation _ fallback with the expected reason and outcome.
  5. Confirm the total _ taxes array includes entries with the manual _ rule attribute pointing to your rule.

Understand fallback responses

When Stripe applies manual rules as a fallback, the API response includes additional fields that indicate a fallback occurred and which rules we used.

The tax_calculation_fallback attribute

The automatic_tax object on the invoice includes a tax_calculation_fallback attribute when Stripe used a manual rule:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

FieldDescription
reasonWhy Stripe Tax couldn’t calculate tax automatically, for example, unsupported_jurisdiction.
outcomeWhat Stripe did instead, for example, manual_rules when we applied a matching rule.

The manual_rule attribute on tax lines

Each tax line in the taxes and total_taxes arrays includes a manual_rule attribute that identifies which rule produced it:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Use this attribute to:

  • Audit which rules are being applied across your invoices.
  • Identify rules that need updating when tax rates change.
  • Reconcile tax collected through fallback rules separately from standard automatic tax.

See also

Last verified 2026-09-24

Is this helpful?