MAGENT

Infection / VTE · LIVE

Utah COVID score (Webb)

Utah COVID score

Sum the Webb 2022 Table 6 simplified clinical prediction score from the printed age-decade lookup, caller-assigned community of color, and comorbidity and dyspnea flags, and return whether the total is at or above the Table 7 Youden threshold of 6.

LIVE $0.005 USDC GET /api/calc/utrs

Markdown: /docs/utah-covid.md · Canonical: https://magentlab.com/docs/utah-covid

Not a medical device. Not a diagnosis, dose, or listing recommendation.

What it computes

Sum the Webb 2022 Table 6 simplified clinical prediction score from the printed age-decade lookup, caller-assigned community of color, and comorbidity and dyspnea flags, and return whether the total is at or above the Table 7 Youden threshold of 6.

When to use

When an agent already has age, sex, caller-assigned community of color, dyspnea, and the Table 6 comorbidity flags and needs the published point total for 14-day hospitalization and 28-day mortality risk stratification, not a treatment-allocation order.

When not to use

  • Not a medical device.
  • Not a diagnosis or treatment-allocation order. magent does not prescribe therapy or decide hospitalization. Table 7 Youden ≥6 is a published discrimination threshold, not later Utah Crisis Standards of Care allocation cutoffs.
  • community_of_color is caller-assigned from the paper's community of color / non-white race or Hispanic/Latinx ethnicity. magent does not assign race or ethnicity.
  • Derivation used consecutive adults with positive SARS-CoV-2 PCR in ambulatory and emergency settings (mean age 40). Table 6 still prints 0-10 and 11-20 decades; magent encodes that lookup and does not examine the patient.
  • Obesity is the Methods BMI ≥30 flag (Table 6 label BMI>30). Severe immunocompromise follows Table 6 footnote 2; Methods also list additional immunosuppressive therapies. magent does not adjudicate those diagnoses.

Formula

Webb 2022 Table 6: age 0-10=0.5, 11-20=1, 21-30=1.5, 31-40=2, 41-50=2.5, 51-60=3, 61-70=3.5, 71-80=4, 81-90=4.5, 91-100=5, >100=5.5 (printed decade lookup, not floor(age/10)*0.5); diabetes, severe immunocompromise, obesity (Methods BMI ≥30; Table 6 label BMI>30), community of color 2 each; male sex, dyspnea, hypertension, CAD, cardiac arrhythmia, CHF, CKD, chronic pulmonary disease, chronic liver disease, cerebrovascular disease, chronic neurologic disease 1 each; max 24.5; score_ge_6 iff score ≥6 (Table 7 Youden)

Citation

Title
Simple scoring tool to estimate risk of hospitalization and mortality in ambulatory and emergency department patients with COVID-19
Authors
Webb BJ, Levin NM, Grisel N, Brown SM, Peltan ID, Spivak ES, et al.
Source
PLoS One. 2022;17(3):e0261508
DOI
10.1371/journal.pone.0261508

Worked example

Adult 31-40 years, female, no flags (Table 6 age 2.0)

Given: age=35cardiac_arrhythmia=falsecerebrovascular_disease=falsechronic_kidney_disease=falsechronic_liver_disease=falsechronic_neurologic_disease=falsechronic_pulmonary_disease=falsecommunity_of_color=falsecongestive_heart_failure=falsecoronary_artery_disease=falsediabetes=falsedyspnea=falsehypertension=falseobesity=falsesevere_immunocompromise=falsesex=female

  1. Age 35 is Table 6 band 31-40 → 2.0
  2. Female → 0; community_of_color false → 0
  3. Diabetes, severe immunocompromise, obesity, dyspnea, and remaining 1-point comorbidities false → 0
  4. Score = 2.0 (max 24.5); score_ge_6 = false (Table 7 Youden is ≥6)

Table 7 Youden neighborhood: age 91-100, male (score 6)

Given: age=95cardiac_arrhythmia=falsecerebrovascular_disease=falsechronic_kidney_disease=falsechronic_liver_disease=falsechronic_neurologic_disease=falsechronic_pulmonary_disease=falsecommunity_of_color=falsecongestive_heart_failure=falsecoronary_artery_disease=falsediabetes=falsedyspnea=falsehypertension=falseobesity=falsesevere_immunocompromise=falsesex=male

  1. Age 95 is Table 6 band 91-100 → 5.0
  2. Male → 1; all other flags false → 0
  3. Score = 6.0; score_ge_6 = true

Also searched as

  • Utah COVID score
  • Webb 2022 COVID score
  • Intermountain COVID prediction score
  • simplified clinical prediction score
  • Webb hospitalization mortality score
  • Utah COVID-19 score
  • Table 6 Webb score

Try

Opens the live endpoint. Unpaid browser requests show the paywall; agents should send Accept: application/json.

