# PREVENT 10-year total CVD

PREVENT 10-year total CVD

Status: LIVE
Price: $0.005 USDC
`GET /api/calc/prevent`
HTML: https://magentlab.com/docs/prevent
Markdown: https://magentlab.com/docs/prevent.md

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

## What it computes

Compute the Khan 2024 PREVENT base 10-year total CVD percent (ASCVD plus heart failure) for adults aged 30-79 from sex-specific, race-free Table S12 coefficients.

## When to use

When an agent already has those Khan 2024 predictors for a person aged 30-79 without prior CVD and needs that paper's base 10-year total CVD percent. Not a diagnosis, statin order, 30-year PREVENT, ASCVD-only, HF-only, or 2013 pooled-cohort equation.

## When not to use

- Not a medical device. Not a diagnosis of cardiovascular disease. Not a statin order, antihypertensive order, or treatment recommendation.
- Base 10-year total CVD (ASCVD plus HF) only. Not 30-year PREVENT. Not ASCVD-only. Not HF-only. Not the optional HbA1c, UACR, or SDI add-on equations.
- Age 30-79. Sex-specific and race-free. Not the 2013 ACC/AHA pooled-cohort equations. Not SCORE2.
- BMI is a required Khan 2024 predictor; Table S12 base 10-year total-CVD BMI coefficients are 0 (BMI enters the HF-only equations, which this tool does not return).
- Caller assigns age, sex, lipids, blood pressure, antihypertensive and statin flags, diabetes, smoking, eGFR, and BMI. magent does not assay lipids and does not measure blood pressure.

## Formula

```
10-year total CVD % = 100*exp(lp)/(1+exp(lp)); Khan 2024 Supplement Table S12 base 10-year total CVD (ASCVD+HF) only; sex-specific race-free; age 30-79; cage=(age-55)/10; mg/dL*0.02586 to mmol/L; cnhdl=(TC-HDL)*0.02586-3.5; chdl=(HDL*0.02586-1.3)/0.3; sbp_lt110=(min(SBP,110)-110)/20; sbp_ge110=(max(SBP,110)-130)/20; egfr_lt60=(min(eGFR,60)-60)/-15; egfr_ge60=(max(eGFR,60)-90)/-15; BMI spline printed at 30 with S12 total-CVD betas 0; women lp=-3.307728+0.7939329*cage+0.0305239*cnhdl-0.1606857*chdl-0.2394003*sbp_lt110+0.3600781*sbp_ge110+0.8667604*dm+0.5360739*smoke+0.6045917*egfr_lt60+0.0433769*egfr_ge60+0.3151672*antihtn-0.1477655*statin-0.0663612*sbp_ge110*antihtn+0.1197879*cnhdl*statin-0.0819715*cage*cnhdl+0.0306769*cage*chdl-0.0946348*cage*sbp_ge110-0.27057*cage*dm-0.078715*cage*smoke-0.1637806*cage*egfr_lt60; men lp=-3.031168+0.7688528*cage+0.0736174*cnhdl-0.0954431*chdl-0.4347345*sbp_lt110+0.3362658*sbp_ge110+0.7692857*dm+0.4386871*smoke+0.5378979*egfr_lt60+0.0164827*egfr_ge60+0.288879*antihtn-0.1337349*statin-0.0475924*sbp_ge110*antihtn+0.150273*cnhdl*statin-0.0517874*cage*cnhdl+0.0191169*cage*chdl-0.1049477*cage*sbp_ge110-0.2251948*cage*dm-0.0895067*cage*smoke-0.1543702*cage*egfr_lt60; not 30-year; not ASCVD-only; not HF-only; not HbA1c/UACR/SDI add-ons; not 2013 PCE; not SCORE2
```

## Citation

