Distill

Answers someone already worked out, with receipts, for less than finding them yourself.

Distill sells pre-computed answers to narrow factual questions to AI agents, per call, over x402 (HTTP 402 and a USDC payment on Base). Every answer carries its sources, an as_of time, a computed confidence and the method version that produced it. No account, API key or signup.

Use Distill from your agent in 3 lines

Free tier, no wallet (any HTTP client, any fetch tool)

curl 'https://data.spencermcw.com/v1/tax/sales-rate?zip=98101-3143&free=1'

A few free answers a day per IP, in the short summary view. ?free=1 does what the header Distill-Free-Tier: use does; in a browser, https://data.spencermcw.com/try/v1/tax/sales-rate?zip=98101-3143 shows the same answer as a page. Without either, a paid route answers 402 with its x402 payment requirements.

Paid, with @x402/fetch (Node)

import { wrapFetchWithPaymentFromConfig } from '@x402/fetch'
import { ExactEvmScheme } from '@x402/evm'
import { privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount(process.env.BUYER_KEY)
const pay = wrapFetchWithPaymentFromConfig(fetch, { schemes: [{ network: 'eip155:8453', client: new ExactEvmScheme(account) }] })
const res = await pay('https://data.spencermcw.com/v1/tax/sales-rate?zip=98101-3143')
console.log((await res.json()).data)

eip155:8453 is Base mainnet: each call moves real USDC from the key’s wallet, at the price the 402 states. Use a wallet that holds only a few dollars, and try the free tier first.

MCP (Claude, Cursor, any streamable-HTTP client)

{
  "mcpServers": {
    "distill": {
      "type": "http",
      "url": "https://data.spencermcw.com/mcp"
    }
  }
}

Claude Code: claude mcp add --transport http distill https://data.spencermcw.com/mcp. An unpaid tool call takes the free tier while it lasts; after that it returns the x402 payment requirements.

How it works

  1. The expensive part is done once: Distill crawls many fragmented public sources, then extracts, normalizes and classifies them, and checks the result against hand-labelled evals.
  2. An agent calls a route. A paid route answers 402 Payment Required with x402 payment requirements: USDC on Base, an exact price.
  3. The agent pays and retries. Distill computes the answer, settles the payment only after the answer is ready, and returns it with its receipts.

Routes

Every route, its price and an example. The same list is in llms.txt and OpenAPI.

Sales tax

Sales-tax rates in the 24 Streamlined Sales Tax states, read from each state’s own rate and boundary files: by ZIP+4, ZIP or street address, with every jurisdiction’s rate, the period it holds, and a quarterly change feed. Every answer cites the state files by URL and sha256.

Not tax advice. Rates as published by the state in its Streamlined Sales Tax rate and boundary files for the stated effective period; verify with the state. See /terms.

What is the sales tax rate at this US address, ZIP+4 or ZIP? The combined rate and each state, county, city and district rate in the 24 Streamlined Sales Tax states (WA, OH, MI, NJ, TN, …), computed by Distill from each state’s SST rate and boundary files

$0.005 per call

GET /v1/tax/sales-rate

Route
tax.sales_rate
Price
$0.005 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
tax_sales_rate
Method
tax.sales_rate@1.0.0
Freshness
Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
agreement × freshness. Agreement: for a 5-digit ZIP answer, the share of that ZIP’s ZIP+4 records with the same combined rate; for a ZIP+4 answer, the share of address records inside it with the same rate; 1 for an address match or when the state publishes nothing finer. Freshness: 1 until the next SST posting deadline (the 1st of Mar, Jun, Sep or Dec) after the files were last checked, then halving every 30 days.

Try it free: GET /try/v1/tax/sales-rate?zip=98101-3143

Paid: GET /v1/tax/sales-rate?zip=98101-3143&date=2026-10-19 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "location": {
    "zip": "98101",
    "plus4": "3143",
    "address": null,
    "date": "2026-10-19"
  },
  "state": "WA",
  "state_fips": "53",
  "matched": "zip4",
  "rate": "0.1055",
  "combined": {
    "general": {
      "intrastate": "0.1055",
      "interstate": "0.1055"
    },
    "food_drug": {
      "intrastate": "0.1055",
      "interstate": "0.1055"
    }
  },
  "components": [
    {
      "jurisdiction": "state",
      "code": "53",
      "type": "45",
      "type_name": "State Taxing Authority",
      "general": {
        "intrastate": "0.065",
        "interstate": "0.065"
      },
      "food_drug": {
        "intrastate": "0.065",
        "interstate": "0.065"
      },
      "effective_from": "1983-03-01",
      "effective_to": null
    },
    {
      "jurisdiction": "place",
      "code": "63000",
      "type": "01",
      "type_name": "City",
      "general": {
        "intrastate": "0.0405",
        "interstate": "0.0405"
      },
      "food_drug": {
        "intrastate": "0.0405",
        "interstate": "0.0405"
      },
      "effective_from": "2026-01-01",
      "effective_to": "2027-03-31"
    }
  ],
  "jurisdiction_codes": {
    "state_indicator": "53",
    "county": null,
    "place": "63000",
    "place_class": null,
    "composite_ser_code": "01726",
    "specials": []
  },
  "alternate": [],
  "effective": {
    "from": "2026-01-01",
    "to": "2027-03-31"
  },
  "agreement": {
    "finer_records": 1,
    "agreeing": 1
  }
}

What sales tax applies to each of these orders? Combined and per-jurisdiction rates for up to 100 US addresses, ZIP+4s or ZIPs in one call, 24 Streamlined Sales Tax states, computed by Distill from each state’s SST rate and boundary files

$0.1 per call

POST /v1/tax/sales-rate/batch

Route
tax.sales_rate_batch
Price
$0.1 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
tax_sales_rate_batch
Method
tax.sales_rate@1.0.0
Freshness
Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
The lowest per-location confidence in the batch; each is agreement × freshness. Agreement: for a 5-digit ZIP answer, the share of that ZIP’s ZIP+4 records with the same combined rate; for a ZIP+4 answer, the share of address records inside it with the same rate; 1 for an address match or when the state publishes nothing finer. Freshness: 1 until the next SST posting deadline (the 1st of Mar, Jun, Sep or Dec) after the files were last checked, then halving every 30 days.

Call it: POST /v1/tax/sales-rate/batch with a JSON body.

Example data
{
  "locations": [
    {
      "zip": "98101-3143",
      "date": "2026-10-19"
    },
    {
      "zip": "90210"
    }
  ]
}

→ data:
{
  "results": [
    {
      "index": 0,
      "ok": true,
      "answer": {
        "location": {
          "zip": "98101",
          "plus4": "3143",
          "address": null,
          "date": "2026-10-19"
        },
        "state": "WA",
        "state_fips": "53",
        "matched": "zip4",
        "rate": "0.1055",
        "combined": {
          "general": {
            "intrastate": "0.1055",
            "interstate": "0.1055"
          },
          "food_drug": {
            "intrastate": "0.1055",
            "interstate": "0.1055"
          }
        },
        "components": [
          {
            "jurisdiction": "state",
            "code": "53",
            "type": "45",
            "type_name": "State Taxing Authority",
            "general": {
              "intrastate": "0.065",
              "interstate": "0.065"
            },
            "food_drug": {
              "intrastate": "0.065",
              "interstate": "0.065"
            },
            "effective_from": "1983-03-01",
            "effective_to": null
          },
          {
            "jurisdiction": "place",
            "code": "63000",
            "type": "01",
            "type_name": "City",
            "general": {
              "intrastate": "0.0405",
              "interstate": "0.0405"
            },
            "food_drug": {
              "intrastate": "0.0405",
              "interstate": "0.0405"
            },
            "effective_from": "2026-01-01",
            "effective_to": "2027-03-31"
          }
        ],
        "jurisdiction_codes": {
          "state_indicator": "53",
          "county": null,
          "place": "63000",
          "place_class": null,
          "composite_ser_code": "01726",
          "specials": []
        },
        "alternate": [],
        "effective": {
          "from": "2026-01-01",
          "to": "2027-03-31"
        },
        "agreement": {
          "finer_records": 1,
          "agreeing": 1
        }
      }
    },
    {
      "index": 1,
      "ok": false,
      "error": {
        "code": "not_covered",
        "message": "90210 is not in any Streamlined Sales Tax member state's boundary file on 2026-10-19"
      }
    }
  ]
}

