Scottish COVID vaccine queue
In Scotland's 2021 COVID-19 programme, a 72-year-old with no priority job or health condition sits in JCVI group 4, roughly 714,138th in line. Give age, occupation and any underlying condition to see the group, out of sixteen, and the estimated place. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Age
- 72
- Occupation
- Other
- Health condition
- None
- Priority group
- 4
- Group
- age_70_74_cev
- Group label
- Adults aged 70–74 and clinically extremely vulnerable people
- Queue position
- 714,138
This Scottish COVID-19 vaccine queue estimator maps age, occupation, and underlying health conditions onto the 2021 Joint Committee on Vaccination and Immunisation priority list that NHS Scotland and Public Health Scotland used for the national vaccination programme. It returns the JCVI priority group from 1 through 16 and a rough one-based queue position under frozen 2021 Scotland cohort sizes. Care-home residents and their carers land in group 1. People aged 80 and over and frontline health and social care workers land in group 2. Remaining adults then fall through the published JCVI age and clinical-risk steps, then the later adult and paediatric groups.
How the 2021 JCVI groups become a Scottish queue position
Scotland opened COVID-19 vaccination in December 2020 following the Joint Committee on Vaccination and Immunisation priority list, delivered by NHS Scotland health boards, hospital hubs, general practices, and community pharmacies under the Scottish Government and Public Health Scotland. Priority group 1 covered residents in a care home for older adults and the staff who cared for them, a small highest-risk cohort frozen here at eighty-five thousand people.
Priority group 2 covered everyone aged eighty years and over together with frontline health and social care workers, frozen at four hundred and thirty thousand people. Groups 3, 4, and 5 then stepped down by age at seventy-five, seventy, and sixty-five. Group 4 also pulled in clinically extremely vulnerable people who had been advised to shield, even when they were younger than seventy.
Group 6 covered people aged sixteen to sixty-four with an underlying health condition on the JCVI clinical-risk list, and unpaid carers. Groups 7, 8, and 9 finished the original nine-group adult programme at sixty, fifty-five, and fifty years. Remaining adults entered by decade of age in groups 10, 11, and 12.
Remaining sixteen- and seventeen-year-olds, adolescents aged twelve to fifteen, children aged five to eleven, and children under five followed as later paediatric groups 13 through 16. This estimator assigns the highest matching group for the submitted profile, then places older people earlier inside that group under a uniform-age assumption on those frozen Scotland cohort sizes. Queue position is one plus the people in all earlier groups plus the estimated number of older people in the current group.
The result is a reproducible teaching number, not a live NHS Inform appointment and not a substitute for the booking tools that health boards actually ran in 2021.
Where a Scottish vaccine-queue estimator earns its keep, pricing, and limits
Newsrooms and explainer desks reconstructing the 2021 Scottish rollout use a Scotland vaccine queue calculator so a reader can type an age, pick an occupation, declare underlying health conditions, and see group 4 versus group 10 without scraping archived Scottish Government circulars or Public Health Scotland statistical publications. Civics and public-health classrooms grade the same three-field profile against a deterministic oracle instead of a spreadsheet that silently ranks a sixty-nine-year-old with a seventy-year-old. Failed validation does not consume balance.
This is an educational reconstruction of frozen 2021 Scotland cohort sizes, not a diagnostic medical device, not an official NHS Scotland waitlist, and not advice about whether any person should have been vaccinated. Eligibility rules later changed for children, booster doses, spring campaigns, and health-board booking windows; this calculator freezes the original JCVI priority table as Scotland applied it so two clients never drift. People making personal health decisions should follow current official advice from NHS Inform, Public Health Scotland, and the Scottish Government.
What you can do with it
News explainers of the 2021 Scottish rollout
Let a reader enter age, occupation, and underlying health conditions and show the matching JCVI priority group plus a rough queue position next to the frozen Scotland cohort sizes.
Classroom civics and public-health grading
Mark three-field vaccine-priority items with a deterministic oracle that rejects a negative or non-numeric age and never invents a group outside 1–16.
FAQ
What happens if age is negative or not a number?
A negative age is rejected with a message that age cannot be negative. An age that is not a finite number is rejected as well. Invalid input is not billed.
How do underlying health conditions change the JCVI group?
Children under 16 stay in the paediatric groups unless they are care-home residents.
Is this an official NHS Scotland waitlist, and what does it cost?
No. It is an educational reconstruction of frozen 2021 Scotland cohort sizes, not medical advice and not an NHS Inform booking tool. The browser tool is free.
Which JCVI group was a 72-year-old in Scotland?
Group 4, which joined people aged 70 to 74 with clinically extremely vulnerable people advised to shield. The estimated place is 714,138, so 714,137 people are ahead in the frozen 2021 Scottish cohort sizes.
Where did care home residents and staff sit in Scotland's vaccine queue?
First, in group 1: residents of care homes for older adults and the staff who cared for them, a cohort frozen here at about eighty-five thousand people. Group 2 then covered people aged 80 and over and frontline health and social care workers.
Related tools
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-scotland \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"age":72,"occupation":"other","health_condition":"none"}'const res = await fetch("https://api.kit.forhosting.com/health/vaccine-queue-scotland", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"age": 72,
"occupation": "other",
"health_condition": "none"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/vaccine-queue-scotland",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"age": 72,
"occupation": "other",
"health_condition": "none"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/vaccine-queue-scotland", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"age":72,"occupation":"other","health_condition":"none"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"age":72,"occupation":"other","health_condition":"none"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/vaccine-queue-scotland", 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,
"occupation": "other",
"health_condition": "none"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.vaccine_queue_scotland",
"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. |
Technical notes
A negative age or an age that is not a number fails with invalid_input and is not billed.
Input contract, response shape, and error behaviour
Finite-domain values are enums so the form paints a select instead of a free-text trap. Optional keys are omitted rather than set to null. POST a JSON body with three required fields. age is a finite number of completed years from 0 through 120 inclusive; numeric strings such as "72" are accepted, as is the alias age_years. A negative age fails with invalid_input and the message that age cannot be negative. An age that is not a number — a word, a boolean, Infinity, or NaN — fails with invalid_input naming the field. Those failures are not billed; that is the product promise. occupation is one of the closed categories care_home_staff, frontline_health_social_care, unpaid_carer, or other; the alias occupation_category is accepted. health_condition is none, underlying, clinically_extremely_vulnerable, or care_home_resident; the aliases health_conditions and underlying_conditions are accepted. A missing field or an occupation or health-condition value outside the enum also fails with invalid_input naming the field. On success the body echoes age, occupation, and health_condition, reports priority_group as an integer from 1 through 16, and reports priority_label in plain language. group and group_label name the sub-cohort used for ranking. queue_position is the one-based estimate; people_ahead is queue_position minus one. method is always jcvi_scotland_2021 so clients can pin the rule set. notes restates why that group was chosen. This endpoint does not collect postcode, health board, GP practice, or pregnancy status, so it cannot reproduce every JCVI footnote; it reproduces the three public levers people actually remember: age, occupation, and underlying health conditions. Pair the numbers with your own explainer copy if you need a chart of remaining first doses; this endpoint ranks one profile and does not emit plots.
Where a Scottish vaccine-queue estimator earns its keep, pricing, and limits
Keep requests small, pin priority_group and queue_position in tests, and you get a reproducible Scottish vaccine-queue estimate for homework, graphics, and edge workers without standing up a booking stack of your own.
Integration use cases
Historical timelines and museum interactives
Drive a kiosk or documentary companion from the same parse contract the API bills, so the free widget and the archive backend never disagree on an Edinburgh, Glasgow, or island-board profile.
Technical questions
How is the Scottish COVID vaccine queue position estimated?
The calculator assigns the highest matching 2021 JCVI priority group from age, occupation, and health_condition, then ranks inside that group with older people first. queue_position is one plus people in earlier groups and older people in the current group.
Which occupations map to the earliest JCVI groups in Scotland?
care_home_staff maps to group 1 with care-home residents. frontline_health_social_care maps to group 2 with people aged 80 and over. unpaid_carer maps to group 6 for people aged 16–64 unless an earlier age or health-condition rule already applies.