Medications · LIVE
CDC catch-up immunization interval (ACIP)
Return the printed ACIP 2025 catch-up Table 2 minimum age and previous-dose interval for a caller-assigned antigen and dose, and whether that age and interval are met.
Markdown: /docs/cdc-imm.md · Canonical: https://magentlab.com/docs/cdc-imm
Not a medical device. Not a diagnosis, dose, or listing recommendation.
What it computes
Return the printed ACIP 2025 catch-up Table 2 minimum age and previous-dose interval for a caller-assigned antigen and dose, and whether that age and interval are met.
When to use
When an agent already has a caller-assigned antigen, dose number, completed age in months, and weeks since the previous dose (omitted for dose 1) and needs the numeric catch-up Table 2 cell rather than the routine age bars or a vaccine order.
When not to use
- Not a medical device. Not a vaccine order. magent does not immunize.
- Catch-up Table 2 numeric minimum age and previous-dose interval cells only. Not the full routine schedule (Table 1) and not Table 3 medical-indication rows.
- HepB dose 3 (8 weeks and 16 weeks after dose 1), Hib, PCV, rotavirus max ages, 6-month intervals, the 4-day grace period, and live-virus spacing beyond this table are not implemented.
- DTaP is the 4-month-through-6-year section (age_months < 84). 6 weeks is stored as 1.5 months. Age is caller-assigned completed months; magent does not derive chronological age.
Formula
ACIP 2025 child/adolescent catch-up Table 2: eligible if age_months >= minimum_age_months and (dose 1 has no printed interval, or weeks_since_previous_dose >= minimum_interval_weeks). HepB dose 1 birth = 0 months; HepB dose 2 = 4 weeks. MMR dose 1 = 12 months; MMR dose 2 = 4 weeks. HepA and varicella dose 1 = 12 months. DTaP/IPV dose 1 = 6 weeks as 1.5 months; DTaP doses 2-3 and IPV dose 2 = 4 weeks (DTaP only when age_months < 84). Tdap dose 1 = 84 months. Not Table 1 routine bars. Not Hib, PCV, rotavirus, HepB dose 3, 6-month intervals, the 4-day grace period, or live-virus spacing beyond this table. magent does not immunize
Citation
- Authors
- Issa AN, Wodi AP, Moser CA, Cineas S
- Source
- MMWR Morb Mortal Wkly Rep. 2025;74(2):26-29
Worked example
HepB dose 2 at 4 months, 4 weeks after dose 1: eligible
Given:
age_months=4dose_number=2vaccine=hepbweeks_since_previous_dose=4
- Table 2 Hepatitis B dose 1 to dose 2 minimum interval is 4 weeks
- Minimum age for HepB dose 1 is birth (0 months); age 4 months meets it
- weeks_since_previous_dose 4 >= 4 → eligible true
HepB dose 2 at 4 months, 3 weeks after dose 1: too soon
Given:
age_months=4dose_number=2vaccine=hepbweeks_since_previous_dose=3
- Table 2 Hepatitis B dose 1 to dose 2 minimum interval is 4 weeks
- Age 4 months meets the birth minimum
- weeks_since_previous_dose 3 < 4 → eligible false
HepB dose 1 at 4 months: no previous-dose interval
Given:
age_months=4dose_number=1vaccine=hepb
- Table 2 Hepatitis B dose 1 minimum age is birth (0 months)
- Dose 1 has no printed previous-dose interval
- age 4 months >= 0 and interval not applicable → eligible true
Also searched as
- CDC catch-up immunization
- ACIP catch-up schedule
- hepatitis B minimum interval
- MMR minimum age
- catch-up vaccine interval
- Table 2 catch-up
Try
Opens the live endpoint. Unpaid browser requests show the paywall; agents should send Accept: application/json.
/api/calc/cdc_imm?vaccine=hepb&dose_number=2&age_months=4&weeks_since_previous_dose=4
Full URL: https://api.magentlab.com/api/calc/cdc_imm?vaccine=hepb&dose_number=2&age_months=4&weeks_since_previous_dose=4
Call
Expect HTTP 402 until you retry with PAYMENT-SIGNATURE. Incomplete query params
return HTTP 400 before any quote or charge.
curl -i -H "Accept: application/json" "https://api.magentlab.com/api/calc/cdc_imm?vaccine=hepb&dose_number=2&age_months=4&weeks_since_previous_dose=4"
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
vaccine |
string | required · hepb, mmr, dtap, ipv, hepa, var, tdap | Caller-assigned antigen with a numeric Table 2 minimum age and/or previous-dose interval: hepb, mmr, dtap, ipv, hepa, var, or tdap. Not a vaccine order. |
dose_number |
integer | required | Dose number in the series as printed (integer 1-5). Only rows with a numeric minimum age and/or interval are implemented; other dose numbers are rejected. |
age_months |
integer | required | Caller-assigned completed age in months (integer 0-216; 18 years or younger). magent does not derive chronological age. |
weeks_since_previous_dose |
integer | optional | Whole weeks since the previous dose (integer 0-520). Required for dose 2 and later. Must be omitted for dose 1 as Table 2 prints no previous-dose interval. |
Bulk (POST)
POST the same path with a JSON items array. The first item is the GET unit; each additional item is $0.002. Invalid items return HTTP 400 before settlement.
- 1 to 25 items. Each item uses the same keys as the GET query parameters.
- POST of 1 item costs the same as GET. Lists longer than 25: chunk into multiple POSTs. Extra items still execute; do not pad dummy rows.
- The first invalid item fails the whole request (index in the 400 JSON). You are not charged.
- HTTP 200 is {count, path, items}. Each items[i] is the GET 200 body for that row.
- Catalog misses (empty matches, found=false) stay paid 200s inside that slot.
- x402 resource URL is this path plus n and body_sha256. Browsers that prefer text/html get the same paywall as GET; Pay retries POST with the same items.
Example request (fixture)
{
"items": [
{
"age_months": "4",
"dose_number": "2",
"vaccine": "hepb",
"weeks_since_previous_dose": "4"
},
{
"age_months": "4",
"dose_number": "2",
"vaccine": "hepb",
"weeks_since_previous_dose": "4"
}
]
}
Opens a two-item fixture on the API host. Unpaid browsers get the same MetaMask paywall as GET; Pay retries POST with those items.
Example 200 (fixture)
{
"count": 2,
"path": "/api/calc/cdc_imm",
"items": [
{
"components": [
{
"value": 0,
"factor": "age_met",
"met": true
},
{
"value": 4,
"factor": "interval_met",
"met": true
}
],
"disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
"citation": {
"authors": "Issa AN, Wodi AP, Moser CA, Cineas S",
"doi": "10.15585/mmwr.mm7402a2",
"id": "cdc-acip-catch-up-schedule",
"pmid": "39819853",
"source": "MMWR Morb Mortal Wkly Rep. 2025;74(2):26-29",
"title": "Advisory Committee on Immunization Practices Recommended Immunization Schedule for Children and Adolescents Aged 18 Years or Younger — United States, 2025"
},
"formula": "cdc_imm",
"formula_expression": "ACIP 2025 child/adolescent catch-up Table 2: eligible if age_months >= minimum_age_months and (dose 1 has no printed interval, or weeks_since_previous_dose >= minimum_interval_weeks). HepB dose 1 birth = 0 months; HepB dose 2 = 4 weeks. MMR dose 1 = 12 months; MMR dose 2 = 4 weeks. HepA and varicella dose 1 = 12 months. DTaP/IPV dose 1 = 6 weeks as 1.5 months; DTaP doses 2-3 and IPV dose 2 = 4 weeks (DTaP only when age_months < 84). Tdap dose 1 = 84 months. Not Table 1 routine bars. Not Hib, PCV, rotavirus, HepB dose 3, 6-month intervals, the 4-day grace period, or live-virus spacing beyond this table. magent does not immunize",
"age_months": 4,
"dose_number": 2,
"eligible": true,
"minimum_age_months": 0,
"minimum_interval_weeks": 4,
"vaccine": "hepb",
"weeks_since_previous_dose": 4
},
{
"components": [
{
"value": 0,
"factor": "age_met",
"met": true
},
{
"value": 4,
"factor": "interval_met",
"met": true
}
],
"disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
"citation": {
"authors": "Issa AN, Wodi AP, Moser CA, Cineas S",
"doi": "10.15585/mmwr.mm7402a2",
"id": "cdc-acip-catch-up-schedule",
"pmid": "39819853",
"source": "MMWR Morb Mortal Wkly Rep. 2025;74(2):26-29",
"title": "Advisory Committee on Immunization Practices Recommended Immunization Schedule for Children and Adolescents Aged 18 Years or Younger — United States, 2025"
},
"formula": "cdc_imm",
"formula_expression": "ACIP 2025 child/adolescent catch-up Table 2: eligible if age_months >= minimum_age_months and (dose 1 has no printed interval, or weeks_since_previous_dose >= minimum_interval_weeks). HepB dose 1 birth = 0 months; HepB dose 2 = 4 weeks. MMR dose 1 = 12 months; MMR dose 2 = 4 weeks. HepA and varicella dose 1 = 12 months. DTaP/IPV dose 1 = 6 weeks as 1.5 months; DTaP doses 2-3 and IPV dose 2 = 4 weeks (DTaP only when age_months < 84). Tdap dose 1 = 84 months. Not Table 1 routine bars. Not Hib, PCV, rotavirus, HepB dose 3, 6-month intervals, the 4-day grace period, or live-virus spacing beyond this table. magent does not immunize",
"age_months": 4,
"dose_number": 2,
"eligible": true,
"minimum_age_months": 0,
"minimum_interval_weeks": 4,
"vaccine": "hepb",
"weeks_since_previous_dose": 4
}
]
}
Response
| Field | Type | Description |
|---|---|---|
formula |
string | cdc_imm |
formula_expression |
string | Published ACIP 2025 Table 2 catch-up age and interval rule |
vaccine |
string | Caller-assigned antigen used |
dose_number |
integer | Dose number in the series |
age_months |
integer | Caller-assigned completed age in months |
weeks_since_previous_dose |
integer | Weeks since the previous dose, or null for dose 1 |
minimum_age_months |
number | Printed minimum age in months for that antigen and dose |
minimum_interval_weeks |
integer | Printed previous-dose interval in weeks, or null for dose 1 |
eligible |
boolean | True when age meets the printed minimum and a printed interval is met. Not a vaccine order. |
components |
array | Tree rows for age_met and interval_met with factor, met, and value |
citation |
object | Issa 2025 MMWR ACIP schedule citation |
disclaimer |
string | Not-a-device notice |
Example JSON
Machine form of the same example. Frozen fixture. Not a live lookup.
{
"components": [
{
"value": 0,
"factor": "age_met",
"met": true
},
{
"value": 4,
"factor": "interval_met",
"met": true
}
],
"disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
"citation": {
"authors": "Issa AN, Wodi AP, Moser CA, Cineas S",
"doi": "10.15585/mmwr.mm7402a2",
"id": "cdc-acip-catch-up-schedule",
"pmid": "39819853",
"source": "MMWR Morb Mortal Wkly Rep. 2025;74(2):26-29",
"title": "Advisory Committee on Immunization Practices Recommended Immunization Schedule for Children and Adolescents Aged 18 Years or Younger — United States, 2025"
},
"formula": "cdc_imm",
"formula_expression": "ACIP 2025 child/adolescent catch-up Table 2: eligible if age_months >= minimum_age_months and (dose 1 has no printed interval, or weeks_since_previous_dose >= minimum_interval_weeks). HepB dose 1 birth = 0 months; HepB dose 2 = 4 weeks. MMR dose 1 = 12 months; MMR dose 2 = 4 weeks. HepA and varicella dose 1 = 12 months. DTaP/IPV dose 1 = 6 weeks as 1.5 months; DTaP doses 2-3 and IPV dose 2 = 4 weeks (DTaP only when age_months < 84). Tdap dose 1 = 84 months. Not Table 1 routine bars. Not Hib, PCV, rotavirus, HepB dose 3, 6-month intervals, the 4-day grace period, or live-virus spacing beyond this table. magent does not immunize",
"age_months": 4,
"dose_number": 2,
"eligible": true,
"minimum_age_months": 0,
"minimum_interval_weeks": 4,
"vaccine": "hepb",
"weeks_since_previous_dose": 4
}
Client errors (HTTP 400)
Invalid params return 400 without charge. Shared HTTP 402 and 503 meanings: Payments.
| HTTP | Code | When |
|---|---|---|
| 400 | invalid_cdc_imm |
CDC catch-up immunization inputs must match the printed vaccine, dose number, age, and interval columns. Returned before settlement; you are not charged. |
| 400 | invalid_items |
POST body must be a JSON object with only an items array Returned before settlement; you are not charged. |
| 400 | invalid_item_count |
items must be an array of 1 to 25 objects Returned before settlement; you are not charged. |
| 400 | invalid_item |
each items entry must be a JSON object Returned before settlement; you are not charged. |
Related tools
- RhIG vials — Compute ACOG Practice Bulletin 181 RhD immune globulin vial count from caller-assigned fetal-cell percent and maternal blood volume using AABB Technical Manual rounding of FMH/30.
Payment
Unpaid requests return HTTP 402 even if query parameters or POST items are missing or invalid, so CDP and agents can index the path. After a PAYMENT-SIGNATURE, invalid params return HTTP 400 JSON before settlement. magent does not charge. Fix the params, then request a new 402 quote for that complete URL. Catalog misses (empty matches, found=false) are valid paid 200s. Unpaid valid requests return HTTP 402 with a base64
PAYMENT-REQUIRED
header. HTTP 503 is not a new quote: retry the same PAYMENT-SIGNATURE. Full handshake
and shared payment errors: Payments.
Stdio MCP: /docs/mcp.
Guarantees
- HTTP 402 is unpaid, including a missing query. After PAYMENT-SIGNATURE, invalid parameters return HTTP 400 before settlement. You are not charged. HTTP 402 never includes the tool JSON.
- exact: settlement finishes before the tool (paymentFlow upfront). batch-settlement: verify/deposit before the tool; chargedCumulativeAmount commits after HTTP 2xx. Uncertain or failed settlement fails closed (HTTP 503). Retry the same PAYMENT-SIGNATURE.
- HTTP 402 is unpaid only. Do not sign a second authorization because of a 503.
- Execution is timeout-bounded and concurrency-capped.
- Calculator inputs are stored encrypted for allowlisted operators (Magent Console). They are not in public logs, SSH lookups, catalog, or rollups. Request logs store path without query.