[Development and Validation of the American Heart Association’s PREVENT Equations](https://doi.org/10.1161/CIRCULATIONAHA.123.067626)
Khan SS, Matsushita K, Sang Y, Ballew SH, Grams ME, Surapaneni A, et al.; Chronic Kidney Disease Prognosis Consortium and the AHA Cardiovascular-Kidney-Metabolic Science Advisory Group
Circulation. 2024;149(6):430-449
DOI: [10.1161/CIRCULATIONAHA.123.067626](https://doi.org/10.1161/CIRCULATIONAHA.123.067626)

## Worked example

### Paper 50-year-old woman, TC 240, HDL 55, treated SBP 160, no statin, nondiabetic nonsmoker, BMI 35, eGFR 90

Given: `age=50, antihypertensive=true, bmi_kg_m2=35, diabetes=false, egfr_ml_min_1_73m2=90, hdl_mg_dl=55, sbp_mm_hg=160, sex=female, smoker=false, statin=false, total_cholesterol_mg_dl=240`

1. cage=(50-55)/10=-0.5; cnhdl=(240-55)*0.02586-3.5; chdl=(55*0.02586-1.3)/0.3; sbp_ge110=(160-130)/20=1.5; antihypertensive=1
2. women Table S12 lp = -2.8579
3. ten_year_cvd_percent 5.4 (paper prints 5.4% 10-year total CVD; does not return the paper's ASCVD 3.6% or HF 2.5%)


### Same woman, current smoker

Given: `age=50, antihypertensive=true, bmi_kg_m2=35, diabetes=false, egfr_ml_min_1_73m2=90, hdl_mg_dl=55, sbp_mm_hg=160, sex=female, smoker=true, statin=false, total_cholesterol_mg_dl=240`

1. Smoking adds the women smoke term and age × smoke interaction
2. lp -2.2825; ten_year_cvd_percent 9.3 (paper prints 9.3%; does not return ASCVD 6.0% or HF 4.7%)


### Same woman, diabetes, nonsmoker

Given: `age=50, antihypertensive=true, bmi_kg_m2=35, diabetes=true, egfr_ml_min_1_73m2=90, hdl_mg_dl=55, sbp_mm_hg=160, sex=female, smoker=false, statin=false, total_cholesterol_mg_dl=240`

1. Diabetes adds the women diabetes term and age × diabetes interaction
2. lp -1.8559; ten_year_cvd_percent 13.5


### Same labs, male, treated SBP 160, nondiabetic nonsmoker

Given: `age=50, antihypertensive=true, bmi_kg_m2=35, diabetes=false, egfr_ml_min_1_73m2=90, hdl_mg_dl=55, sbp_mm_hg=160, sex=male, smoker=false, statin=false, total_cholesterol_mg_dl=240`

1. Male Table S12 coefficients replace the female set
2. lp -2.53; ten_year_cvd_percent 7.4


## Also searched as

- PREVENT equations
- AHA PREVENT 2024
- 10-year total CVD
- Khan 2024 Circulation
- race-free CVD risk
- treated SBP PREVENT
- CKM cardiovascular risk

## Parameters

- `age` (integer, required): Age in years (integer 30-79). Khan 2024 PREVENT base 10-year total CVD is for ages 30-79. Not 30-year PREVENT (that horizon is not returned).
- `sex` (string, required): Sex used by the sex-specific Table S12 base 10-year total-CVD coefficients (female or male). Not race. PREVENT is race-free.
- `total_cholesterol_mg_dl` (number, required): Total cholesterol in mg/dL (50-800). Converted as mg/dL*0.02586 to mmol/L. Enters as non-HDL (TC-HDL) centered at 3.5 mmol/L. magent does not assay lipids.
- `hdl_mg_dl` (number, required): HDL cholesterol in mg/dL (5-150). Converted as mg/dL*0.02586 to mmol/L. Enters as (HDL-1.3)/0.3. magent does not assay lipids.
- `sbp_mm_hg` (number, required): Systolic blood pressure in mm Hg (50-250). Piecewise around 110 mm Hg, with a treated-SBP interaction when antihypertensive is true. magent does not measure blood pressure.
- `antihypertensive` (boolean, required): Current antihypertensive treatment as assigned by the caller (true or false). Adds the Table S12 antihypertensive term and the treated SBP interaction.
- `statin` (boolean, required): Current statin use as assigned by the caller (true or false). Adds the Table S12 statin term and the statin × non-HDL interaction.
- `diabetes` (boolean, required): Diabetes as assigned by the caller (true or false). Adds the Table S12 diabetes term and the age × diabetes interaction. Not the optional HbA1c add-on equation.
- `smoker` (boolean, required): Current cigarette smoking as assigned by the caller (true or false). magent does not take a smoking history.
- `egfr_ml_min_1_73m2` (number, required): Caller-assigned eGFR in mL/min/1.73m2 (5-200). Piecewise around 60. magent does not compute MDRD or CKD-EPI.
- `bmi_kg_m2` (number, required): Body-mass index in kg/m2 (10-80). Required Khan 2024 predictor. Table S12 base 10-year total-CVD BMI coefficients are 0 (BMI enters the HF-only equations, which this tool does not return).

## 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.

Method: `POST /api/calc/prevent`
Max items: 25
Price: unit_amount + extra_item_amount * (n - 1) (unit 5000 atomic, extra 2000 atomic)
Status: 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:

```json
{
  "items": [
    {
      "age": "50",
      "antihypertensive": "true",
      "bmi_kg_m2": "35",
      "diabetes": "false",
      "egfr_ml_min_1_73m2": "90",
      "hdl_mg_dl": "55",
      "sbp_mm_hg": "160",
      "sex": "female",
      "smoker": "false",
      "statin": "false",
      "total_cholesterol_mg_dl": "240"
    },
    {
      "age": "50",
      "antihypertensive": "true",
      "bmi_kg_m2": "35",
      "diabetes": "false",
      "egfr_ml_min_1_73m2": "90",
      "hdl_mg_dl": "55",
      "sbp_mm_hg": "160",
      "sex": "female",
      "smoker": "false",
      "statin": "false",
      "total_cholesterol_mg_dl": "240"
    }
  ]
}
```

Human paywall (two-item fixture): https://api.magentlab.com/paywall/bulk/prevent

Example 200:

```json
{
  "count": 2,
  "path": "/api/calc/prevent",
  "items": [
    {
      "age": 50,
      "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": "Khan SS, Matsushita K, Sang Y, Ballew SH, Grams ME, Surapaneni A, et al.; Chronic Kidney Disease Prognosis Consortium and the AHA Cardiovascular-Kidney-Metabolic Science Advisory Group",
        "doi": "10.1161/CIRCULATIONAHA.123.067626",
        "id": "khan-2024-prevent",
        "pmid": "37947085",
        "source": "Circulation. 2024;149(6):430-449",
        "title": "Development and Validation of the American Heart Association’s PREVENT Equations"
      },
      "formula": "prevent",
      "formula_expression": "10-year total CVD % = 100*exp(lp)/(1+exp(lp)); Khan 2024 Supplement Table S12 base 10-year total CVD (ASCVD+HF) only; sex-specific race-free; age 30-79; cage=(age-55)/10; mg/dL*0.02586 to mmol/L; cnhdl=(TC-HDL)*0.02586-3.5; chdl=(HDL*0.02586-1.3)/0.3; sbp_lt110=(min(SBP,110)-110)/20; sbp_ge110=(max(SBP,110)-130)/20; egfr_lt60=(min(eGFR,60)-60)/-15; egfr_ge60=(max(eGFR,60)-90)/-15; BMI spline printed at 30 with S12 total-CVD betas 0; women lp=-3.307728+0.7939329*cage+0.0305239*cnhdl-0.1606857*chdl-0.2394003*sbp_lt110+0.3600781*sbp_ge110+0.8667604*dm+0.5360739*smoke+0.6045917*egfr_lt60+0.0433769*egfr_ge60+0.3151672*antihtn-0.1477655*statin-0.0663612*sbp_ge110*antihtn+0.1197879*cnhdl*statin-0.0819715*cage*cnhdl+0.0306769*cage*chdl-0.0946348*cage*sbp_ge110-0.27057*cage*dm-0.078715*cage*smoke-0.1637806*cage*egfr_lt60; men lp=-3.031168+0.7688528*cage+0.0736174*cnhdl-0.0954431*chdl-0.4347345*sbp_lt110+0.3362658*sbp_ge110+0.7692857*dm+0.4386871*smoke+0.5378979*egfr_lt60+0.0164827*egfr_ge60+0.288879*antihtn-0.1337349*statin-0.0475924*sbp_ge110*antihtn+0.150273*cnhdl*statin-0.0517874*cage*cnhdl+0.0191169*cage*chdl-0.1049477*cage*sbp_ge110-0.2251948*cage*dm-0.0895067*cage*smoke-0.1543702*cage*egfr_lt60; not 30-year; not ASCVD-only; not HF-only; not HbA1c/UACR/SDI add-ons; not 2013 PCE; not SCORE2",
      "sex": "female",
      "bmi_kg_m2": 35.0,
      "diabetes": false,
      "antihypertensive": true,
      "linear_predictor": -2.8579,
      "egfr_ml_min_1_73m2": 90.0,
      "hdl_mg_dl": 55.0,
      "sbp_mm_hg": 160.0,
      "smoker": false,
      "total_cholesterol_mg_dl": 240.0,
      "statin": false,
      "ten_year_cvd_percent": 5.4
    },
    {
      "age": 50,
      "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": "Khan SS, Matsushita K, Sang Y, Ballew SH, Grams ME, Surapaneni A, et al.; Chronic Kidney Disease Prognosis Consortium and the AHA Cardiovascular-Kidney-Metabolic Science Advisory Group",
        "doi": "10.1161/CIRCULATIONAHA.123.067626",
        "id": "khan-2024-prevent",
        "pmid": "37947085",
        "source": "Circulation. 2024;149(6):430-449",
        "title": "Development and Validation of the American Heart Association’s PREVENT Equations"
      },
      "formula": "prevent",
      "formula_expression": "10-year total CVD % = 100*exp(lp)/(1+exp(lp)); Khan 2024 Supplement Table S12 base 10-year total CVD (ASCVD+HF) only; sex-specific race-free; age 30-79; cage=(age-55)/10; mg/dL*0.02586 to mmol/L; cnhdl=(TC-HDL)*0.02586-3.5; chdl=(HDL*0.02586-1.3)/0.3; sbp_lt110=(min(SBP,110)-110)/20; sbp_ge110=(max(SBP,110)-130)/20; egfr_lt60=(min(eGFR,60)-60)/-15; egfr_ge60=(max(eGFR,60)-90)/-15; BMI spline printed at 30 with S12 total-CVD betas 0; women lp=-3.307728+0.7939329*cage+0.0305239*cnhdl-0.1606857*chdl-0.2394003*sbp_lt110+0.3600781*sbp_ge110+0.8667604*dm+0.5360739*smoke+0.6045917*egfr_lt60+0.0433769*egfr_ge60+0.3151672*antihtn-0.1477655*statin-0.0663612*sbp_ge110*antihtn+0.1197879*cnhdl*statin-0.0819715*cage*cnhdl+0.0306769*cage*chdl-0.0946348*cage*sbp_ge110-0.27057*cage*dm-0.078715*cage*smoke-0.1637806*cage*egfr_lt60; men lp=-3.031168+0.7688528*cage+0.0736174*cnhdl-0.0954431*chdl-0.4347345*sbp_lt110+0.3362658*sbp_ge110+0.7692857*dm+0.4386871*smoke+0.5378979*egfr_lt60+0.0164827*egfr_ge60+0.288879*antihtn-0.1337349*statin-0.0475924*sbp_ge110*antihtn+0.150273*cnhdl*statin-0.0517874*cage*cnhdl+0.0191169*cage*chdl-0.1049477*cage*sbp_ge110-0.2251948*cage*dm-0.0895067*cage*smoke-0.1543702*cage*egfr_lt60; not 30-year; not ASCVD-only; not HF-only; not HbA1c/UACR/SDI add-ons; not 2013 PCE; not SCORE2",
      "sex": "female",
      "bmi_kg_m2": 35.0,
      "diabetes": false,
      "antihypertensive": true,
      "linear_predictor": -2.8579,
      "egfr_ml_min_1_73m2": 90.0,
      "hdl_mg_dl": 55.0,
      "sbp_mm_hg": 160.0,
      "smoker": false,
      "total_cholesterol_mg_dl": 240.0,
      "statin": false,
      "ten_year_cvd_percent": 5.4
    }
  ]
}
```

## Response fields

- `formula` (string): prevent
- `formula_expression` (string): Khan 2024 Table S12 sex-specific base 10-year total-CVD logistic
- `age` (integer): Age in years used (30-79)
- `sex` (string): female or male used
- `total_cholesterol_mg_dl` (number): Total cholesterol used, mg/dL
- `hdl_mg_dl` (number): HDL-C used, mg/dL
- `sbp_mm_hg` (number): Systolic BP used, mm Hg
- `antihypertensive` (boolean): Caller-assigned antihypertensive treatment used
- `statin` (boolean): Caller-assigned statin use used
- `diabetes` (boolean): Caller-assigned diabetes used
- `smoker` (boolean): Caller-assigned current smoking used
- `egfr_ml_min_1_73m2` (number): Caller-assigned eGFR used, mL/min/1.73m2
- `bmi_kg_m2` (number): BMI used, kg/m2
- `linear_predictor` (number): Sex-specific Table S12 linear predictor lp, 4 decimals
- `ten_year_cvd_percent` (number): 10-year total CVD (ASCVD+HF) percent, 1 decimal
- `citation` (object): Khan et al. Circulation 2024 citation
- `disclaimer` (string): Not-a-device notice

## Example JSON

Frozen fixture. Not a live lookup.

```json
{
  "age": 50,
  "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": "Khan SS, Matsushita K, Sang Y, Ballew SH, Grams ME, Surapaneni A, et al.; Chronic Kidney Disease Prognosis Consortium and the AHA Cardiovascular-Kidney-Metabolic Science Advisory Group",
    "doi": "10.1161/CIRCULATIONAHA.123.067626",
    "id": "khan-2024-prevent",
    "pmid": "37947085",
    "source": "Circulation. 2024;149(6):430-449",
    "title": "Development and Validation of the American Heart Association’s PREVENT Equations"
  },
  "formula": "prevent",
  "formula_expression": "10-year total CVD % = 100*exp(lp)/(1+exp(lp)); Khan 2024 Supplement Table S12 base 10-year total CVD (ASCVD+HF) only; sex-specific race-free; age 30-79; cage=(age-55)/10; mg/dL*0.02586 to mmol/L; cnhdl=(TC-HDL)*0.02586-3.5; chdl=(HDL*0.02586-1.3)/0.3; sbp_lt110=(min(SBP,110)-110)/20; sbp_ge110=(max(SBP,110)-130)/20; egfr_lt60=(min(eGFR,60)-60)/-15; egfr_ge60=(max(eGFR,60)-90)/-15; BMI spline printed at 30 with S12 total-CVD betas 0; women lp=-3.307728+0.7939329*cage+0.0305239*cnhdl-0.1606857*chdl-0.2394003*sbp_lt110+0.3600781*sbp_ge110+0.8667604*dm+0.5360739*smoke+0.6045917*egfr_lt60+0.0433769*egfr_ge60+0.3151672*antihtn-0.1477655*statin-0.0663612*sbp_ge110*antihtn+0.1197879*cnhdl*statin-0.0819715*cage*cnhdl+0.0306769*cage*chdl-0.0946348*cage*sbp_ge110-0.27057*cage*dm-0.078715*cage*smoke-0.1637806*cage*egfr_lt60; men lp=-3.031168+0.7688528*cage+0.0736174*cnhdl-0.0954431*chdl-0.4347345*sbp_lt110+0.3362658*sbp_ge110+0.7692857*dm+0.4386871*smoke+0.5378979*egfr_lt60+0.0164827*egfr_ge60+0.288879*antihtn-0.1337349*statin-0.0475924*sbp_ge110*antihtn+0.150273*cnhdl*statin-0.0517874*cage*cnhdl+0.0191169*cage*chdl-0.1049477*cage*sbp_ge110-0.2251948*cage*dm-0.0895067*cage*smoke-0.1543702*cage*egfr_lt60; not 30-year; not ASCVD-only; not HF-only; not HbA1c/UACR/SDI add-ons; not 2013 PCE; not SCORE2",
  "sex": "female",
  "bmi_kg_m2": 35.0,
  "diabetes": false,
  "antihypertensive": true,
  "linear_predictor": -2.8579,
  "egfr_ml_min_1_73m2": 90.0,
  "hdl_mg_dl": 55.0,
  "sbp_mm_hg": 160.0,
  "smoker": false,
  "total_cholesterol_mg_dl": 240.0,
  "statin": false,
  "ten_year_cvd_percent": 5.4
}
```

## Errors

- HTTP 400 `invalid_prevent`: AHA PREVENT 2024 10-year CVD inputs must match that paper's age, sex, lipids, treated systolic BP, diabetes, smoking, BMI, eGFR, antihypertensive, and statin flags. Returned before settlement; you are not charged.
- HTTP 400 `invalid_bmi_kg_m2`: bmi_kg_m2 must be a number from 10 to 80. Returned before settlement; you are not charged.
- HTTP 400 `invalid_egfr`: egfr_ml_min_1_73m2 must be a number from 5 to 200 (caller-assigned eGFR; magent does not compute MDRD or CKD-EPI). Returned before settlement; you are not charged.
- HTTP 400 `invalid_items`: POST body must be a JSON object with only an items array Returned before settlement; you are not charged.
- HTTP 400 `invalid_item_count`: items must be an array of 1 to 25 objects Returned before settlement; you are not charged.
- HTTP 400 `invalid_item`: each items entry must be a JSON object Returned before settlement; you are not charged.

Shared HTTP 402 and 503: https://magentlab.com/docs/payments

## Related tools

- [SCORE2 10-year CVD risk](https://magentlab.com/docs/score2) — Compute the ESC 2021 SCORE2 10-year fatal plus non-fatal CVD percent for adults aged 40-69 from sex, current smoking, systolic blood pressure, non-HDL cholesterol, and European geographic risk region.
- [Framingham CHD](https://magentlab.com/docs/framingham-chd) — Sum Wilson 1998 sex-specific total-cholesterol point sheets (age, TC, HDL, JNC-V blood pressure, diabetes, smoking) and return the published 10-year CHD percent.
- [Reynolds Risk Score](https://magentlab.com/docs/reynolds) — Compute the Ridker JAMA 2007 Reynolds Risk Score 10-year CVD percent for women using clinically simplified Model B (age, SBP, hsCRP, total cholesterol, HDL-C, HbA1c if diabetic, current smoking, and parental MI before age 60).

## 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.

- GET the tool with Accept: application/json (do not send Accept: text/html unless you want the human paywall).
- HTTP 402 means you have not paid. Decode the base64 PAYMENT-REQUIRED header. HTTP 503 is not a new quote.
- Sign accepts[0] (exact, EIP-3009) with validBefore = now + maxTimeoutSeconds (600 seconds), or accepts[1] (batch-settlement deposit/voucher) on product GET. Ping and POST {items} stay exact. Magent retries transient facilitator 429/5xx before answering.
- Retry the same URL with PAYMENT-SIGNATURE (base64 JSON of accepted and payload). Magent attaches canonical extensions.bazaar on CDP verify/settle; echoing 402 bazaar is optional.
- Success is HTTP 200 JSON plus PAYMENT-RESPONSE. exact settles before the tool. batch-settlement verifies (and deposit-settles) before the tool and commits the charge after HTTP 2xx. HTTP 503: retry the same PAYMENT-SIGNATURE. Mint a new exact nonce only after a new HTTP 402.

- offered `exact` on eip155:8453: Fixed-price USDC on Base. The buyer authorizes the advertised amount (EIP-3009). magent settles before the tool runs (paymentFlow upfront). extra.assetTransferMethod=eip3009 extra.paymentFlow=upfront.
- offered `batch-settlement` on eip155:8453: Payment-channel vouchers claimed later in batches. Exact stays accepts[0]. Same-path POST {items} is still exact. extra.assetTransferMethod=eip3009 extra.paymentFlow=authorization.

- not offered `upto`: Not offered. Usage-based: buyer authorizes a ceiling, seller settles the actual amount after work. Reserved for a future metered tool. Not for current calculators or code search.

Same-path POST {items} is still scheme exact: one EIP-3009 authorization for GET unit plus $0.002 per extra item. That is not x402 batch-settlement (payment channels / vouchers).

Shared HTTP 402 and 503 table: https://magentlab.com/docs/payments

Stdio MCP (one process per host): https://magentlab.com/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.