/api/calc/utrs?age=35&sex=female&community_of_color=false&diabetes=false&severe_immunocompromise=false&obesity=false&dyspnea=false&hypertension=false&coronary_artery_disease=false&cardiac_arrhythmia=false&congestive_heart_failure=false&chronic_kidney_disease=false&chronic_pulmonary_disease=false&chronic_liver_disease=false&cerebrovascular_disease=false&chronic_neurologic_disease=false

Full URL: https://api.magentlab.com/api/calc/utrs?age=35&sex=female&community_of_color=false&diabetes=false&severe_immunocompromise=false&obesity=false&dyspnea=false&hypertension=false&coronary_artery_disease=false&cardiac_arrhythmia=false&congestive_heart_failure=false&chronic_kidney_disease=false&chronic_pulmonary_disease=false&chronic_liver_disease=false&cerebrovascular_disease=false&chronic_neurologic_disease=false

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/utrs?age=35&sex=female&community_of_color=false&diabetes=false&severe_immunocompromise=false&obesity=false&dyspnea=false&hypertension=false&coronary_artery_disease=false&cardiac_arrhythmia=false&congestive_heart_failure=false&chronic_kidney_disease=false&chronic_pulmonary_disease=false&chronic_liver_disease=false&cerebrovascular_disease=false&chronic_neurologic_disease=false"

Parameters

Name Type Required Description
age integer required Age in whole years (0-120). Webb 2022 Table 6 decade lookup: 0-10=0.5, 11-20=1, 21-30=1.5, 31-40=2, 41-50=2.5, 51-60=3, 61-70=3.5, 71-80=4, 81-90=4.5, 91-100=5, >100=5.5. Not floor(age/10)×0.5.
sex string required Sex as recorded. Male scores 1 (Webb 2022 Table 6). female or male.
community_of_color boolean required Caller-assigned: the paper's community of color (self-identifies as non-white race or Hispanic/Latinx ethnicity). 2 points if true. magent does not assign race or ethnicity. true or false.
diabetes boolean required Diabetes mellitus (Webb 2022 Table 6 high-risk comorbidity). 2 points if true. true or false.
severe_immunocompromise boolean required Severe immunocompromise as Table 6 footnote 2: solid organ or bone marrow transplant, AIDS, active chemotherapy, or inherited immunodeficiency. 2 points if true. Caller-assigned; magent does not adjudicate. true or false.
obesity boolean required Obesity as BMI ≥30 kg/m² (Webb 2022 Methods; Table 6 label BMI>30). 2 points if true. Caller-assigned true or false.
dyspnea boolean required Dyspnea at the time of testing (Webb 2022 Table 6 symptom). 1 point if true. true or false.
hypertension boolean required Hypertension (Webb 2022 Table 6). 1 point if true. true or false.
coronary_artery_disease boolean required Coronary artery disease (Webb 2022 Table 6). 1 point if true. true or false.
cardiac_arrhythmia boolean required Cardiac arrhythmia (Webb 2022 Table 6). 1 point if true. true or false.
congestive_heart_failure boolean required Congestive heart failure (Webb 2022 Table 6). 1 point if true. true or false.
chronic_kidney_disease boolean required Chronic kidney disease (Webb 2022 Table 6). 1 point if true. true or false.
chronic_pulmonary_disease boolean required Chronic pulmonary disease (Webb 2022 Table 6). 1 point if true. true or false.
chronic_liver_disease boolean required Chronic liver disease (Webb 2022 Table 6). 1 point if true. true or false.
cerebrovascular_disease boolean required Cerebrovascular disease (Webb 2022 Table 6). 1 point if true. true or false.
chronic_neurologic_disease boolean required Chronic neurologic disease (Webb 2022 Table 6). 1 point if true. true or false.

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.

POST /api/calc/utrs Max 25 unit_amount + extra_item_amount * (n - 1) extra $0.002 PREVIEW

  • 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": "35",
      "cardiac_arrhythmia": "false",
      "cerebrovascular_disease": "false",
      "chronic_kidney_disease": "false",
      "chronic_liver_disease": "false",
      "chronic_neurologic_disease": "false",
      "chronic_pulmonary_disease": "false",
      "community_of_color": "false",
      "congestive_heart_failure": "false",
      "coronary_artery_disease": "false",
      "diabetes": "false",
      "dyspnea": "false",
      "hypertension": "false",
      "obesity": "false",
      "severe_immunocompromise": "false",
      "sex": "female"
    },
    {
      "age": "35",
      "cardiac_arrhythmia": "false",
      "cerebrovascular_disease": "false",
      "chronic_kidney_disease": "false",
      "chronic_liver_disease": "false",
      "chronic_neurologic_disease": "false",
      "chronic_pulmonary_disease": "false",
      "community_of_color": "false",
      "congestive_heart_failure": "false",
      "coronary_artery_disease": "false",
      "diabetes": "false",
      "dyspnea": "false",
      "hypertension": "false",
      "obesity": "false",
      "severe_immunocompromise": "false",
      "sex": "female"
    }
  ]
}

