In order to help the economy and support consumers the government of Germany is about to introduce a temporary decrease of the two current tax rates.

Tax rate Percentage until 2020-06-30 Percentage from 2020-07-01 to 2020-12-31 Percentage from 2021-01-01
DE_STANDARD 19.0 16.0 19.0
DE_LOWER 7.0 5.0 7.0

This legislative change will be finally decided in the Bundestag (house of parliament) on 29 June 2020 and become effective only two days later on 1 July 2020. It is currently planned to switch back to 19 and 7 % on 1 January 2021, but nobody can guarantee this at this point in time.

The good news for you as a developer are: there will not be breaking changes in the API and there is a chance you don’t have to adapt your application at all.

How to get the valid tax rate percentage through the API

There are different ways to find out the correct tax rate to use for your tax calculation.

Find out through the course of historical tax rates

GET /tax_rates?attributes=percentages&include_historical_data=true

Passing the include_historical_data filter will return the different periods with their dedicated tax rate, even when they have already passed. This will make it easy for you to cache the course of tax rate changes on the side of your application.

{
  // ...
  "$items": [
    {
      "id": "DE_STANDARD",
      "displayed_as": "19,00% USt",
      "$path": "/tax_rates/DE_STANDARD",
      "percentages": [
        {
          "percentage": "19.0",
          "from_date": "1900-01-01",
          "to_date": "2020-06-30"
        },
        {
          "percentage": "16.0",
          "from_date": "2020-07-01",
          "to_date": "2020-12-31"
        },
        {
          "percentage": "19.0",
          "from_date": "2021-01-01",
          "to_date": null
        }
      ]
    },
    // ...
  ]
}

Fetch the correct percentage for a specified date

The other available approach is to pass the date to the tax_rates endpoint. This probably requires less logic on the client side, but you will need to make an API call every time (or day) when you create an invoice, etc.

If you omit the date parameter, you will only ever see the percentages of the current day.

GET /tax_rates?attributes=percentage&date=2020-07-03
{
  // ...
  "$items": [
    {
      "id": "DE_STANDARD",
      "displayed_as": "Standard",
      "$path": "/tax_rates/DE_STANDARD",
      "percentage": "16.0"
    },
    {
      "id": "DE_LOWER",
      "displayed_as": "Ermäßigt",
      "$path": "/tax_rates/DE_LOWER",
      "percentage": "5.0"
    },
    // ...
  ]
  // ...
}

Please ignore the displayed_as value, which is a static string and may carry the wrong information in these times of temporary tax percentages.

For the full wealth of details on the tax rates endpoint, check out the Taxes Endpoint Reference.