Netherlands vaccine queue
The Netherlands did not offer first COVID-19 doses to everyone at once. The Health Council of the Netherlands (Gezondheidsraad) and RIVM ranked long-term care workers and residents, then older adults from the oldest down, medical high-risk patients whose risk resembled that of people around seventy, remaining people aged sixty and over, other healthcare workers, adults with a medical indication, and finally the rest of the population by descending age so scarce supply reached the highest-risk groups first. This Netherlands vaccine queue tool applies that Dutch priority strategy to age and risk-group membership and returns the assigned priority group. Age must be a nonnegative integer; a missing, negative, fractional, or non-numeric age fails with invalid_input and is not billed. Risk-group membership has a documented default so a lone age still yields a group. The same isomorphic logic powers the free in-browser widget and the prepaid API at $0.002 per successful item, so classrooms, explainers, and product teams pin identical JSON without calling a live RIVM or GGD booking feed.
Run — free
How to use it
Enter your values in the form above. The tool checks them before calculating and shows the result on the same page.
Check your inputs
Use the labels and units shown next to each field. If something is missing or outside the allowed range, the page points to the field to fix.
Use it again or automate it
Use the browser tool for individual checks and the API when you need the same capability in an automated workflow.
What you can do with it
Get an answer now
Enter one set of values and see the result without building a spreadsheet or script.
Compare scenarios
Change one value at a time and rerun the calculation to understand what affects the result.
Automate repeated work
Use the API when the same calculation needs to run inside your product or workflow.
FAQ
How does the Netherlands vaccine queue tool assign a priority group?
It ranks age and risk_group (none, care_staff, care_resident, high_risk, medical_indication, or healthcare) against the Gezondheidsraad/RIVM 2021 COVID-19 order for the Netherlands and returns the highest matching group (1 through 15).
What happens if age is not a nonnegative integer?
The task fails with invalid_input. Age must be a whole number of years from 0 through 120. Missing, negative, fractional, or non-numeric age is not billed.
Which risk_group values map to which Dutch groups?
care_staff is group 1. care_resident is group 2. high_risk is group 5. healthcare is group 8. medical_indication is group 9 for ages 18–59 when no higher group applies. none adds no risk-group slice; age still assigns a group. When several slices match, the highest-priority group is returned.
Does a medical high-risk flag always assign group 5?
Only when no higher group applies. Long-term care workers remain group 1. Nursing-home and disability-care residents remain group 2. People aged 90 and over remain group 3, and people aged 80–89 remain group 4. A medical_indication without high_risk assigns group 9 only for ages 18–59.
What does the Netherlands vaccine queue calculator cost?
The browser tool is free. API requests use prepaid balance at $0.002 per successful call; invalid input is not billed.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/health/vaccine-queue-netherlands \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"age":72}'const res = await fetch("https://api.kit.forhosting.com/health/vaccine-queue-netherlands", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"age": 72
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/vaccine-queue-netherlands",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"age": 72
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/vaccine-queue-netherlands", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"age":72}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"age":72}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/vaccine-queue-netherlands", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"age": 72
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.vaccine_queue_netherlands",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |