Tax ticket sales based on event locationPrivate preview
Integrate Stripe Tax to calculate taxes on admission fees and tickets.
VAT and sales tax generally apply anywhere you charge admission (for example, tickets to concerts, conferences, museums, or sporting events) based on the event location, not based on the customer’s location. In the US, specific local taxes (such as entertainment or amusement taxes) might apply, in addition to state and local sales tax.
Update the Stripe SDK
This new feature is a private preview feature and requires an update to the newest API version. To upgrade the version of your SDK and API, follow the API upgrade guide and upgrade the library to the latest version. You can inspect the changelog to make sure your changes are backwards-compatible.
If needed, you can access SDK private parameters. You can also use custom requests in any of the following SDKs to call private endpoints related to this feature.
Configure Stripe Tax
When you set up Stripe Tax for tickets, set the default product tax code to txcd_
, General - Services
. You can’t set any of the event tax codes as the default product tax code.
To add a registration for testing:
- From the tax registrations page in the Dashboard, click Add registration.
- Add the following recommended registrations:
- United States - Colorado, Sales Tax
- United States - Colorado, Boulder Admissions Tax
Stripe Tax calculations don’t incur fees in a sandbox environment. After you add a tax registration, calculating tax in live mode incurs a fee.
In most cases, tax calculations are based on the transaction destination, which is usually the customer’s shipping or billing address. However, tax calculations for ticket sales are based on the event location. The following steps describe how to calculate taxes using the event location.
Design your checkout flow
Stripe Tax only supports ticket sales using the Stripe Tax Calculation API. This means that you can integrate only with Payment Elements or directly with the Tax Calculation API. You can’t use other integrations such as Stripe Checkout or Stripe Subscriptions.
Depending on your payment integration, you can choose between two integration paths:
Tax Payment Intent integration (Recommended) | Manual Tax Calculation API integration | |
---|---|---|
Advantages |
|
|
Disadvantages |
|
|
Whatever integration you choose, you need to create a tax location and perform a tax calculation. This works the same way for both integration paths.
Using the Tax Location API to create an event location
Each ticket sale requires a tax location you create and save in your database to specify when you calculate the taxes. For this example, create a tax location of type performance
, representing the Greenleaf Park, a park in Boulder, Coloardo, in the United States.
The response includes an id
field. This is the identifier for the tax location that you can save in your own database.
{ "id": "taxloc_yB7b4tVHRb", // ... other fields omitted }
For example, the database schema could look like the following:
id | venue_name | capacity | seatplan | … | stripe_location_id |
… | Greenleaf Park | 500 | https://stripe.cdn.com/seatplan.png | … | taxloc_ |
… | … | … | … | … | … |
Table: your_business.venues
Calculating Tax
To calculate tax for ticket sales, Stripe Tax needs four pieces of information:
- The location of your business (head office address), provided through the tax settings, which you configured earlier
- The location of the event (tax location of type
performance
), created in the previous section - The location of the customer (billing address) – this is important because of B2B reverse charges
- The type of product (ticket, merchandise, and so on), such as
txcd_
– Admission to Amusement, Entertainment and Recreation Venues – Participant.50010001
Customer address collection
To collect the customer address, we recommend that you build an address form into your checkout that asks customers for their address with the Address Element. See which address information details are required.
You must verify that the billing address is a valid address for Stripe Tax. To validate the address with Stripe Tax, you can create a tax calculation. However, each calculation in live mode incurs fees, so we recommend performing as much validation as possible directly on your integration.
Before collecting and validating the address, disable the checkout button. After you enter the address and we validate it, you can enable the checkout button and perform a tax calculation. A tax calculation is a “preview” of the taxes that apply.
Types of products
You can find all ticket tax codes on our product tax code reference page, including txcd_
, Admission to Amusement, Entertainment and Recreation Venues – Participant
.
Calculating taxes with tax locations
You must pass all the required data within the tax calculation API call. In this example, you calculate the taxes for a customer based in Ireland. This customer travels to the United States and buys a ticket for an event at Greenleaf Park in Boulder, Colorado.
If the calculation endpoint returns a customer_
error code, prompt your customer to check the address they entered for accuracy and completeness.
Understanding the calculation result and connecting it to a payment
The calculation API call calculates the taxes at the tax location of the event. In this case, the Greenleaf Park in Boulder, Colorado.
You can use the top-level tax breakdown to display all the taxes that are charged. In this case, the response looks similar to the following:
{ "id": "taxcalc_fQSaHNaU", "amount_total": 2697, // ... other fields omitted "tax_breakdown": [ // ... other entries omitted { "amount": 125, "inclusive": false, "tax_rate_details": { // ... other entries omitted "country": "US", "state": "CO", "percentage_decimal": "5.0", // This is just an example. The Stripe Tax calculation API returns the correct tax rate. "tax_type": "admissions_tax" }, "taxability_reason": "standard_rated", "taxable_amount": 2500 } ] }
The calculation
object contains an ID. Each time one of the four input parameters (business location, customer address, event location, or product type) changes, you must perform a new calculation.
You save the latest calculation ID to commit a tax transaction later. You need this for compliant reporting.
Your checkout interface can display the taxes as a preview similar to the following example based on the tax_
object of the response of the Tax Calculation API call.
2025 college football Rose Bowl Game on Mon, 1 Jan 2025 at Rose Bowl
Checkout preview line | Amount |
---|---|
Total Face Value | 25 USD |
Sales Tax (2.90%) | 0.72 USD |
Admission Tax (5.0%) | 1.25 USD |
Sub Total | 26.97 USD |
Create a payment
The payment is created with the amount_
from the tax calculation.
After the payment succeeds, you can create a tax transaction. Use this record for reporting and compliance.