Tax identifiers
Learn how to manage and apply tax identifiers.
Last updated
Learn how to manage and apply tax identifiers.
Last updated
In 2021-02-23
and later, use the features described on this page to manage tax identifiers. Once you upgrade to any of these versions, the tax identifiers you previously created through the will no longer be available. For assistance with migrating your data, contact us.
For versions 2020-12-17
and earlier, refer to the Tax identifiers (legacy) section on the Setting up tax exemptions page.
The Digital River API uses tax identifiers for tax assessment and invoicing purposes.
When you create a tax identifier, we initiate a validation process. Once the tax identifier object transitions to the appropriate verification state, assuming it applies to the order, it can be used to determine its taxability.
To apply a tax identifier, you can attach it directly to a checkout or invoice. Alternatively, you can associate it with a customer and use it in registered checkouts.
Your checkout flow should also consider that some countries require tax identifiers. When a customer in one of these countries doesn't supply a tax identifier, we block the order and send a notification of the problem.
You can use our test tax identifiers when you're ready to evaluate your integration.
In most value-added tax (VAT) schemes, domestic sales to business customers are assessed tax, and customers then get a credit for this tax paid when they complete their monthly or quarterly VAT return. Customers need the invoice to display their tax identifier to obtain this credit.
Alternatively, cross-border sales to business customers are not assessed tax in most VAT schemes. Instead, in a reverse charge practice, customers self-assess the tax while simultaneously getting a ta credit when they complete their monthly or quarterly VAT return. In these cases, the tax identifier is used to determine whether or not a reverse charge applies to a specific order.
Additionally, in a limited number of cases, tax identifiers are collected because they are required by a specific country’s tax authority for invoicing purposes.
In the Digital River APIs, a tax identifier is always represented by a unique identifier. Additionally, the object will contain attributes that indicate its type and value, its state, and created time.
Sometimes, a tax identifier may include a customer identifier, a verified name and address, and an updated time.
The customerId
is only returned when the tax identifier is associated with a customer.
The type
attribute identifies the country that issued the tax identifier. The available types typically consist of a lowercase, two-letter country code. However, some countries have more than one
and contain a suffix to the country code. For example, Brazil has tax identifiers with types of br
, br_ie
, and br_natural
.
The value
is assigned by the issuing country. Before creating a tax identifier, you can use the tax identifier element to help you validate its format. This element indicates if a tax identifier is required in the purchase country.
A tax identifier can be in a state of pending
, not_valid
, and verified
. Its state is dependent on where it is in the verification process.
Each state transition causes a corresponding event to be emitted whose data.object
consists of the tax identifier.
under review by an external verification agency
pending
tax_identifier.pending
determined to be valid
verified
tax_identifier.verified
determined to be invalid
not_valid
tax_identifier.not_valid
A tax identifier in any state can be attached directly to a checkout or associated with a customer. Before taking either action, your integration should ideally wait to receive the tax_identifier.verified
event. However, a tax identifier in either a pending
or verified
state is used to determine an order's taxability.
Additionally, as it moves from one state to another, an ISO8601 formatted date and time is returned in the stateTransitions
hash table.
During the tax identifier verification process, we sometimes can obtain the holder's verifiedName
and verifiedAddress
.
A tax identifier always contains a createdTime
. When a tax identifier is associated with a customer, its state changes or the holder's name and address are added, then the time these events occurred is reflected in the updatedTime
field.
For European Union tax identifiers, commonly known as Value Added Tax (VAT) numbers, we use the VAT Information Exchange System (VIES) to validate the customer's data.
After a POST /tax-identifiers
is submitted, Digital River provides VIES with the data submitted in the request. VIES, in turn, transmits our validation query to the relevant member state's database. The member state's reply to VIES indicates whether the number exists and, if so, whether it's valid. The reply may also include the holder's name and address. VIES then relays this information back to us.
VIES no longer verifies VAT numbers from Great Britain.
If VIES successfully responds before the checkout is converted to an order, then the tax identifier's state
transitions to either verified
or not_valid
. This causes either a tax_identifier.verified
or tax_identifier.not_valid
event to fire. The tax identifier is immediately applied to the order if the number is verified.
If VIES indicates a tax identifier is not_valid
, then we don't use it to determine an order's taxability.
A tax identifier's information is displayed on invoices, regardless of its state
.
We also apply validation algorithms for certain countries defined by the local authority that issued the number.
With a few notable exceptions, most countries only allow business
customers to apply tax identifiers.
For example, the following is a partial response to a POST/orders
request. In this case, a tax identifier has been successfully applied. This is because the tax identifier's type
is in agreement with the order's shipTo.country
and the customer is a business
entity.
If you were to submit another POST /orders
request with the same settings—the only difference is that in the new request, you specified ashipTo.country
of DK
(Denmark)—you'd receive a 409 Conflict
response. Customers holding tax identifiers issued by one country can't apply them to orders shipped to a different country.
Digital River first searches for applicable tax identifiers directly attached to a checkout or invoice. This is true whether you're checking out a guest or a registered customer.
However, when it's a registered checkout and that customer has associated tax identifiers that are applicable, and those tax identifiers are not yet attached, we apply them as well.
If no tax identifiers are directly attached to a checkout or invoice and the customer is a guest, we don't use any tax identifiers when computing taxes.
You can also attach tax identifiers to customers and then later, if necessary, detach them. To reassign or replace tax identifiers, you must delete the existing object before creating a new one.
When you configure the element with a payment session identifier, we filter out tax identifiers that do not apply to the transaction.
The following is an example 201 Created
response. It doesn't contain a customerId
because the tax identifier hasn't been attached to a customer yet. The pending state of the tax identifier indicates it's still being validated by an external agency.
Once a tax identifier is deleted, if you later attempt to attach it to a customer, you'll get the following 404 Not Found
error.
Once you've created a tax identifier, you can use the POST /customers/{id}/tax-identifiers/{taxId}
method to attach it to an existing customer. This request returns the tax identifier and triggers a customer.tax_identifier.created
event. The event's data.object
also represents the tax identifier.
The customerId
attribute is populated in the response since it's now associated with a customer. The following example response shows a British (uk
) issued tax identifier in a verified state. When the customer next makes an applicable purchase, this tax identifier will automatically apply to the order.
The same tax identifier object can't be attached to multiple customers. If you attempt to associate a tax identifier with a customer, but it's already attached to a different customer, you'll receive a 409 Conflict
response.
In these cases, you must first delete the tax identifier, create a new object with an identical type and value, and then assign it to the desired customer.
Customers can have multiple tax identifiers but not more than one of the same type. So, if you want to attach a new tax identifier to a customer, but that customer already holds one with that type
, you must first delete the existing object. Once you've consumed either the 204 No Content
response or the tax_identifier.deleted
event, your integration can create the new tax identifier and attach it to the same customer.
Once they are created, there are two ways to apply tax identifiers to a purchase. You can either attach the tax identifier directly to a checkout or invoice. Or you can use tax identifiers in registered checkouts.
In either case, during the checkout process, we determine whether the tax identifier is applicable and notify you of missing tax identifiers.
You should also ensure you pass the necessary information to correctly display the tax identifier on invoices.
When checking out registered and guest customers, you can attach tax identifiers directly to a checkout or invoice. You do this by using a POST /checkouts
,POST /checkouts/{id}
, or POST /invoices
request and send the object's identifier in the taxIdentifiers
array.
A successful response returns a checkout or invoice that contains an array of tax identifier objects. The state
of each tax identifier indicates whether it will be used to determine an order's taxability, depending on how it is validated.
For registered checkouts, any tax identifiers directly attached must be associated with the customer placing the order. If any are held by a different customer, the following 409 Conflict
response is returned:
Before attaching a tax identifier, you should determine whether it's applicable.
When using a customer's saved tax identifier, determine whether it exists. If you associate a tax identifier with a checkout, but the object has been deleted, we return the following error:
For more information, refer to registered checkouts on the Checking out guest and registered customers page.
When you create a registered checkout, we search for applicable tax identifiers attached to that customer. If we locate any, they are automatically applied to the checkout or invoice and returned in its taxIdentifiers
array.
For example, let's say a business customer holds a tax identifier of type dk
(Denmark) and another type uk
(Great Britain). In a POST/checkouts
request, you associate this customer with the checkout and specify a ship to country of GB
(Great Britain).
In this case, only the uk
tax identifier is returned in the response. This is because tax identifiers are not applied to purchases when the type and ship to country are not in agreement.
If you attach a tax identifier to the checkout and the necessary requirements are not met, you receive an error:
To avoid this, you can apply a filter using the tax identifier's applicability
block. This data structure contains the following attributes:
country
: The ship-to country for physical goods or the bill-to country for digital goods
entity
: The selling entity of the transaction
customerType
: The type of customer making the purchase
Each attribute provides the required transaction values before a tax identifier can be successfully applied. In other words, the corresponding values in the checkout/invoice must be the same. If they're not, the tax identifier isn't applicable.
The applicability
block is especially useful with saved tax identifiers. But, if you decide not to use the tax identifier element as a filter, you can also use applicability
with new tax identifiers.
In the following example, a customer has two saved tax identifiers. Both are applicable for DR_IRELAND-ENTITY
facilitated transactions. The first tax identifier, however, is only appropriate for purchases made by individuals in Italy, while the other can be used for business transactions in the Netherlands.
Next, use the checkout's shipTo.country
(or billTo.country
for digital goods), sellingEntity.id
, and customerType
, along with the corresponding values in each of the customer's applicability
blocks to filter out the non-applicable tax identifiers.
After that, display this filtered list to the customer. Once the customer selects an option, attach that tax identifier to the transaction.
If a registered or guest customer supplies new tax identifier information during checkout, send the necessary data in a POST/tax-identifiers
request. You can then use applicability
in the response to determine whether the checkout contains the matching country, selling entity, and customer type values.
If it does, attach the tax identifier to the checkout. If not, inform the customer that they provided an ineligible tax identifier. In the following guest checkout, the customer-supplied tax identifier is not applicable because the customerType
values do not agree.
When you want to inform us that no tax identifiers should be applied to a registered checkout, submit a create or update request with an empty taxIdentifiers
array. This indicates that none of the customer's applicable tax identifiers should be used to determine the order's taxability.
For example, if a customer selects a saved tax identifier during the checkout process but later deselects it, you can submit the following POST/checkouts/{id}
request to ensure it's not applied.
On the other hand, not including thetaxIdentifiers
array in a registered checkout has no effect. In this scenario, we automatically apply any applicable tax identifiers saved to the customer's account.
In some countries, customers are required to provide a valid tax identifier when conducting online transactions. If customers in these countries don't provide this information, Digital River blocks their orders from being placed.
As an example, let's say a POST /checkouts
request specifies a customer type of individual
and a ship-to country of BR
(Brazil). In that same request, if no tax identifiers with a type
of br_natural
are either attached directly to the checkout or associated with the customer placing the order, you'll receive a 409 Conflict
response.
After fulfilling an order and receiving the necessary events, you can share the generated invoice with customers. When a business customer applies a tax identifier, the company name must be displayed on these invoices. To ensure this happens, you must set the organization
parameter when specifying a shipping address for orders that contain physical products.
The following table lists the combination of ship to country, tax ID type, customer type, and selling entity that must be aligned before a tax identifier can be applied to an order.
As the table indicates, most countries don't require a tax identifier when purchasing online within their borders. For those that do, however, customers can't conduct transactions without first providing a valid tax identifier.
Australia
au
business
DR_IRELAND-ENTITY
No
ABN
Austria
at
business
DR_IRELAND-ENTITY
No
VAT Number
Bahrain
bh
business
DR_IRELAND-ENTITY
No
VAT Number
Belarus
by
business
DR_IRELAND-ENTITY
No
VAT Number
Belgium
be
business
DR_IRELAND-ENTITY
No
VAT Number
Brazil
br
business
DR_BRAZIL-ENTITY
Yes
Cadastro Nacional da Pessoa JurÃdica
Brazil
br_ie
business
DR_BRAZIL-ENTITY
Yes
Inscrição Estadual
Brazil
br_natural
individual
DR_BRAZIL-ENTITY
Yes
Cadastro de Pessoas FÃsicas (individuals)
Bulgaria
bg
business
DR_IRELAND-ENTITY
No
VAT Number
Canada
ca
business
DR_IRELAND-ENTITY
No
Canadian GST
Canada
ca
business
C5_INC-ENTITY
No
GST Number
Chile
cl
individual
DR_IRELAND-ENTITY
No
RUT
Chile
cl
business
DR_IRELAND-ENTITY
No
RUT
Colombia
co
business
DR_IRELAND-ENTITY
No
VAT Number
Croatia
hr
business
DR_IRELAND-ENTITY
No
VAT Number
Cyprus
cy
business
DR_IRELAND-ENTITY
No
VAT Number
Czech Republic
cz
business
DR_IRELAND-ENTITY
No
VAT Number
Denmark
dk
business
DR_IRELAND-ENTITY
No
VAT Number
Estonia
ee
business
DR_IRELAND-ENTITY
No
VAT Number
Finland
fi
business
DR_IRELAND-ENTITY
No
VAT Number
France
fr
business
DR_IRELAND-ENTITY
No
VAT Number
Germany
de
business
DR_IRELAND-ENTITY
No
VAT Number
Greece
gr
business
DR_IRELAND-ENTITY
No
VAT Number
Hungary
hu
business
DR_IRELAND-ENTITY
No
VAT Number
Iceland
is
business
DR_IRELAND-ENTITY
No
VAT Number
India
in
business
DR_IRELAND-ENTITY
No
GSTIN
Indonesia
id
business
DR_IRELAND-ENTITY
No
NPWP
Ireland
ie
business
DR_IRELAND-ENTITY
No
VAT Number
Isle of Man
uk
business
DR_IRELAND-ENTITY
No
VAT Number
Isle of Man
uk
business
DR_UK-ENTITY
No
VAT Number
Italy
it
business
DR_IRELAND-ENTITY
No
VAT Number
Italy
it_cf
individual
DR_IRELAND-ENTITY
No
Codice Fiscal (individuals)
Italy
it_natural
individual
DR_IRELAND-ENTITY
No
VAT Number (individuals)
Japan
jp
business
DR_JAPAN-ENTITY
No
TIN
Japan
jp_offshore
business
DR_IRELAND-ENTITY
No
Consumption Tax ID (offshore)
Kenya
ke
business
DR_IRELAND-ENTITY
Yes
PIN
Korea
kr_offshore
business
DR_IRELAND-ENTITY
No
VAT Number (offshore)
Latvia
lv
business
DR_IRELAND-ENTITY
No
VAT Number
Lithuania
lt
business
DR_IRELAND-ENTITY
No
VAT Number
Luxembourg
lu
business
DR_IRELAND-ENTITY
No
VAT Number
Malaysia
my
business
DR_IRELAND-ENTITY
No
VAT Number
Malta
mt
business
DR_IRELAND-ENTITY
No
VAT Number
Mexico
mx_natural
individual
DR_IRELAND-ENTITY
No
RFC
Mexico
mx
business
DR_IRELAND-ENTITY
No
RFC
Monaco
fr
business
DR_IRELAND-ENTITY
No
VAT Number
Netherlands
nl
business
DR_IRELAND-ENTITY
No
VAT Number
New Zealand
nz
business
DR_IRELAND-ENTITY
No
GST ID
Norway
no
business
DR_IRELAND-ENTITY
No
VAT Number
Philippines
ph
business
DR_IRELAND-ENTITY
No
TIN
Poland
pl
business
DR_IRELAND-ENTITY
No
VAT Number
Portugal
pt
business
DR_IRELAND-ENTITY
No
VAT Number
Portugal
pt_nif
individual
DR_IRELAND-ENTITY
No
NIF
Romania
ro
business
DR_IRELAND-ENTITY
No
VAT Number
Russia
ru
business
DR_IRELAND-ENTITY
No
INN
Russia
ru_natural
business
DR_IRELAND-ENTITY
No
INN
Saudi Arabia
sa
business
DR_IRELAND-ENTITY
No
VAT Number
Singapore
sg
business
DR_IRELAND-ENTITY
No
VAT Number
Slovakia
sk
business
DR_IRELAND-ENTITY
No
VAT Number
Slovenia
si
business
DR_IRELAND-ENTITY
No
VAT Number
South Africa
za
business
DR_IRELAND-ENTITY
No
VAT Number
Spain
es
business
DR_IRELAND-ENTITY
No
VAT Number
Sweden
se
business
DR_IRELAND-ENTITY
No
VAT Number
Switzerland
ch
business
DR_IRELAND-ENTITY
No
VAT Number
Taiwan
tw
business
DR_TAIWAN-ENTITY
Yes
Unified Business Number
Taiwan
tw_offshore
business
DR_IRELAND-ENTITY
Yes
Unified Business Number (offshore)
Thailand
th
business
DR_IRELAND-ENTITY
No
VAT Number
Turkey
tr
business
DR_IRELAND-ENTITY
No
VAT Number
Ukraine
ua
business
DR_IRELAND-ENTITY
No
VAT Number
United Arab Emirates
ae
business
DR_IRELAND-ENTITY
No
VAT Number
United Kingdom
uk
business
DR_IRELAND-ENTITY
No
VAT Number
United Kingdom
uk
business
DR_UK-ENTITY
No
VAT Number
Country
type
value
Belgium
be
BE0000000000
, BE1234567890
Germany
de
DE000000000
, DE123456789
Italy
it
or it_natural
IT00000000000
, IT12345678901
The Italian values can be paired with either it
or it_natural
. The type
you specify depends on whether you're applying the tax identifier to a test purchase made by an individual
or a business
. Once you create a test tax identifier, you can always reference applicability
to determine its appropriate use.
A tax identifier is always returned with a unique id
. Besides using this identifier to and a tax identifier, you can use it to attach a tax identifier to a checkout or associate it with a customer.
When a request is submitted, Digital River initiates a validation process. As part of this process, we always validate the format of a tax identifier, whatever its country of origin. Incorrectly formatted tax identifiers return the following error:
In many situations, however, VIES responds slowly or is down for scheduled or unscheduled reasons. This means the tax identifier might not transition from pending
to verified
until after creation. We treat a pending
tax identifier as being verified
in these cases until we know otherwise. In other words, pending
and verified
tax identifiers are both used by Digital River to determine an taxability.
Before a tax identifier can be successfully applied to a , the tax identifier type, the customer type, the selling entity, and the country (a ship-to country for physical goods or a bill-to country for digital goods) must agree.
Before they are applied to orders, we allow you to validate the tax identifier information provided by customers. Once validated, you can use the to create, , , and them.
You can use the tax identifier element to validate the format entered by a customer and determine whether a tax identifier is required and applicable to the transaction. To create the element, you must combine the selling entity identifier, payment session identifier, and ship to/bill to ISO 3166 country code returned in a or .
You use the method to create a tax identifier. In the request, you must specify both a type and value. Once the request is submitted, we initiate a validation process.
You can delete a tax identifier by submitting a request that sends its unique identifier as a path parameter. A successful request returns a 204 No Content
response. It also triggers a tax_identifier.deleted
event and detaches the tax identifier from any customer it may have been associated with.
To disassociate a tax identifier from a customer, send a delete request through the . A successful request means that when the customer creates applicable registered checkouts in the future, this tax identifier will no longer be applied.
This information in this section is only applicable to 2021-03-23
and earlier of the Digital River APIs.
During registered checkouts, you can use applicability
to filter customers' saved tax identifiers and display this filtered list to them on your site. Once the transaction's customer type is set and we've assigned a selling entity, make a request to retrieve the customer's saved tax identifiers.
In the , the following type
and value
pairs allow you to create verified
tax identifiers: