US vaccine strategy
A 42-year-old healthcare worker lands in Phase 1a of the COVID-19 vaccine allocation the CDC set in December 2020. Enter age, occupation, long-term care residence and high-risk conditions to replay which US priority phase applied. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Age
- 42
- Occupation
- Healthcare
- Phase
- 1a
- Phase label
- Phase 1a
- Phase rank
- 1
- Qualifying group
- healthcare_personnel
United States COVID-19 vaccine allocation ranked population groups so scarce first doses reached people with the highest occupational exposure and those at the highest risk of severe disease. This US vaccine strategy tool applies the CDC Advisory Committee on Immunization Practices December 2020 phased table: it reads age in years, occupation class, long-term care residence, and whether a high-risk medical condition is present, then returns the assigned priority phase. Occupation, long-term care, and high-risk flags have documented defaults so a lone age still yields a phase.
How CDC ACIP phases rank groups from age, occupation, and conditions
The CDC Advisory Committee on Immunization Practices published a phased COVID-19 vaccine allocation in December 2020 so jurisdictions could rank groups when supply was scarce. Phase 1a covers healthcare personnel, who faced daily clinical exposure, and residents of long-term care facilities, who faced the highest early mortality. Phase 1b covers people aged seventy-five years and older and frontline essential workers in first response, education, food and agriculture, manufacturing, corrections, postal service, public transit, and grocery.
Phase 1c covers people aged sixty-five to seventy-four, people aged sixteen to sixty-four with high-risk medical conditions, and other essential workers in transportation, food service, construction, finance, information technology, energy, legal, media, public safety engineering, and water and wastewater. Phase 2 covers remaining people aged sixteen and older who did not already match a higher group. The engine collects every matching group, then assigns the highest-priority phase: 1a beats 1b, which beats 1c, which beats 2, which beats 3.
A seventy-year-old nurse is therefore Phase 1a from occupation, not Phase 1c from age. The ranking is an educational replay of that historical ACIP table, not a clinic appointment, a state portal, or a substitute for the current CDC immunization schedule.
Where this replay helps, and its limits
Public-health classrooms and tabletop exercises use a CDC vaccine priority phase calculator so students can see why a grocery worker, a seventy-six-year-old, and a long-term care resident were not interchangeable when first doses were scarce. Occupational-health and emergency-preparedness teams run the same contract during scarce-dose drills without standing up a live immunization registry.
Journalists and policy explainers need a deterministic oracle that returns Phase 1c for a forty-year-old with a high-risk condition and Phase 2 for a healthy forty-year-old with no essential occupation, instead of a prose summary that drifts between articles. Validation failures never consume balance. Keep expectations educational: this is not a medical-device diagnosis, not a booking tool, and not the current seasonal COVID-19 or influenza schedule, which CDC updates separately.
People seeking a real appointment should follow their jurisdiction and clinician, not any single automated label from a historical allocation table.
What you can do with it
Classroom allocation drills
Let students submit age, occupation, long-term care, and high-risk flags and see which CDC ACIP phase the December 2020 table assigns, including why a higher group wins when two groups match.
Occupational-health scarce-dose exercises
Rank a workforce roster into Phase 1a, 1b, 1c, 2, or 3 during preparedness drills without connecting to a live immunization registry or inventing a custom spreadsheet of ACIP rules.
FAQ
What happens if age is not a nonnegative integer?
Age must be a whole number of years from 0 through 120. Missing, negative, fractional, or non-numeric age is not billed.
Which occupations map to which phases?
When several groups match, the highest-priority phase is returned.
Does a high-risk condition always assign Phase 1c?
Only for ages 16–64, and only when no higher phase applies. Ages 75 and older are already Phase 1b. Healthcare personnel and long-term care residents remain Phase 1a even with a high-risk condition.
Which phase applies if someone fits several groups?
The highest-priority one: 1a beats 1b, which beats 1c, then 2 and finally 3. A seventy-year-old nurse is therefore Phase 1a because of her job, not Phase 1c because of her age.
Is this the current vaccine schedule?
No. It is an educational replay of the historical December 2020 table, not a booking tool and not the current CDC schedule. To get vaccinated today, follow your jurisdiction and your clinician.
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/us-vaccine-strategy \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"age":42}'const res = await fetch("https://api.kit.forhosting.com/health/us-vaccine-strategy", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"age": 42
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/us-vaccine-strategy",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"age": 42
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/us-vaccine-strategy", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"age":42}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"age":42}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/us-vaccine-strategy", 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": 42
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.us_vaccine_strategy",
"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
Age must be a nonnegative integer; a missing, negative, fractional, or non-numeric age fails with invalid_input and is not billed.
How CDC ACIP phases rank groups from age, occupation, and conditions
This endpoint maps remaining people under sixteen to Phase 3 so every nonnegative age receives a phase instead of a silent gap.
Input contract, assigned-phase response, and age validation
POST a JSON body with required age as a nonnegative integer from zero through one hundred twenty completed years. Occupation is the closed set healthcare, frontline_essential, other_essential, or none; omitted occupation defaults to none. long_term_care is a boolean that is true when the person lives in a nursing home, skilled-nursing, or similar long-term care facility; omitted values default to false. high_risk_condition is a boolean that is true when a CDC high-risk medical condition from the December 2020 table is present, such as cancer, chronic kidney disease, COPD, heart disease, obesity, pregnancy, smoking, type 2 diabetes, or immunocompromise; omitted values default to false. Aliases exist for each canonical name so older forms can map without renaming columns. Age that is missing, negative, fractional, boolean, infinite, or otherwise not a nonnegative integer fails with invalid_input naming age and is not charged. Unknown occupation strings and non-boolean flags fail the same way. On success the body echoes age, occupation, long_term_care, and high_risk_condition, then returns phase as the machine key 1a, 1b, 1c, 2, or 3; phase_label for display; phase_rank as 1 for the highest priority through 5 for Phase 3; qualifying_group and qualifying_group_label for the group that won the rank; reasons as every matching group key; framework naming the ACIP table; and method cdc_acip_covid19_allocation. Identical inputs always yield identical JSON because the path never touches a network, a model, a clock, or a random generator.
Integration use cases
Explainers and deterministic fixtures
Pin the assigned phase in journalism notebooks and continuous-integration tests so a healthy adult, a high-risk adult, and a healthcare worker never silently swap labels.
Technical questions
How does the US vaccine strategy tool assign a CDC priority phase?
It ranks age, occupation (healthcare, frontline_essential, other_essential, or none), long-term care residence, and high-risk medical conditions against the CDC ACIP December 2020 COVID-19 allocation table and returns the highest matching phase (1a, 1b, 1c, 2, or 3).
What does the CDC vaccine priority calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.