FAQ

Frequently asked questions

Frequently asked questions about the German VAT Exchange Rates API: data provenance, update frequency, access, limits, and use in accounting and tax workflows.

Answers

What is the German VAT Exchange Rates API?

A REST/JSON API over the monthly euro reference rates published by the German Federal Ministry of Finance (BMF) for converting foreign-currency invoices for VAT purposes under § 16 Abs. 6 UStG.

Where do the rates come from?

Directly from the original publications of the Bundesfinanzministerium (BMF). Monthly and yearly PDFs are imported automatically and stored in a Postgres database.

How often is the data updated?

Monthly, shortly after the BMF publishes the new rates. A scheduled job on the 5th of each month checks for new publications and imports them idempotently.

How do I get an API key?

Send a short email to dimitri.missoh+uuk@gmail.com describing your use case. Tokens are issued manually to prevent abuse.

How much does it cost?

The API is free for fair use. If you want to support hosting, use the Buy me a coffee link on the homepage.

What are the rate limits?

60 requests per minute per API key on a sliding window. Responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. When exceeded, the API returns 429 with a Retry-After header.

Are yearly averages provided?

Yes. Once the BMF publishes its yearly overview and all twelve months are confirmed final, the yearly average is computed automatically and exposed via /api/v1/rates/yearly.

May I use these rates for my VAT return?

Yes. These are the official BMF rates intended for VAT use. This API simply exposes them in a structured form. The BMF publication remains the legally binding source.

Can I cache the responses?

Yes. Responses include appropriate Cache-Control headers. Since rates do not change within a month, caches at hour or day granularity are reasonable.

What happens if the BMF changes the PDF format?

The importer is updated as soon as the change is known. In the meantime, already-imported months remain available; only new months are missing until the importer is patched.