Open bulk paywall →

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/utrs",
  "items": [
    {
      "components": [
        {
          "factor": "male",
          "points": 0,
          "present": false
        },
        {
          "value": 35,
          "factor": "age",
          "points": 2.0,
          "present": true
        },
        {
          "factor": "community_of_color",
          "points": 0,
          "present": false
        },
        {
          "factor": "diabetes",
          "points": 0,
          "present": false
        },
        {
          "factor": "severe_immunocompromise",
          "points": 0,
          "present": false
        },
        {
          "factor": "obesity",
          "points": 0,
          "present": false
        },
        {
          "factor": "hypertension",
          "points": 0,
          "present": false
        },
        {
          "factor": "coronary_artery_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "cardiac_arrhythmia",
          "points": 0,
          "present": false
        },
        {
          "factor": "congestive_heart_failure",
          "points": 0,
          "present": false
        },
        {
          "factor": "chronic_kidney_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "chronic_pulmonary_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "chronic_liver_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "cerebrovascular_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "chronic_neurologic_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "dyspnea",
          "points": 0,
          "present": false
        }
      ],
      "age": 35,
      "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": "Webb BJ, Levin NM, Grisel N, Brown SM, Peltan ID, Spivak ES, et al.",
        "doi": "10.1371/journal.pone.0261508",
        "id": "webb-2022-utah-covid",
        "pmid": "35239664",
        "source": "PLoS One. 2022;17(3):e0261508",
        "title": "Simple scoring tool to estimate risk of hospitalization and mortality in ambulatory and emergency department patients with COVID-19"
      },
      "formula": "utah-covid",
      "formula_expression": "Webb 2022 Table 6: age 0-10=0.5, 11-20=1, 21-30=1.5, 31-40=2, 41-50=2.5, 51-60=3, 61-70=3.5, 71-80=4, 81-90=4.5, 91-100=5, >100=5.5 (printed decade lookup, not floor(age/10)*0.5); diabetes, severe immunocompromise, obesity (Methods BMI ≥30; Table 6 label BMI>30), community of color 2 each; male sex, dyspnea, hypertension, CAD, cardiac arrhythmia, CHF, CKD, chronic pulmonary disease, chronic liver disease, cerebrovascular disease, chronic neurologic disease 1 each; max 24.5; score_ge_6 iff score ≥6 (Table 7 Youden)",
      "max_score": 24.5,
      "score": 2.0,
      "sex": "female",
      "cutpoint": 6,
      "score_ge_6": false
    },
    {
      "components": [
        {
          "factor": "male",
          "points": 0,
          "present": false
        },
        {
          "value": 35,
          "factor": "age",
          "points": 2.0,
          "present": true
        },
        {
          "factor": "community_of_color",
          "points": 0,
          "present": false
        },
        {
          "factor": "diabetes",
          "points": 0,
          "present": false
        },
        {
          "factor": "severe_immunocompromise",
          "points": 0,
          "present": false
        },
        {
          "factor": "obesity",
          "points": 0,
          "present": false
        },
        {
          "factor": "hypertension",
          "points": 0,
          "present": false
        },
        {
          "factor": "coronary_artery_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "cardiac_arrhythmia",
          "points": 0,
          "present": false
        },
        {
          "factor": "congestive_heart_failure",
          "points": 0,
          "present": false
        },
        {
          "factor": "chronic_kidney_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "chronic_pulmonary_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "chronic_liver_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "cerebrovascular_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "chronic_neurologic_disease",
          "points": 0,
          "present": false
        },
        {
          "factor": "dyspnea",
          "points": 0,
          "present": false
        }
      ],
      "age": 35,
      "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": "Webb BJ, Levin NM, Grisel N, Brown SM, Peltan ID, Spivak ES, et al.",
        "doi": "10.1371/journal.pone.0261508",
        "id": "webb-2022-utah-covid",
        "pmid": "35239664",
        "source": "PLoS One. 2022;17(3):e0261508",
        "title": "Simple scoring tool to estimate risk of hospitalization and mortality in ambulatory and emergency department patients with COVID-19"
      },
      "formula": "utah-covid",
      "formula_expression": "Webb 2022 Table 6: age 0-10=0.5, 11-20=1, 21-30=1.5, 31-40=2, 41-50=2.5, 51-60=3, 61-70=3.5, 71-80=4, 81-90=4.5, 91-100=5, >100=5.5 (printed decade lookup, not floor(age/10)*0.5); diabetes, severe immunocompromise, obesity (Methods BMI ≥30; Table 6 label BMI>30), community of color 2 each; male sex, dyspnea, hypertension, CAD, cardiac arrhythmia, CHF, CKD, chronic pulmonary disease, chronic liver disease, cerebrovascular disease, chronic neurologic disease 1 each; max 24.5; score_ge_6 iff score ≥6 (Table 7 Youden)",
      "max_score": 24.5,
      "score": 2.0,
      "sex": "female",
      "cutpoint": 6,
      "score_ge_6": false
    }
  ]
}

