Customer Tax Identification Numbers
Storing, validating, and rendering customer tax ID numbers with Stripe Billing.
Displaying a customer’s tax ID on invoice documents is a common requirement.
With Stripe, you can add one or multiple tax IDs to a customer. A customer’s tax IDs are displayed in the header of invoice and credit note PDFs.
Supported Tax ID types
Currently, Stripe Billing supports the following Tax ID types in the following regions:
Country | Enum | Description |
---|---|---|
Austria | eu_vat |
European VAT number |
Belgium | eu_vat |
European VAT number |
Bulgaria | eu_vat |
European VAT number |
Cyprus | eu_vat |
European VAT number |
Czech | eu_vat |
European VAT number |
Germany | eu_vat |
European VAT number |
Denmark | eu_vat |
European VAT number |
Estonia | eu_vat |
European VAT number |
Spain | eu_vat |
European VAT number |
Finland | eu_vat |
European VAT number |
France | eu_vat |
European VAT number |
United Kingdom | eu_vat |
European VAT number |
Greece | eu_vat |
European VAT number |
Croatia | eu_vat |
European VAT number |
Hungary | eu_vat |
European VAT number |
Ireland | eu_vat |
European VAT number |
Italy | eu_vat |
European VAT number |
Lithuania | eu_vat |
European VAT number |
Luxembourg | eu_vat |
European VAT number |
Latvia | eu_vat |
European VAT number |
Malta | eu_vat |
European VAT number |
Netherlands | eu_vat |
European VAT number |
Poland | eu_vat |
European VAT number |
Portugal | eu_vat |
European VAT number |
Romania | eu_vat |
European VAT number |
Sweden | eu_vat |
European VAT number |
Slovenia | eu_vat |
European VAT number |
Slovakia | eu_vat |
European VAT number |
Norway | no_vat |
Norwegian VAT number |
India | in_gst |
Indian GST number |
Australia | au_abn |
Australian Business Number (AU ABN) |
New Zealand | nz_gst |
New Zealand GST number |
Validation
You are responsible for ensuring customer information, including their tax identification number, is accurate.
Stripe Billing provides automatic validation for some tax ID types.
European Value-Added-Tax (EU VAT) Numbers
Stripe automatically validates all European Value-Added-Tax (EU VAT) numbers with the European Commission’s VAT Information Exchange System (VIES). This process only validates whether or not the tax ID is valid—you’ll still need to verify the customer’s name and address to make sure it matches the registration information.
VIES validation usually takes only a few seconds, but depending on the availability of various government databases, may take longer. Stripe will automatically handle VIES downtime and attempt retries for you.
Australian Business Numbers (ABN)
Stripe also automatically validates all Australian Business Numbers (ABNs) with the Australian Business Register (ABR).
Validation webhooks and Dashboard display
Because this validation process happens asynchronously, you will be notified of validation updates via the customer.tax_id.updated webhook.
Hover over a customer’s EU VAT number to display their VIES information.
The results of the validation are displayed in the Dashboard while displaying the customer details, including details returned from the government databases, as well as the registered name and address.
When automatic validation is not available, we strongly recommend that you manually verify these IDs.
Managing
Tax IDs can be managed via the Customer page on the Dashboard, or via the Tax ID API.
Navigate to the Customer page, clicking the Update details button in the top of the Details panel. The Update customer invoice details modal will appear, with the Tax ID section visible.
Clicking the Add tax ID link will add a row to the Tax ID list, where you can select the ID type and value.
Removing a Tax ID from a customer is as simple as removing the row.
Using the API
You can add, update, or delete Tax IDs via the API.
The following example shows how to create a new Tax ID on a Customer, storing their VAT number.
curl https://api.stripe.com/v1/customers/cus_4fdAW5ftNQow1a/tax_ids \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \
-d value=DE123456789 \
-d type=eu_vat
# Set your secret key: remember to change this to your live secret key in production
# See your keys here: https://dashboard.stripe.com/account/apikeys
Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'
Stripe::Customer.create_tax_id(
'cus_4fdAW5ftNQow1a',
{
type: 'eu_vat',
value: 'DE123456789',
}
)
# Set your secret key: remember to change this to your live secret key in production
# See your keys here: https://dashboard.stripe.com/account/apikeys
stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'
stripe.Customer.create_tax_id(
'cus_4fdAW5ftNQow1a',
type='eu_vat',
value='DE123456789',
)
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc');
\Stripe\Customer::createTaxId(
'cus_4fdAW5ftNQow1a',
[
'type' => 'eu_vat',
'value' => 'DE123456789',
]
);
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc";
Customer customer = Customer.retrieve("cus_4fdAW5ftNQow1a");
Map<String, Object> params = new HashMap<String, Object>();
params.put("type", "eu_vat");
params.put("value", "DE123456789");
TaxId taxId = customer.getTaxIds().create(params);
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc');
stripe.customers.createTaxId(
'cus_DqZrTNCO4puf2p',
{
type: 'eu_vat',
value: 'DE123456789',
},
function(err, taxId) {
// asynchronously called
}
);
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
params := &stripe.TaxIDParams{
Customer: stripe.String("cus_4fdAW5ftNQow1a"),
Type: stripe.String(string(stripe.TaxIDTypeEUVAT)),
Value: stripe.String("DE123456789"),
}
taxId, err := taxid.New(params)
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
StripeConfiguration.SetApiKey("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
var options = new TaxIdCreateOptions
{
Type = "eu_vat",
Value = "DE123456789",
};
var service = new TaxIdService();
var taxId = service.Create("cus_4fdAW5ftNQow1a", options);
You can delete a Tax ID, as shown in the this example:
curl https://api.stripe.com/v1/customers/cus_Euql8T6KrknXwN/tax_ids/txi_123456789 \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \
-X DELETE
# Set your secret key: remember to change this to your live secret key in production
# See your keys here: https://dashboard.stripe.com/account/apikeys
Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'
Stripe::Customer.delete_tax_id(
'cus_4fdAW5ftNQow1a',
'txi_123456789',
)
# Set your secret key: remember to change this to your live secret key in production
# See your keys here: https://dashboard.stripe.com/account/apikeys
stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'
stripe.Customer.delete_tax_id(
'cus_4fdAW5ftNQow1a',
'txi_123456789',
)
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc');
\Stripe\Customer::deleteTaxId(
'cus_4fdAW5ftNQow1a',
'txi_123456789',
function(err, confirmation) {
// asynchronously called
}
);
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc";
Customer customer = Customer.retrieve("cus_4fdAW5ftNQow1a");
TaxId taxId = customer.getTaxIds().retrieve("txi_123456789");
taxId.delete();
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc');
stripe.customers.deleteTaxId(
'cus_4fdAW5ftNQow1a',
'txi_123456789',
function(err, confirmation) {
// asynchronously called
}
);
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
params := &stripe.TaxIDParams{
Customer: stripe.String("cus_4fdAW5ftNQow1a"),
}
taxid, err := taxid.Del("txi_123456789", params)
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
StripeConfiguration.SetApiKey("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
var service = new TaxIdService();
service.Delete("cus_4fdAW5ftNQow1a", "txi_123456789");