Which US sales tax rates or boundaries changed this quarter? Rate, ZIP+4 and boundary change records for the 24 Streamlined Sales Tax states, computed by Distill from each state’s SST files

$0.05 per call

GET /v1/tax/changes

Route
tax.changes
Price
$0.05 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
tax_changes
Method
tax.changes@1.0.0
Freshness
Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (change records are read from the state files deterministically): 1 until the next SST posting deadline (the 1st of Mar, Jun, Sep or Dec) after the files were last checked, then halving every 30 days.

Try it free: GET /try/v1/tax/changes?state=WA&entity=rate&limit=1

Paid: GET /v1/tax/changes?state=WA&entity=rate&limit=1 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "records": [
    {
      "id": "61970",
      "entity": "rate",
      "state": "WA",
      "key": "44165 (type 01)",
      "field": "food_drug_interstate",
      "old": "0.019",
      "new": "0.018",
      "effective": "2026-10-01",
      "detected_at": "2026-10-19T22:23:30.961Z",
      "source_sha256_old": "fb0d4514b4713057bc4d08f79184fb952ea9442b350bc65a2fb3c0214d7f23e1",
      "source_sha256_new": "fb0d4514b4713057bc4d08f79184fb952ea9442b350bc65a2fb3c0214d7f23e1",
      "method_version": "tax.sst@1.0.0"
    }
  ],
  "next_cursor": "61970"
}

Hospital prices

Posted standard charges from the machine-readable files US hospitals must publish under 45 CFR 180 (Colorado first): for a CPT, HCPCS or MS-DRG code near a ZIP code, each hospital’s gross charge, discounted cash price and every payer and plan’s negotiated rate, with payers canonicalized; a payer comparison, a hospital comparison and a change feed, refreshed monthly. Every answer cites the hospital’s file by URL and sha256. Posted rates, not a quote; not medical or financial advice. CPT codes come without their AMA descriptors.

Posted standard charges from hospital machine-readable files (45 CFR 180): posted rates, not a quote; not medical or financial advice. What you pay depends on your plan, your care and the hospital. See /terms.

What does a procedure cost at hospitals near this ZIP? Cash price, gross charge and every insurer’s negotiated rate for a CPT, HCPCS or MS-DRG code at Colorado hospitals, normalized by Distill from the hospitals’ federally required price files

$0.02 per call

GET /v1/hospital/prices

Route
hospital.prices
Price
$0.02 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
hospital_prices
Method
hospital.prices@1.2.0
Freshness
Refreshed monthly (manual batch). Data as of 2026-10-19, last checked 2026-10-20 (25 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Mean over the returned rows (each rate; an item with no rate counts once) of normalize × quality × freshness. Normalize: the stored per-rate normalize confidence (payer canonicalization: rule 1, model 0.9, fallback 0.6; rate basis for rates with no dollar amount: rule 1, model 0.9, fallback 0.75; 1 for an item with no rate). Quality of the MRF: 1 valid against the v3.0 schema, 0.85 parsed with conformance errors, 0.7 parsed only after header repair. Freshness: 1 while the MRF’s last_updated_on is at most 365 days old, then halving every 180 days (0.5 with no date), times 1 within 14 days of our fetch, then halving every 30 days.

Try it free: GET /try/v1/hospital/prices?code=A4550&zip=81052&radius_miles=10&payer=medicare&limit=1

Paid: GET /v1/hospital/prices?code=A4550&zip=81052&radius_miles=10&payer=medicare&limit=1 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "code": {
    "type": "HCPCS",
    "code": "A4550",
    "description": "Surgical trays",
    "description_source": "cms_hcpcs_level_ii",
    "drg": null,
    "mrfs_statewide": 13
  },
  "location": {
    "zip": "81052",
    "lat": 37.9744,
    "lon": -102.639,
    "radius_miles": 10
  },
  "filters": {
    "payer": "medicare",
    "plan_type": null,
    "plan": null,
    "setting": null,
    "billing_class": null
  },
  "hospitals_in_radius": 1,
  "hospitals_with_file": 1,
  "hospitals_with_prices": 1,
  "hospitals": [
    {
      "id": "co-061323",
      "ccn": "061323",
      "name": "PROWERS MEDICAL CENTER",
      "city": "LAMAR",
      "zip": "81052",
      "distance_miles": 6.7,
      "mrfs": [
        {
          "source_id": "hpt-mrf-31836e761c89c201",
          "url": "https://www.prowersmedical.com/wp-content/uploads/840584583_PROWERS-MEDICAL-CENTER_STANDARDCHARGES.csv",
          "sha256": "1d4105709236d42f631e79f4e3fe22c408fe1e69b11118319869affa5f7fbbb1",
          "fetched_at": "2026-10-19T23:08:32.284Z",
          "last_updated_on": "2025-01-01",
          "conformance": "errors"
        }
      ],
      "items": [
        {
          "mrf": "hpt-mrf-31836e761c89c201",
          "setting": "both",
          "billing_class": null,
          "modifiers": [],
          "gross": "67",
          "gross_max": null,
          "discounted_cash": "40.2",
          "discounted_cash_max": null,
          "deidentified_min": "32.83",
          "deidentified_max": "63.65",
          "drug_unit": null,
          "rates": [
            {
              "payer_id": "medicare",
              "payer": "Medicare (CMS)",
              "plan_type": "medicare",
              "payer_name": "Medicare",
              "plan_name": null,
              "negotiated_dollar": "32.83",
              "negotiated_dollar_max": null,
              "negotiated_percentage": 49,
              "methodology": "percent of total billed charges",
              "algorithm": "annual cost report",
              "rate_basis": "percent_of_charges",
              "allowed": null,
              "normalized_by": {
                "payer": "rule",
                "basis": "fallback"
              },
              "confidence": 0.2756
            }
          ]
        }
      ],
      "confidence": 0.2756
    }
  ],
  "summary": {
    "hospitals": 1,
    "items": 1,
    "rates": 1,
    "negotiated_dollar": {
      "n": 1,
      "min": "32.83",
      "p10": "32.83",
      "median": "32.83",
      "p90": "32.83",
      "max": "32.83"
    },
    "discounted_cash": {
      "n": 1,
      "min": "40.2",
      "p10": "40.2",
      "median": "40.2",
      "p90": "40.2",
      "max": "40.2"
    },
    "gross": {
      "n": 1,
      "min": "67",
      "p10": "67",
      "median": "67",
      "p90": "67",
      "max": "67"
    }
  }
}

How do these hospitals compare on price for one procedure? Cash, gross and negotiated-rate statistics for a CPT, HCPCS or MS-DRG code at up to 10 Colorado hospitals, normalized by Distill from their price-transparency files

$0.02 per call

GET /v1/hospital/compare

Route
hospital.compare
Price
$0.02 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
hospital_compare
Method
hospital.compare@1.1.0
Freshness
Refreshed monthly (manual batch). Data as of 2026-10-19, last checked 2026-10-20 (25 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Mean over the returned rows (each rate; an item with no rate counts once) of normalize × quality × freshness. Normalize: the stored per-rate normalize confidence (payer canonicalization: rule 1, model 0.9, fallback 0.6; rate basis for rates with no dollar amount: rule 1, model 0.9, fallback 0.75; 1 for an item with no rate). Quality of the MRF: 1 valid against the v3.0 schema, 0.85 parsed with conformance errors, 0.7 parsed only after header repair. Freshness: 1 while the MRF’s last_updated_on is at most 365 days old, then halving every 180 days (0.5 with no date), times 1 within 14 days of our fetch, then halving every 30 days. Rows are each hospital’s items for the code as compared.

Try it free: GET /try/v1/hospital/compare?code=470&hospitals=co-060001%2Cco-061323&payer=aetna

Paid: GET /v1/hospital/compare?code=470&hospitals=co-060001%2Cco-061323&payer=aetna answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "code": {
    "type": "MS-DRG",
    "code": "470",
    "description": "MAJOR HIP AND KNEE JOINT REPLACEMENT OR REATTACHMENT OF LOWER EXTREMITY WITHOUT MCC",
    "description_source": "cms_ms_drg",
    "drg": {
      "mdc": "08",
      "kind": "SURG",
      "weight": 1.9563,
      "gmlos": 2,
      "amlos": 2.3
    },
    "mrfs_statewide": 45
  },
  "filters": {
    "payer": "aetna",
    "plan_type": null,
    "plan": null,
    "setting": null,
    "billing_class": null
  },
  "hospitals": [
    {
      "id": "co-060001",
      "ccn": "060001",
      "name": "BANNER NORTH COLORADO MEDICAL CENTER",
      "city": "GREELEY",
      "status": "served",
      "priced": true,
      "basis": "unmodified",
      "mrfs": [
        {
          "source_id": "hpt-mrf-459d3e4251c49cf7",
          "url": "https://images.pricetransparency.healthcare/public-mrfs/banner/841287638_banner-north-colorado-medical-center_standardcharges.csv",
          "sha256": "505667e76aaa7803d44a670ee04ddc3b07b81da8702657983a40c1eb1f168997",
          "fetched_at": "2026-10-19T23:09:02.163Z",
          "last_updated_on": "2026-09-23",
          "conformance": "valid"
        }
      ],
      "items": 1,
      "payers": 3,
      "gross": null,
      "discounted_cash": {
        "n": 1,
        "min": "24121.08",
        "p10": "24121.08",
        "median": "24121.08",
        "p90": "24121.08",
        "max": "24121.08"
      },
      "negotiated_dollar": {
        "n": 3,
        "min": "18340.39",
        "p10": "18340.39",
        "median": "51555.64",
        "p90": "70238.96",
        "max": "70238.96"
      },
      "negotiated_percentage": null,
      "deidentified_min": "17790.18",
      "deidentified_max": "70238.96",
      "confidence": 1
    },
    {
      "id": "co-061323",
      "ccn": "061323",
      "name": "PROWERS MEDICAL CENTER",
      "city": "LAMAR",
      "status": "served",
      "priced": false,
      "basis": null,
      "mrfs": [
        {
          "source_id": "hpt-mrf-31836e761c89c201",
          "url": "https://www.prowersmedical.com/wp-content/uploads/840584583_PROWERS-MEDICAL-CENTER_STANDARDCHARGES.csv",
          "sha256": "1d4105709236d42f631e79f4e3fe22c408fe1e69b11118319869affa5f7fbbb1",
          "fetched_at": "2026-10-19T23:08:32.284Z",
          "last_updated_on": "2025-01-01",
          "conformance": "errors"
        }
      ],
      "items": 0,
      "payers": 0,
      "gross": null,
      "discounted_cash": null,
      "negotiated_dollar": null,
      "negotiated_percentage": null,
      "deidentified_min": null,
      "deidentified_max": null,
      "confidence": null
    }
  ],
  "not_found": []
}

What has each insurer negotiated for a procedure in this area? Negotiated prices by canonical payer (Aetna, Cigna, UnitedHealthcare, Medicare Advantage, …) and plan type for one code near a Colorado ZIP, computed by Distill from hospital price-transparency files

$0.02 per call

GET /v1/hospital/payers

Route
hospital.payers
Price
$0.02 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
hospital_payers
Method
hospital.payers@1.1.0
Freshness
Refreshed monthly (manual batch). Data as of 2026-10-19, last checked 2026-10-20 (25 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Mean over every rate in the payer rows returned of normalize × quality × freshness, with the same factors as hospital.prices (normalize: the stored per-rate payer canonicalization confidence, rule 1, model 0.9, fallback 0.6; quality: 1 valid v3.0, 0.85 with conformance errors, 0.7 after header repair; freshness: 1 while last_updated_on is at most 365 days old, then halving every 180 days, times 1 within 14 days of our fetch, then halving every 30 days).

Try it free: GET /try/v1/hospital/payers?code=470&zip=80631&radius_miles=15&plan_type=commercial

Paid: GET /v1/hospital/payers?code=470&zip=80631&radius_miles=15&plan_type=commercial answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "code": {
    "type": "MS-DRG",
    "code": "470",
    "description": "MAJOR HIP AND KNEE JOINT REPLACEMENT OR REATTACHMENT OF LOWER EXTREMITY WITHOUT MCC",
    "description_source": "cms_ms_drg",
    "drg": {
      "mdc": "08",
      "kind": "SURG",
      "weight": 1.9563,
      "gmlos": 2,
      "amlos": 2.3
    },
    "mrfs_statewide": 45
  },
  "location": {
    "zip": "80631",
    "lat": 40.4447,
    "lon": -104.6794,
    "radius_miles": 15
  },
  "filters": {
    "setting": null,
    "plan_type": "commercial"
  },
  "hospitals_with_prices": 2,
  "payers_total": 8,
  "payers": [
    {
      "payer_id": "anthem",
      "payer": "Anthem Blue Cross and Blue Shield (Elevance Health)",
      "plan_type": "commercial",
      "methodology": "case rate",
      "hospitals": 2,
      "rates": 5,
      "negotiated_dollar": {
        "n": 5,
        "min": "32550.19",
        "p10": "32550.19",
        "median": "58474.6",
        "p90": "62303.47",
        "max": "62303.47"
      },
      "fallback_rates": 0,
      "confidence": 1
    },
    {
      "payer_id": "aetna",
      "payer": "Aetna (CVS Health)",
      "plan_type": "commercial",
      "methodology": "case rate",
      "hospitals": 2,
      "rates": 2,
      "negotiated_dollar": {
        "n": 2,
        "min": "58937.54",
        "p10": "58937.54",
        "median": "58937.54",
        "p90": "70238.96",
        "max": "70238.96"
      },
      "fallback_rates": 0,
      "confidence": 1
    },
    {
      "payer_id": "cigna",
      "payer": "Cigna Healthcare",
      "plan_type": "commercial",
      "methodology": "case rate",
      "hospitals": 1,
      "rates": 3,
      "negotiated_dollar": {
        "n": 3,
        "min": "42541.89",
        "p10": "42541.89",
        "median": "46501.92",
        "p90": "59871.13",
        "max": "59871.13"
      },
      "fallback_rates": 0,
      "confidence": 1
    },
    {
      "payer_id": "other",
      "payer": "Other payer",
      "plan_type": "commercial",
      "methodology": "fee schedule",
      "hospitals": 1,
      "rates": 3,
      "negotiated_dollar": {
        "n": 3,
        "min": "22008.47",
        "p10": "22008.47",
        "median": "42182.9",
        "p90": "46767.99",
        "max": "46767.99"
      },
      "fallback_rates": 3,
      "confidence": 0.6
    },
    {
      "payer_id": "kaiser",
      "payer": "Kaiser Permanente",
      "plan_type": "commercial",
      "methodology": "case rate",
      "hospitals": 1,
      "rates": 2,
      "negotiated_dollar": {
        "n": 2,
        "min": "37789.08",
        "p10": "37789.08",
        "median": "37789.08",
        "p90": "42605.54",
        "max": "42605.54"
      },
      "fallback_rates": 0,
      "confidence": 1
    },
    {
      "payer_id": "unitedhealthcare",
      "payer": "UnitedHealthcare",
      "plan_type": "commercial",
      "methodology": "case rate",
      "hospitals": 1,
      "rates": 2,
      "negotiated_dollar": {
        "n": 2,
        "min": "49185.02",
        "p10": "49185.02",
        "median": "49185.02",
        "p90": "66736.08",
        "max": "66736.08"
      },
      "fallback_rates": 0,
      "confidence": 1
    },
    {
      "payer_id": "denver_health_medical_plan",
      "payer": "Denver Health Medical Plan",
      "plan_type": "commercial",
      "methodology": "fee schedule",
      "hospitals": 1,
      "rates": 1,
      "negotiated_dollar": {
        "n": 1,
        "min": "32750.43",
        "p10": "32750.43",
        "median": "32750.43",
        "p90": "32750.43",
        "max": "32750.43"
      },
      "fallback_rates": 0,
      "confidence": 1
    },
    {
      "payer_id": "other",
      "payer": "Other payer",
      "plan_type": "commercial",
      "methodology": "case rate",
      "hospitals": 1,
      "rates": 1,
      "negotiated_dollar": {
        "n": 1,
        "min": "38245.26",
        "p10": "38245.26",
        "median": "38245.26",
        "p90": "38245.26",
        "max": "38245.26"
      },
      "fallback_rates": 1,
      "confidence": 0.6
    }
  ]
}

What changed in hospital prices since a date? Colorado hospital price, payer-rate, file and status change records, computed by Distill by diffing the hospitals’ price-transparency files

$0.05 per call

GET /v1/hospital/changes

Route
hospital.changes
Price
$0.05 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
hospital_changes
Method
hospital.changes@1.1.0
Freshness
Refreshed monthly (manual batch). Data as of 2026-10-19, last checked 2026-10-20 (25 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Change records are diffs of consecutive serving DBs, computed deterministically; confidence is the feed’s freshness only: 1 within 14 days of the newest build, then halving every 30 days.

Try it free: GET /try/v1/hospital/changes?limit=1

Paid: GET /v1/hospital/changes?limit=1 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "records": [],
  "next_cursor": null
}

Medicare fee schedule and Part D

Medicare Physician Fee Schedule reference prices computed from CMS’s own quarterly relative value, GPCI and conversion-factor files (2025A on): for a HCPCS or CPT code at a ZIP, ZIP+4 or Medicare locality, the facility and non-facility allowed amounts, the RVUs behind them, the OPPS cap and the same amounts in every release; one code across every locality; and a quarterly change feed. Every amount agrees with CMS’s carrier payment files to the cent, and every answer cites the CMS files by URL and sha256. CPT codes come without their AMA descriptors. Also Medicare Part D: which drug plans sold in a county cover a drug (by RxCUI), with tier, prior authorization, step therapy, quantity limits, premiums and cost sharing, for the current plan year and the next (open enrollment), from CMS’s monthly formulary files, with a monthly change feed.

Medicare Physician Fee Schedule amounts computed from CMS’s published RVU, GPCI and conversion-factor files: what Original Medicare allows a participating clinician (before deductible and coinsurance), not what another payer pays; not a quote, not medical, billing or coding advice. See /terms.

CPT® codes are served as codes only: their descriptors are AMA copyright and are never included (nor dental CDT descriptors). CPT is a registered trademark of the American Medical Association. HCPCS Level II descriptions are CMS’s.

Medicare Part D formulary and plan data as of the CMS public use file’s date (file_date), processed by Distill; the Medicare Plan Finder (medicare.gov/plan-compare) may have newer information. Not enrollment, coverage or medical advice; confirm with the plan. See /terms.

What does Medicare pay for this CPT or HCPCS code at this ZIP? Physician Fee Schedule facility and non-facility allowed amounts with the RVUs and GPCIs behind them, any US ZIP or Medicare locality, 2025 on, computed by Distill from CMS’s quarterly RVU files

$0.01 per call

GET /v1/medicare/pfs/rate

Route
medicare.pfs_rate
Price
$0.01 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
medicare_pfs_rate
Method
medicare.pfs_rate@1.0.0
Freshness
Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
agreement × freshness. Agreement: for a 5-digit ZIP that CMS splits across localities by ZIP+4, the share of its ZIP+4 codes in the answered locality; 1 for a ZIP+4, a locality or a ZIP in one locality. Freshness: 1 until the first day of the calendar quarter after the CMS files were last checked, then halving every 30 days. The amounts themselves are exact (they agree with CMS’s carrier payment files to the cent).

Try it free: GET /try/v1/medicare/pfs/rate?code=99213&zip=80218

Paid: GET /v1/medicare/pfs/rate?code=99213&zip=80218 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "code": "99213",
  "modifier": null,
  "code_type": "CPT",
  "description": null,
  "status": "A",
  "status_meaning": "Active: separately paid under the fee schedule",
  "priced": true,
  "release": {
    "id": "2026D",
    "effective_from": "2026-10-01",
    "effective_to": null,
    "released": "2026-08-26"
  },
  "locality": {
    "id": "04112-01",
    "mac": "04112",
    "locality": "01",
    "state": "CO",
    "name": "COLORADO",
    "counties": "ALL COUNTIES"
  },
  "location": {
    "zip": "80218",
    "plus4": null,
    "matched": "zip5",
    "rural": null
  },
  "rvus": {
    "work": "1.30",
    "pe_nonfacility": "1.46",
    "pe_facility": "0.33",
    "mp": "0.09",
    "nonfacility_na": false,
    "facility_na": false
  },
  "gpci": {
    "work": "1.012",
    "pe": "1.064",
    "mp": "0.781"
  },
  "conversion_factor": {
    "nonqp": "33.4009",
    "qp": "33.5675"
  },
  "nonfacility": {
    "amount": "98.18",
    "amount_qp": "98.67",
    "limiting_charge": "107.26",
    "opps_capped": false,
    "fee_before_cap": null
  },
  "facility": {
    "amount": "58.02",
    "amount_qp": "58.31",
    "limiting_charge": "63.39",
    "opps_capped": false,
    "fee_before_cap": null
  },
  "indicators": {
    "pctc": "0",
    "global_days": "XXX",
    "multiple_procedure": "0",
    "bilateral_surgery": "0",
    "assistant_surgery": "0",
    "co_surgeons": "0",
    "team_surgery": "0"
  },
  "history": [
    {
      "release": "2026D",
      "effective_from": "2026-10-01",
      "status": "A",
      "nonfacility": "98.18",
      "facility": "58.02"
    },
    {
      "release": "2026C",
      "effective_from": "2026-07-01",
      "status": "A",
      "nonfacility": "98.18",
      "facility": "58.02"
    },
    {
      "release": "2026B",
      "effective_from": "2026-04-01",
      "status": "A",
      "nonfacility": "98.18",
      "facility": "58.02"
    },
    {
      "release": "2026A",
      "effective_from": "2026-01-01",
      "status": "A",
      "nonfacility": "98.18",
      "facility": "58.02"
    },
    {
      "release": "2025D",
      "effective_from": "2025-10-01",
      "status": "A",
      "nonfacility": "91.04",
      "facility": "64.48"
    },
    {
      "release": "2025C",
      "effective_from": "2025-07-01",
      "status": "A",
      "nonfacility": "91.04",
      "facility": "64.48"
    },
    {
      "release": "2025B",
      "effective_from": "2025-04-01",
      "status": "A",
      "nonfacility": "91.04",
      "facility": "64.48"
    },
    {
      "release": "2025A",
      "effective_from": "2025-01-01",
      "status": "A",
      "nonfacility": "91.04",
      "facility": "64.48"
    }
  ]
}

How does Medicare’s allowed amount for one code vary across the US? Physician Fee Schedule amounts in all 109 Medicare localities (or one state’s) with the national amount and range, computed by Distill from CMS’s RVU and GPCI files

$0.02 per call

GET /v1/medicare/pfs/localities

Route
medicare.pfs_localities
Price
$0.02 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
medicare_pfs_localities
Method
medicare.pfs_localities@1.0.0
Freshness
Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (the amounts and change records are computed from the CMS files deterministically): 1 until the first day of the calendar quarter after the files were last checked, then halving every 30 days.

Try it free: GET /try/v1/medicare/pfs/localities?code=70551&state=NY

