VAT rates

This page uses the term “VAT” to collectively refer to VAT and sales tax (e.g. GST).

Overview

Invoices and quotes must include VAT amounts, even if the VAT rate is 0%. Countries have different VAT rates for different types of products and services. For example, Germany has a standard VAT rate of 19%, a reduced VAT rate of 7%, and a zero VAT rate for certain transactions.

VAT use cases

VAT rates are generally driven by the country of the entity (seller) with some exceptions. One of those exceptions is the One-Stop Shop (OSS) scheme in Europe, where the VAT rates are based on the counterpart (buyer) country instead.

Below are some scenarios common invoicing scenarios covered by Monite API.

Entity country: Germany
Counterpart country: Germany

We assume that the entity has a German VAT ID (of type eu_vat):

Entity VAT ID
1{
2 "country": "DE",
3 "type": "eu_vat",
4 "value": "123456789"
5}

GET /vat_rates?counterpart_id=<...>&entity_vat_id=<...> returns German VAT rates (based on the entity’s country).

Entity country: Netherlands
Counterpart country: Norway

We assume that the entity has a Dutch VAT ID (of type eu_vat):

Entity VAT ID
1{
2 "country": "NL",
3 "type": "eu_vat",
4 "value": "123456789B12"
5}

GET /vat_rates?counterpart_id=<...>&entity_vat_id=<...> returns Dutch VAT rates (based on the entity’s country).

European Union has the One Stop Shop (OSS) scheme for cross-border B2C sales in the EU.

EU entities registered under the OSS scheme need to create a separate VAT ID with the eu_oss_vat type for use in invoices that fall under that scheme.

OSS VAT number
1{
2 "country": "DE", // Entity's EU country of registration
3 "type": "eu_oss_vat",
4 "value": "123456789"
5}

In the following scenario:

Entity country: Germany
Entity entity_vat_id_id points to the OSS VAT number
Counterpart country: France

GET /vat_rates?counterpart_id=<...>&entity_vat_id=<...> returns French VAT rates (based on the counterpart’s country).

VAT rate catalog

Monite maintains a catalog of VAT rates for select countries. API Partners can query the available rates via the GET /vat_rates endpoint (see below).

Supported countries

Currently, the GET /vat_rates endpoint provides VAT rates for the following countries:

  • Angola
  • Australia
  • Austria
  • Belgium
  • Botswana
  • Bulgaria
  • Czech Republic
  • Denmark
  • Estonia
  • Eswatini
  • France
  • Finland
  • Germany
  • Greece
  • Ireland
  • Israel
  • Lesotho
  • Liberia
  • Luxembourg
  • Mozambique
  • Namibia
  • Netherlands
  • Poland
  • South Africa
  • Spain (including Canary Islands)
  • Sweden
  • Switzerland
  • United Arab Emirates
  • United Kingdom
  • Zimbabwe

What about other countries?

Entities from other countries should not use the GET /vat_rates endpoint, and should instead use the invoice field line_items[].tax_rate_value to specify tax/VAT rates directly. Entities are responsible for providing the correct VAT rate values for the invoice to be compliant.

Get VAT rates

To query the applicable VAT rates for an invoice, use the GET /vat_rates endpoint with the parameters mentioned below.

If the entity does not have a VAT ID, use:

GET /vat_rates?counterpart_id=<...>

If the entity has a VAT ID, use:

GET /vat_rates?entity_vat_id_id=<...>&counterpart_id=<...>
  • For transactions that fall under the EU OSS scheme, specify the entity_vat_id_id that has the eu_oss_vat type (not eu_vat).
  • For UK entities that trade under the Northern Ireland protocol, the entity VAT ID must have country=“GB” and type=eu_vat (not gb_vat).

The GET /vat_rates endpoint returns the applicable VAT rates based on the entity country, counterpart country, transaction type (e.g. B2B or B2C), and the presense (or absense) of entity VAT ID.

Below is a sample response assuming the entity and counterpart are German. German VAT rates are 0%, 7%, and 19%. The VAT value in the response is the percentage multiplied by 100, that is, 7% is represented as 700 and 19% as 1900.