Response

Field Type Description
formula string utah-covid
formula_expression string Exact expression used
score number Webb 2022 Table 6 points 0-24.5
max_score number 24.5
cutpoint integer Table 7 Youden threshold 6 (sensitivity 71.1%, specificity 76.2%)
score_ge_6 boolean true iff score ≥6 (Webb 2022 Table 7 Youden). Not a treatment-allocation order.
age integer Age used, years
sex string female or male used
components array Per-factor points
citation object Webb et al. PLoS One 2022 citation
disclaimer string Not-a-device notice

Example JSON

Machine form of the same example. Frozen fixture. Not a live lookup.

{
  "components": [
    {
      "factor": "male",
      "points": 0,
      "present": false
    },
    {
      "value": 35,
      "factor": "age",
      "points": 2.0,
      "present": true
    },
    {
      "factor": "community_of_color",
      "points": 0,
      "present": false
    },
    {
      "factor": "diabetes",
      "points": 0,
      "present": false
    },
    {
      "factor": "severe_immunocompromise",
      "points": 0,
      "present": false
    },
    {
      "factor": "obesity",
      "points": 0,
      "present": false
    },
    {
      "factor": "hypertension",
      "points": 0,
      "present": false
    },
    {
      "factor": "coronary_artery_disease",
      "points": 0,
      "present": false
    },
    {
      "factor": "cardiac_arrhythmia",
      "points": 0,
      "present": false
    },
    {
      "factor": "congestive_heart_failure",
      "points": 0,
      "present": false
    },
    {
      "factor": "chronic_kidney_disease",
      "points": 0,
      "present": false
    },
    {
      "factor": "chronic_pulmonary_disease",
      "points": 0,
      "present": false
    },
    {
      "factor": "chronic_liver_disease",
      "points": 0,
      "present": false
    },
    {
      "factor": "cerebrovascular_disease",
      "points": 0,
      "present": false
    },
    {
      "factor": "chronic_neurologic_disease",
      "points": 0,
      "present": false
    },
    {
      "factor": "dyspnea",
      "points": 0,
      "present": false
    }
  ],
  "age": 35,
  "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": "Webb BJ, Levin NM, Grisel N, Brown SM, Peltan ID, Spivak ES, et al.",
    "doi": "10.1371/journal.pone.0261508",
    "id": "webb-2022-utah-covid",
    "pmid": "35239664",
    "source": "PLoS One. 2022;17(3):e0261508",
    "title": "Simple scoring tool to estimate risk of hospitalization and mortality in ambulatory and emergency department patients with COVID-19"
  },
  "formula": "utah-covid",
  "formula_expression": "Webb 2022 Table 6: age 0-10=0.5, 11-20=1, 21-30=1.5, 31-40=2, 41-50=2.5, 51-60=3, 61-70=3.5, 71-80=4, 81-90=4.5, 91-100=5, >100=5.5 (printed decade lookup, not floor(age/10)*0.5); diabetes, severe immunocompromise, obesity (Methods BMI ≥30; Table 6 label BMI>30), community of color 2 each; male sex, dyspnea, hypertension, CAD, cardiac arrhythmia, CHF, CKD, chronic pulmonary disease, chronic liver disease, cerebrovascular disease, chronic neurologic disease 1 each; max 24.5; score_ge_6 iff score ≥6 (Table 7 Youden)",
  "max_score": 24.5,
  "score": 2.0,
  "sex": "female",
  "cutpoint": 6,
  "score_ge_6": false
}

Client errors (HTTP 400)

Invalid params return 400 without charge. Shared HTTP 402 and 503 meanings: Payments.

HTTP Code When
400 invalid_utah_covid Utah COVID score inputs must match Webb 2022 Table 6 age, sex, caller-assigned community of color, dyspnea, and comorbidity flags. 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

  • 4C — Sum the Knight 2020 ISARIC 4C Mortality Score items and return the published Table 5 band (low, intermediate, high, or very high).
  • PRIEST — Sum the Goodacre 2021 PRIEST points from NEWS2 Chart 1 Scale 1 vitals, alertness, inspired oxygen, age, sex, and performance status, and return whether the total is ≤4.
  • CHOSEN — Sum the Levine 2020 CHOSEN (COVID Home Safely Now) Figure 2 points from age, oxygen saturation, and serum albumin in g/dL, and return whether the total is at or above the printed cutpoint of 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.