Quotas and limits
Every plan has a monthly quota. Only requests that return a result are counted.
Quotas by plan
#| Plan | Requests per month | Active keys | Webhooks |
|---|---|---|---|
| Free | 500 | 3 | no |
| Starter | 25,000 | 5 | no |
| Pro | 250,000 | 10 | yes, up to 10 |
| Enterprise | by arrangement, up to 5,000,000 | 25 | yes, up to 10 |
All plans include every dataset and all four access methods. Prices are on the pricing page.
What counts and what is free
#| Call | Counts |
|---|---|
| Querying a dataset with a result, via API, SDK, CLI or MCP | yes, one request |
| History of a dataset, including as CSV | yes, one request |
| A list as CSV | yes, one request |
| A call that errors (400, 401, 404, 429, 500) | no |
| Catalog, changelog, OpenAPI description | no |
| MCP: initialize, ping, tools/list | no |
| Webhook messages to your server | no, only fetching the new value counts |
Checking your usage
#Every response with a valid key carries two headers:
In the MCP server, the same state is in the result under _meta. In your account you see the month's usage, and for each key when it was last used.
Monthly reset
#The quota applies per calendar month and starts over on the first at 00:00 German time. Unused requests expire and do not carry over.
When your quota is used up
#Further requests get status 429 with the code kontingent_erreicht until the first of the month. No extra costs arise, and nothing is upgraded automatically. If you switch to a larger plan in your account, the new quota applies immediately.
On Starter, Pro and Enterprise there is a buffer of 10% above the quota: the API keeps counting, sends an email when you reach the quota and only responds with 429 after the buffer. If you cancel or move to a smaller plan, the previous quota applies until the end of the month.
Other limits
#| What | Limit |
|---|---|
| Webhooks per account | 10, from the Pro plan |
| Your server's response time to a webhook | 8 seconds |
| Delivery attempts per webhook message | 5, one per day |
| Sign-in links | 3 per email address in 10 minutes |
| Messages through the contact form | 5 per hour |
| Public holidays and working days | Years 2015 to 2035 |
| Tables | Effective dates from January 1, 2015 |
Saving requests
#- Cache responses for one day. Most values only change on January 1 or July 1. The API tells you how long itself: every dataset response carries
Cache-Control: max-age=…until the next midnight German time. - After that, ask again with the stored
ETagin theIf-None-Matchheader. If nothing changed, you get status 304 with no body back, and it does not count against your quota. The official SDKs do this automatically, see JavaScript SDK and Python SDK. - Import the history once and pick up changes by webhook, instead of polling regularly, or fetch the whole table inventory in a single request with /export.
- Fetch public holidays once per year and state, and store them locally.
- In web applications, call the API from the server and keep the result in your hosting's cache, see Using it in Next.js.
We answer questions about higher quotas through the contact form. Quellenkontor bills Business contracts by invoice.
Something missing or unclear? Write to us and we will extend the docs.