1{
2 "data": [
3 {
4 "id": "a39a2ec3-765d-4f75-9a17-585a5d22509d",
5 "created_at": "2022-09-23T12:28:31.941357+00:00",
6 "updated_at": "2022-09-23T12:28:31.941375+00:00",
7 "value": 0,
8 "country": "DE",
9 "valid_from": null,
10 "valid_until": null,
11 "created_by": "monite",
12 "status": "active"
13 },
14 {
15 "id": "51cefc6c-9f82-484e-ae6a-a3a89b507bea",
16 "created_at": "2022-09-23T12:28:31.941398+00:00",
17 "updated_at": "2022-09-23T12:28:31.941406+00:00",
18 "value": 700,
19 "country": "DE",
20 "valid_from": null,
21 "valid_until": null,
22 "created_by": "monite",
23 "status": "active"
24 },
25 {
26 "id": "479155c3-0995-4689-a3cf-7482ea5132a9",
27 "created_at": "2022-09-23T12:28:31.941423+00:00",
28 "updated_at": "2022-09-23T12:28:31.941431+00:00",
29 "value": 1900,
30 "country": "DE",
31 "valid_from": null,
32 "valid_until": null,
33 "created_by": "monite",
34 "status": "active"
35 }
36 ]
37}

Note down the returned VAT id values. You will need them later to specify the corresponding VAT rates for individual line items in invoices and quotes.

If a counterpart is exempt from paying VAT on an invoice, you can provide the reason for exemption via the optional vat_exemption_rationale field on the invoice object. For example, in situations where an invoice’s line item is assigned a 0% VAT, you can provide the reason for exemption via the vat_exemption_rationale field when creating or updating an invoice. The reason provided will also be displayed on the invoice PDF.

Specify VAT rates when creating or updating invoices and quotes

When you create an invoice or a quote by calling POST /receivables, you must provide the vat_rate_id for each line item in the line_items array. In the example below, the first line item is taxed at 19% (VAT rate ID = 479155c3-0995-4689-a3cf-7482ea5132a9) and the second line item is taxed at 7% (VAT rate ID = 51cefc6c-9f82-484e-ae6a-a3a89b507bea).

Monite will automatically calculate the VAT amounts based on the specified VAT rate IDs and return the total VAT in the total_vat_amount field in the invoice response.

1curl -X POST 'https://api.sandbox.monite.com/v1/receivables' \
2 -H 'X-Monite-Version: 2024-05-25' \
3 -H 'X-Monite-Entity-Id: ENTITY_ID' \
4 -H 'Authorization: Bearer ACCESS_TOKEN' \
5 -H 'Content-Type: application/json' \
6 -d '{
7 "type": "invoice",
8 ...
9 "line_items": [
10 {
11 "quantity": 5,
12 "product_id": "8755c86a-d630-4920-b6fd-fd2917d87dfb",
13 "vat_rate_id": "479155c3-0995-4689-a3cf-7482ea5132a9"
14 },
15 {
16 "quantity": 1,
17 "product_id": "b97601e1-e795-4c47-85d5-e5c54a75058d",
18 "vat_rate_id": "51cefc6c-9f82-484e-ae6a-a3a89b507bea"
19 }
20 ],
21 ...
22 }'

Similarly, to update the VAT rate for a specific line item in an existing draft invoice or quote, call PATCH /receivables/{receivables_id} and provide the new vat_rate_id for that line item:

1curl -X PATCH 'https://api.sandbox.monite.com/v1/receivables/411dc6eb...6289b3' \
2 -H 'X-Monite-Version: 2024-05-25' \
3 -H 'X-Monite-Entity-Id: ENTITY_ID' \
4 -H 'Authorization: Bearer ACCESS_TOKEN' \
5 -H 'Content-Type: application/json' \
6 -d '{
7 "invoice": {
8 "line_items": [
9 {
10 "quantity": 5,
11 "product_id": "8755c86a-d630-4920-b6fd-fd2917d87dfb",
12 "vat_rate_id": "51cefc6c-9f82-484e-ae6a-a3a89b507bea"
13 },
14 {
15 "quantity": 1,
16 "product_id": "b97601e1-e795-4c47-85d5-e5c54a75058d",
17 "vat_rate_id": "479155c3-0995-4689-a3cf-7482ea5132a9"
18 }
19 ]
20 }
21 }'