Paid: GET /v1/medicare/pfs/localities?code=70551&state=NY answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "code": "70551",
  "modifier": null,
  "code_type": "CPT",
  "description": null,
  "status": "A",
  "priced": true,
  "release": {
    "id": "2026D",
    "effective_from": "2026-10-01",
    "effective_to": null
  },
  "national": {
    "nonfacility": "195.40",
    "facility": "195.40"
  },
  "summary": {
    "localities": 5,
    "nonfacility": {
      "min": "187.21",
      "max": "228.54"
    },
    "facility": {
      "min": "187.21",
      "max": "228.54"
    }
  },
  "localities": [
    {
      "id": "13202-01",
      "state": "NY",
      "name": "MANHATTAN",
      "nonfacility": "223.75",
      "facility": "223.75",
      "opps_capped": false
    },
    {
      "id": "13202-02",
      "state": "NY",
      "name": "NYC SUBURBS/LONG ISLAND",
      "nonfacility": "228.54",
      "facility": "228.54",
      "opps_capped": false
    },
    {
      "id": "13202-03",
      "state": "NY",
      "name": "POUGHKPSIE/N NYC SUBURBS",
      "nonfacility": "211.94",
      "facility": "211.94",
      "opps_capped": false
    },
    {
      "id": "13282-99",
      "state": "NY",
      "name": "REST OF NEW YORK",
      "nonfacility": "187.21",
      "facility": "187.21",
      "opps_capped": false
    },
    {
      "id": "13292-04",
      "state": "NY",
      "name": "QUEENS",
      "nonfacility": "226.15",
      "facility": "226.15",
      "opps_capped": false
    }
  ]
}

What changed in the Medicare Physician Fee Schedule this quarter? RVU, status, conversion-factor, GPCI and OPPS-cap change records between CMS releases, 2025 on, computed by Distill from CMS’s RVU files

$0.05 per call

GET /v1/medicare/pfs/changes

Route
medicare.pfs_changes
Price
$0.05 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
medicare_pfs_changes
Method
medicare.pfs_changes@1.0.0
Freshness
Refreshed quarterly (manual batch). Data as of 2026-10-21, last checked 2026-10-21 (24 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (the amounts and change records are computed from the CMS files deterministically): 1 until the first day of the calendar quarter after the files were last checked, then halving every 30 days.

Try it free: GET /try/v1/medicare/pfs/changes?code=99213&release=2026A&entity=rvu

Paid: GET /v1/medicare/pfs/changes?code=99213&release=2026A&entity=rvu answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "records": [
    {
      "id": "31440",
      "release": "2026A",
      "entity": "rvu",
      "key": "99213",
      "field": "pe_rvu_nonfacility",
      "old": "1.35",
      "new": "1.46",
      "effective": "2026-01-01",
      "released": "2025-12-29",
      "detected_at": "2026-10-21T05:51:26.618Z",
      "source_sha256_old": "ebe658d447353094aaf2068530045079b6875f76451defd163fe701b0c2adf79",
      "source_sha256_new": "91b9bdd5459bc4c19d4f8203410b29a672db37def2e70f01ef627b8b18fc7482",
      "method_version": "medicare.pfs@1.0.0"
    },
    {
      "id": "31441",
      "release": "2026A",
      "entity": "rvu",
      "key": "99213",
      "field": "pe_rvu_facility",
      "old": "0.57",
      "new": "0.33",
      "effective": "2026-01-01",
      "released": "2025-12-29",
      "detected_at": "2026-10-21T05:51:26.618Z",
      "source_sha256_old": "ebe658d447353094aaf2068530045079b6875f76451defd163fe701b0c2adf79",
      "source_sha256_new": "91b9bdd5459bc4c19d4f8203410b29a672db37def2e70f01ef627b8b18fc7482",
      "method_version": "medicare.pfs@1.0.0"
    },
    {
      "id": "31442",
      "release": "2026A",
      "entity": "rvu",
      "key": "99213",
      "field": "mp_rvu",
      "old": "0.10",
      "new": "0.09",
      "effective": "2026-01-01",
      "released": "2025-12-29",
      "detected_at": "2026-10-21T05:51:26.618Z",
      "source_sha256_old": "ebe658d447353094aaf2068530045079b6875f76451defd163fe701b0c2adf79",
      "source_sha256_new": "91b9bdd5459bc4c19d4f8203410b29a672db37def2e70f01ef627b8b18fc7482",
      "method_version": "medicare.pfs@1.0.0"
    }
  ],
  "next_cursor": null
}

Which Medicare Part D plans in this county cover this drug, at what tier and cost? Every PDP and Medicare Advantage drug plan with tier, prior authorization, step therapy, quantity limit, premium and copay, plan years 2026 and 2027, computed by Distill from CMS’s monthly formulary files

$0.02 per call

GET /v1/medicare/partd/coverage

Route
medicare.partd_coverage
Price
$0.02 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
medicare_partd_coverage
Method
medicare.partd_coverage@1.0.0
Freshness
Refreshed monthly (scheduled). Data as of 2026-10-08, last checked 2026-10-21 (24 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (the plans and terms are read from the CMS file deterministically): 1 until 45 days after the served file’s date (CMS posts one a month), then halving every 30 days.

Try it free: GET /try/v1/medicare/partd/coverage?rxcui=617311&state=CO&county=Denver&plan_year=2027&limit=2

Paid: GET /v1/medicare/partd/coverage?rxcui=617311&state=CO&county=Denver&plan_year=2027&limit=2 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "plan_year": 2027,
  "file_date": "2026-10-08",
  "drug": {
    "rxcui": "617311",
    "ndc": null
  },
  "location": {
    "county_code": "06150",
    "state": "CO",
    "county": "Denver",
    "ma_region": "20",
    "pdp_region": "27"
  },
  "plans_in_area": 67,
  "plans_covering": 67,
  "plans": [
    {
      "plan": "H0028-063-000",
      "plan_name": "Humana Essentials Plus Giveback (HMO)",
      "contract_name": "CHA HMO, INC.",
      "kind": "MA",
      "snp": null,
      "premium": "0.00",
      "deductible": "50.00",
      "drug": {
        "tier": 1,
        "prior_authorization": false,
        "step_therapy": false,
        "quantity_limit": null,
        "negotiated_drug": false,
        "terms_vary_by_ndc": false
      },
      "cost_30_day": {
        "tier": 1,
        "specialty": false,
        "deductible_applies": false,
        "preferred_retail": {
          "type": "not_offered",
          "amount": null
        },
        "standard_retail": {
          "type": "copay",
          "amount": "0.00"
        },
        "preferred_mail": {
          "type": "copay",
          "amount": "0.00"
        },
        "standard_mail": {
          "type": "copay",
          "amount": "10.00"
        }
      }
    },
    {
      "plan": "H0028-078-000",
      "plan_name": "Humana Dual Select H0028-078 (HMO D-SNP)",
      "contract_name": "CHA HMO, INC.",
      "kind": "MA",
      "snp": "dual-eligible",
      "premium": "0.00",
      "deductible": "700.00",
      "drug": {
        "tier": 1,
        "prior_authorization": false,
        "step_therapy": false,
        "quantity_limit": null,
        "negotiated_drug": false,
        "terms_vary_by_ndc": false
      },
      "cost_30_day": {
        "tier": 1,
        "specialty": false,
        "deductible_applies": false,
        "preferred_retail": {
          "type": "not_offered",
          "amount": null
        },
        "standard_retail": {
          "type": "copay",
          "amount": "0.00"
        },
        "preferred_mail": {
          "type": "copay",
          "amount": "0.00"
        },
        "standard_mail": {
          "type": "copay",
          "amount": "10.00"
        }
      }
    }
  ]
}

What does this Medicare Part D plan cost and cover? Premium, deductible, service area, cost sharing by tier and one drug’s terms for a contract-plan-segment id, computed by Distill from CMS’s monthly formulary files

$0.01 per call

GET /v1/medicare/partd/plan

Route
medicare.partd_plan
Price
$0.01 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
medicare_partd_plan
Method
medicare.partd_plan@1.0.0
Freshness
Refreshed monthly (scheduled). Data as of 2026-10-08, last checked 2026-10-21 (24 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (the plans and terms are read from the CMS file deterministically): 1 until 45 days after the served file’s date (CMS posts one a month), then halving every 30 days.

Try it free: GET /try/v1/medicare/partd/plan?plan=H0028-063-000&plan_year=2027&rxcui=617311

Paid: GET /v1/medicare/partd/plan?plan=H0028-063-000&plan_year=2027&rxcui=617311 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "plan_year": 2027,
  "file_date": "2026-10-08",
  "plan": "H0028-063-000",
  "plan_name": "Humana Essentials Plus Giveback (HMO)",
  "contract_name": "CHA HMO, INC.",
  "kind": "MA",
  "snp": null,
  "formulary_id": "00027366",
  "premium": "0.00",
  "deductible": "50.00",
  "service_area": {
    "counties": 7,
    "ma_regions": [],
    "pdp_regions": []
  },
  "tiers": [
    {
      "tier": 1,
      "specialty": false,
      "deductible_applies": false,
      "preferred_retail": {
        "type": "not_offered",
        "amount": null
      },
      "standard_retail": {
        "type": "copay",
        "amount": "0.00"
      },
      "preferred_mail": {
        "type": "copay",
        "amount": "0.00"
      },
      "standard_mail": {
        "type": "copay",
        "amount": "10.00"
      }
    },
    {
      "tier": 2,
      "specialty": false,
      "deductible_applies": false,
      "preferred_retail": {
        "type": "not_offered",
        "amount": null
      },
      "standard_retail": {
        "type": "copay",
        "amount": "0.00"
      },
      "preferred_mail": {
        "type": "copay",
        "amount": "0.00"
      },
      "standard_mail": {
        "type": "copay",
        "amount": "20.00"
      }
    },
    {
      "tier": 3,
      "specialty": false,
      "deductible_applies": true,
      "preferred_retail": {
        "type": "not_offered",
        "amount": null
      },
      "standard_retail": {
        "type": "coinsurance",
        "amount": "19"
      },
      "preferred_mail": {
        "type": "coinsurance",
        "amount": "19"
      },
      "standard_mail": {
        "type": "coinsurance",
        "amount": "19"
      }
    },
    {
      "tier": 4,
      "specialty": false,
      "deductible_applies": true,
      "preferred_retail": {
        "type": "not_offered",
        "amount": null
      },
      "standard_retail": {
        "type": "coinsurance",
        "amount": "50"
      },
      "preferred_mail": {
        "type": "coinsurance",
        "amount": "50"
      },
      "standard_mail": {
        "type": "coinsurance",
        "amount": "50"
      }
    },
    {
      "tier": 5,
      "specialty": true,
      "deductible_applies": true,
      "preferred_retail": {
        "type": "not_offered",
        "amount": null
      },
      "standard_retail": {
        "type": "coinsurance",
        "amount": "32"
      },
      "preferred_mail": {
        "type": "coinsurance",
        "amount": "32"
      },
      "standard_mail": {
        "type": "coinsurance",
        "amount": "32"
      }
    }
  ],
  "drug": {
    "rxcui": "617311",
    "covered": true,
    "tier": 1,
    "prior_authorization": false,
    "step_therapy": false,
    "quantity_limit": null,
    "negotiated_drug": false,
    "terms_vary_by_ndc": false
  }
}

Which Medicare Part D formularies changed this month? Drugs added or dropped, tier, prior-authorization, step-therapy and quantity-limit changes and plan premium changes, computed by Distill from CMS’s monthly formulary files

$0.05 per call

GET /v1/medicare/partd/changes

Route
medicare.partd_changes
Price
$0.05 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
medicare_partd_changes
Method
medicare.partd_changes@1.0.0
Freshness
Refreshed monthly (scheduled). Data as of 2026-10-08, last checked 2026-10-21 (24 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (the plans and terms are read from the CMS file deterministically): 1 until 45 days after the served file’s date (CMS posts one a month), then halving every 30 days.

Try it free: GET /try/v1/medicare/partd/changes?key=2723345&entity=formulary&limit=2

Paid: GET /v1/medicare/partd/changes?key=2723345&entity=formulary&limit=2 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "records": [
    {
      "id": "814",
      "released": "2026-09-16",
      "entity": "formulary",
      "key": "00026059:2723345",
      "field": "tier",
      "old": "5",
      "new": "3",
      "detected_at": "2026-10-21T06:36:03.486Z",
      "source_sha256_old": "37532d0916c7b5f348123e993b8eb8c76f08c97d70c099cb1fc6f6b3cdacb696",
      "source_sha256_new": "51d0d4177f00458ef420da1491f91f2e4f0a17dc11c253232a9bcc06572d21f2",
      "plan_year": 2026,
      "method_version": "medicare.partd@1.0.0"
    },
    {
      "id": "962",
      "released": "2026-09-16",
      "entity": "formulary",
      "key": "00026063:2723345",
      "field": "tier",
      "old": "4",
      "new": "3",
      "detected_at": "2026-10-21T06:36:03.486Z",
      "source_sha256_old": "37532d0916c7b5f348123e993b8eb8c76f08c97d70c099cb1fc6f6b3cdacb696",
      "source_sha256_new": "51d0d4177f00458ef420da1491f91f2e4f0a17dc11c253232a9bcc06572d21f2",
      "plan_year": 2026,
      "method_version": "medicare.partd@1.0.0"
    }
  ],
  "next_cursor": "962"
}

Drug acquisition cost (NADAC)

CMS’s National Average Drug Acquisition Cost from the weekly data.medicaid.gov files (2025 on): one NDC’s current per-unit cost and price history, a drug-name search, and a weekly change feed with CMS’s reason for each change. A survey average of what pharmacies pay, not a retail price.

National Average Drug Acquisition Cost as CMS publishes it weekly: a survey average of what retail pharmacies pay per unit, not a retail price, a reimbursement rate, a quote or medical advice. See /terms.

What do US pharmacies pay for this drug? CMS’s National Average Drug Acquisition Cost (NADAC) per unit for an NDC, the generic’s NADAC for a brand and the weekly price history since January 2025, from CMS’s NADAC files on data.medicaid.gov

$0.01 per call

GET /v1/drug/nadac

Route
drug.nadac
Price
$0.01 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
drug_nadac
Method
drug.nadac_route@1.0.0
Freshness
Refreshed weekly (scheduled). Data as of 2026-11-04, last checked 2026-11-08 (6 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (the values are CMS’s, read deterministically): 1 until 9 days after the latest weekly file’s as-of date, then halving every 14 days.

Try it free: GET /try/v1/drug/nadac?ndc=00378410591

Paid: GET /v1/drug/nadac?ndc=00378410591 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "ndc": "00378410591",
  "description": "ABACAVIR 300 MG TABLET",
  "pricing_unit": "EA",
  "otc": false,
  "classification": "G",
  "pharmacy_type": "C/I",
  "listed": true,
  "current": {
    "nadac_per_unit": "0.55226",
    "effective_date": "2026-10-21",
    "as_of": "2026-10-21",
    "explanation_codes": [
      "1"
    ]
  },
  "last_listed": {
    "nadac_per_unit": "0.55226",
    "effective_date": "2026-10-21",
    "as_of": "2026-10-21"
  },
  "corresponding_generic": null,
  "same_description": {
    "ndcs": 12,
    "min": "0.55226",
    "max": "0.55226"
  },
  "history": [
    {
      "nadac_per_unit": "0.55226",
      "effective_date": "2026-10-21",
      "first_as_of": "2026-10-21",
      "last_as_of": "2026-10-21",
      "weeks": 1
    },
    {
      "nadac_per_unit": "0.54555",
      "effective_date": "2026-09-23",
      "first_as_of": "2026-09-23",
      "last_as_of": "2026-10-14",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.53801",
      "effective_date": "2026-08-19",
      "first_as_of": "2026-08-19",
      "last_as_of": "2026-09-16",
      "weeks": 5
    },
    {
      "nadac_per_unit": "0.55679",
      "effective_date": "2026-07-22",
      "first_as_of": "2026-07-22",
      "last_as_of": "2026-08-12",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.60124",
      "effective_date": "2026-06-17",
      "first_as_of": "2026-06-17",
      "last_as_of": "2026-07-15",
      "weeks": 5
    },
    {
      "nadac_per_unit": "0.64093",
      "effective_date": "2026-05-20",
      "first_as_of": "2026-05-20",
      "last_as_of": "2026-06-10",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.65861",
      "effective_date": "2026-04-22",
      "first_as_of": "2026-04-22",
      "last_as_of": "2026-05-13",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.65238",
      "effective_date": "2026-03-18",
      "first_as_of": "2026-03-18",
      "last_as_of": "2026-04-15",
      "weeks": 5
    },
    {
      "nadac_per_unit": "0.64179",
      "effective_date": "2026-02-18",
      "first_as_of": "2026-02-18",
      "last_as_of": "2026-03-11",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.63114",
      "effective_date": "2026-01-21",
      "first_as_of": "2026-01-21",
      "last_as_of": "2026-02-11",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.62468",
      "effective_date": "2025-12-17",
      "first_as_of": "2025-12-17",
      "last_as_of": "2026-01-14",
      "weeks": 5
    },
    {
      "nadac_per_unit": "0.62091",
      "effective_date": "2025-11-19",
      "first_as_of": "2025-11-19",
      "last_as_of": "2025-12-10",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.64489",
      "effective_date": "2025-10-22",
      "first_as_of": "2025-10-22",
      "last_as_of": "2025-11-12",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.67127",
      "effective_date": "2025-09-17",
      "first_as_of": "2025-09-17",
      "last_as_of": "2025-10-15",
      "weeks": 5
    },
    {
      "nadac_per_unit": "0.68204",
      "effective_date": "2025-08-20",
      "first_as_of": "2025-08-20",
      "last_as_of": "2025-09-10",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.67582",
      "effective_date": "2025-07-23",
      "first_as_of": "2025-07-23",
      "last_as_of": "2025-08-13",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.66208",
      "effective_date": "2025-06-18",
      "first_as_of": "2025-06-18",
      "last_as_of": "2025-07-16",
      "weeks": 5
    },
    {
      "nadac_per_unit": "0.6502",
      "effective_date": "2025-05-21",
      "first_as_of": "2025-05-21",
      "last_as_of": "2025-06-11",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.63617",
      "effective_date": "2025-04-23",
      "first_as_of": "2025-04-23",
      "last_as_of": "2025-05-14",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.61614",
      "effective_date": "2025-03-19",
      "first_as_of": "2025-03-19",
      "last_as_of": "2025-04-16",
      "weeks": 5
    },
    {
      "nadac_per_unit": "0.60252",
      "effective_date": "2025-02-19",
      "first_as_of": "2025-02-19",
      "last_as_of": "2025-03-12",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.59565",
      "effective_date": "2025-01-22",
      "first_as_of": "2025-01-22",
      "last_as_of": "2025-02-12",
      "weeks": 4
    },
    {
      "nadac_per_unit": "0.60042",
      "effective_date": "2024-12-18",
      "first_as_of": "2025-01-01",
      "last_as_of": "2025-01-15",
      "weeks": 3
    }
  ]
}
$0.01 per call

GET /v1/drug/nadac/search

Route
drug.nadac_search
Price
$0.01 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
drug_nadac_search
Method
drug.nadac_search@1.0.0
Freshness
Refreshed weekly (scheduled). Data as of 2026-11-04, last checked 2026-11-08 (6 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (the values are CMS’s, read deterministically): 1 until 9 days after the latest weekly file’s as-of date, then halving every 14 days.

Try it free: GET /try/v1/drug/nadac/search?name=atorvastatin+40

Paid: GET /v1/drug/nadac/search?name=atorvastatin+40 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "query": "atorvastatin 40",
  "as_of": "2026-10-21",
  "matches": [
    {
      "description": "ATORVASTATIN 40 MG TABLET",
      "pricing_unit": "EA",
      "classification": "G",
      "ndcs": 69,
      "nadac_per_unit": {
        "min": "0.03688",
        "max": "0.03688"
      },
      "effective_date": "2026-10-21",
      "sample_ndcs": [
        "00093505810",
        "00093505898",
        "00378395205",
        "00378395277",
        "00480358710"
      ]
    }
  ]
}

Which drug acquisition costs changed this week? NADAC per-unit cost changes and NDCs added or dropped, with CMS’s stated reason, 2025 on, from CMS’s weekly NADAC files

$0.05 per call

GET /v1/drug/nadac/changes

Route
drug.nadac_changes
Price
$0.05 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
drug_nadac_changes
Method
drug.nadac_changes@1.0.0
Freshness
Refreshed weekly (scheduled). Data as of 2026-11-04, last checked 2026-11-08 (6 days ago). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (the values are CMS’s, read deterministically): 1 until 9 days after the latest weekly file’s as-of date, then halving every 14 days.

Try it free: GET /try/v1/drug/nadac/changes?ndc=00378410591&limit=2

Paid: GET /v1/drug/nadac/changes?ndc=00378410591&limit=2 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "records": [
    {
      "id": "3291",
      "as_of": "2025-01-22",
      "ndc": "00378410591",
      "description": "ABACAVIR 300 MG TABLET",
      "field": "nadac_per_unit",
      "old": "0.60042",
      "new": "0.59565",
      "effective": "2025-01-22",
      "reason": "Survey Rate",
      "detected_at": "2025-01-22T00:00:00.000Z",
      "source_sha256_old": "317c0387d2005b18ade760029bf61b3ff5a3aab74ef96e322d319432c410ed80",
      "source_sha256_new": "317c0387d2005b18ade760029bf61b3ff5a3aab74ef96e322d319432c410ed80",
      "method_version": "drug.nadac@1.0.0"
    },
    {
      "id": "31659",
      "as_of": "2025-02-19",
      "ndc": "00378410591",
      "description": "ABACAVIR 300 MG TABLET",
      "field": "nadac_per_unit",
      "old": "0.59565",
      "new": "0.60252",
      "effective": "2025-02-19",
      "reason": "Survey Rate",
      "detected_at": "2025-02-19T00:00:00.000Z",
      "source_sha256_old": "317c0387d2005b18ade760029bf61b3ff5a3aab74ef96e322d319432c410ed80",
      "source_sha256_new": "317c0387d2005b18ade760029bf61b3ff5a3aab74ef96e322d319432c410ed80",
      "method_version": "drug.nadac@1.0.0"
    }
  ],
  "next_cursor": "31659"
}

OFAC sanctions screening

Crypto addresses on OFAC’s Specially Designated Nationals list, read daily from OFAC’s own SDN.XML: whether an address (Bitcoin, Ethereum and every EVM chain, Tron, Solana, Monero and more) is listed, under which SDN entry, program and asset, as of which publication; up to 100 addresses a call; and a per-publication change feed of addresses added and removed. Facts with the list date, not a compliance determination. Queried addresses are not stored.

Facts from the OFAC SDN list as published on the date stated: an exact match of the address as given (EVM and Bech32 addresses case-insensitively). Not legal advice and not a compliance determination: no ownership (50% rule) analysis, no indirect exposure, no other sanctions list. Computed by Distill from OFAC’s SDN.XML. See /terms.

Is this crypto address on OFAC’s SDN sanctions list? SDN entry, program, asset and list date for Bitcoin, Ethereum and EVM, Tron, Solana and other addresses, checked by Distill against OFAC’s own SDN file

$0.005 per call

GET /v1/sanctions/address

Route
sanctions.address
Price
$0.005 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
sanctions_address
Method
sanctions.address@1.0.0
Freshness
Refreshed daily (scheduled). Data as of 2026-11-13, last checked 2026-11-14 (today). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (the list is OFAC’s, matched exactly): 1 until 3 days after the last check of OFAC’s Sanctions List Service, then halving every 3 days.

Try it free: GET /try/v1/sanctions/address?address=0x098B716B8Aaf21512996dC57EB0615e2383E2f96

Paid: GET /v1/sanctions/address?address=0x098B716B8Aaf21512996dC57EB0615e2383E2f96 answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "address": "0x098b716b8aaf21512996dc57eb0615e2383e2f96",
  "address_format": "evm",
  "listed": true,
  "list": "OFAC SDN",
  "publication_date": "2026-10-15",
  "statement": "Listed on OFAC's SDN list as of 2026-10-15.",
  "matches": [
    {
      "asset": "ETH",
      "asset_name": "Ethereum",
      "chain": "Ethereum (EVM)",
      "address_as_listed": "0x098B716B8Aaf21512996dC57EB0615e2383E2f96",
      "entry": {
        "uid": 27307,
        "name": "LAZARUS GROUP",
        "type": "Entity",
        "programs": [
          "DPRK3"
        ]
      },
      "first_seen_publication": "2026-10-15"
    }
  ],
  "previously_listed": [],
  "history_from": "2026-10-15"
}

Are any of these crypto addresses on OFAC’s SDN sanctions list? Up to 100 addresses screened in one call, checked by Distill against OFAC’s own SDN file

$0.05 per call

POST /v1/sanctions/address/batch

Route
sanctions.address_batch
Price
$0.05 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
sanctions_address_batch
Method
sanctions.address@1.0.0
Freshness
Refreshed daily (scheduled). Data as of 2026-11-13, last checked 2026-11-14 (today). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (the list is OFAC’s, matched exactly): 1 until 3 days after the last check of OFAC’s Sanctions List Service, then halving every 3 days.

Call it: POST /v1/sanctions/address/batch with a JSON body.

Example data
{
  "addresses": [
    "0x098B716B8Aaf21512996dC57EB0615e2383E2f96",
    "0x098b716b8aaf21512996dc57eb0615e2383e2f97"
  ]
}

→ data:
{
  "publication_date": "2026-10-15",
  "listed": 1,
  "results": [
    {
      "index": 0,
      "ok": true,
      "answer": {
        "address": "0x098b716b8aaf21512996dc57eb0615e2383e2f96",
        "address_format": "evm",
        "listed": true,
        "list": "OFAC SDN",
        "publication_date": "2026-10-15",
        "statement": "Listed on OFAC's SDN list as of 2026-10-15.",
        "matches": [
          {
            "asset": "ETH",
            "asset_name": "Ethereum",
            "chain": "Ethereum (EVM)",
            "address_as_listed": "0x098B716B8Aaf21512996dC57EB0615e2383E2f96",
            "entry": {
              "uid": 27307,
              "name": "LAZARUS GROUP",
              "type": "Entity",
              "programs": [
                "DPRK3"
              ]
            },
            "first_seen_publication": "2026-10-15"
          }
        ],
        "previously_listed": [],
        "history_from": "2026-10-15"
      }
    },
    {
      "index": 1,
      "ok": true,
      "answer": {
        "address": "0x098b716b8aaf21512996dc57eb0615e2383e2f97",
        "address_format": "evm",
        "listed": false,
        "list": "OFAC SDN",
        "publication_date": "2026-10-15",
        "statement": "Not listed as a digital currency address on OFAC's SDN list as of 2026-10-15.",
        "matches": [],
        "previously_listed": [],
        "history_from": "2026-10-15"
      }
    }
  ]
}

Which crypto addresses did OFAC add to or remove from the SDN list? Per-publication change records (added, removed, entry updated), computed by Distill from OFAC’s own SDN files

$0.02 per call

GET /v1/sanctions/changes

Route
sanctions.changes
Price
$0.02 per call, x402 exact
Free tier
3 free calls a day per IP, at most 3 rows per answer, with ?free=1 on the URL, a /try/ page, or the header Distill-Free-Tier: use (without one an unpaid call answers 402)
MCP tool
sanctions_changes
Method
sanctions.changes@1.0.0
Freshness
Refreshed daily (scheduled). Data as of 2026-11-13, last checked 2026-11-14 (today). Status
Answer size
Summary view about 3,000 tokens; view=full for every row
Confidence
Freshness only (the list is OFAC’s, matched exactly): 1 until 3 days after the last check of OFAC’s Sanctions List Service, then halving every 3 days.

Try it free: GET /try/v1/sanctions/changes?since=2026-10-21T00%3A00%3A00Z

Paid: GET /v1/sanctions/changes?since=2026-10-21T00%3A00%3A00Z answers 402 with the payment requirements; pay with any x402 client. Free from any client: add ?free=1.

Example data
{
  "history_from": "2026-10-15",
  "records": [],
  "next_cursor": null
}

Freshness status

How fresh each dataset is right now, read from live answers: as_of, last check, cadence, next expected update and confidence. Free; also at /status.

Freshness of the data behind each route; it does not check any single answer.

How fresh is each Distill dataset right now? For every dataset: the as_of and last check its answers carry, the refresh cadence, the next expected update, its current confidence and whether it is late

Free

GET /v1/status

Route
distill.status
Price
free
MCP tool
distill_status
Method
distill.status@1.0.0
Freshness
Refreshed daily (live freshness: /status)
Answer size
Summary view about 2,500 tokens; view=full for every row
Confidence
The lowest current confidence among the datasets listed (each by its own route’s formula), 0 when one is unavailable.

Run it live: GET /v1/status

Example data
{
  "generated_at": "2026-11-08T12:00:00.000Z",
  "datasets": [
    {
      "id": "sanctions",
      "title": "OFAC SDN list (crypto addresses)",
      "routes": [
        "sanctions.address",
        "sanctions.address_batch",
        "sanctions.changes"
      ],
      "cadence": "daily",
      "schedule": "automatic",
      "state": "fresh",
      "as_of": "2026-11-07T00:00:00.000Z",
      "last_checked": "2026-11-08T07:31:12.000Z",
      "next_expected": "2026-11-09T07:31:12.000Z",
      "age_days": 0.2,
      "confidence": 1,
      "method_version": "sanctions.address@1.0.0",
      "source": {
        "publisher": "U.S. Treasury, Office of Foreign Assets Control",
        "url": "https://sanctionslistservice.ofac.treas.gov/api/PublicationPreview/exports/SDN.XML"
      },
      "note": null
    }
  ],
  "stale": 0
}

Every answer has receipts

Free or paid, every answer is the same envelope. sources names every file the answer was built from, with its fetch time and content hash. as_of is how fresh the underlying data is. confidence is computed by the formula each route documents, never typed in. method_version changes whenever the way an answer is made changes, and change feeds cite it.

{
  "headline": "One line that answers the question.",
  "data": { "...": "the answer" },
  "sources": [
    { "url": "https://…", "fetched_at": "2026-10-12T04:10:00Z",
      "sha256": "…", "publisher": "…", "license": "public-by-law (45 CFR 180)" }
  ],
  "as_of": "2026-10-12T04:10:00Z",
  "confidence": 0.92,
  "method_version": "hospital.prices@1.3.0",
  "price_paid": { "amount": "0.02", "asset": "USDC", "network": "eip155:8453",
                  "rail": "x402", "tx": "0x…" },
  "notices": ["Posted rates, not a quote or advice. See /terms."],
  "view": "summary",
  "request_id": "…"
}

For agents

HTTP
x402 v2: the 402 carries PAYMENT-REQUIRED; pay with PAYMENT-SIGNATURE; the receipt is PAYMENT-RESPONSE.
Free tier
Some paid routes give 3 free calls a day per IP per vertical, with fewer rows. Over HTTP it is opt-in and needs no header: add ?free=1, open the route under /try/ (a page in a browser, JSON for an agent), or send Distill-Free-Tier: use; otherwise an unpaid call answers 402. An unpaid MCP tool call takes it unless _meta["distill/free-tier"] is "skip"; calls through Claude's connectors share one daily free allowance per family instead of the per-IP count.
Answer size
Free answers, /try/ pages and MCP calls give a short summary view within each route's token budget, led by a one-line headline; ?view=full gives every row.
MCP
https://data.spencermcw.com/mcp, streamable HTTP, stateless: the most-used tools, a free distill_status tool and prompts; https://data.spencermcw.com/mcp?profile=full lists one tool per route. Pay in _meta["x402/payment"], as @x402/mcp does.
Discovery
llms.txt, llms-full.txt, openapi.json, and the x402 Bazaar.
Account
None. No API key, no signup.

Disclaimers

Distill sells posted facts and computed aggregates. It is not medical, financial or tax advice, not a quote, and not a substitute for checking the source, which every answer names. Hospital prices are posted standard charges from hospital files; what you pay depends on your plan and care. Tax rates are as published by the state for the stated period. See the terms.