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.

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.

The sales-tax rate at a US ZIP+4, ZIP or street address in a Streamlined Sales Tax state

$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
MCP tool
tax_sales_rate
Method
tax.sales_rate@1.0.0
Freshness
quarterly
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: GET /v1/tax/sales-rate?zip=98101-3143&date=2026-10-19 answers 402 with the payment requirements; pay with any x402 client.

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
  }
}

Sales-tax rates for up to 100 US locations in one call (Streamlined Sales Tax states)

$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
MCP tool
tax_sales_rate_batch
Method
tax.sales_rate@1.0.0
Freshness
quarterly
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"
      }
    }
  ]
}

Quarterly sales-tax rate and boundary changes in the Streamlined Sales Tax states

$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
MCP tool
tax_changes
Method
tax.changes@1.0.0
Freshness
quarterly
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: GET /v1/tax/changes?state=WA&entity=rate&limit=1 answers 402 with the payment requirements; pay with any x402 client.

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 weekly change feed. 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.

Posted hospital prices for one billing code near a US ZIP code or point

$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
MCP tool
hospital_prices
Method
hospital.prices@1.1.0
Freshness
weekly
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: 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.

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"
    }
  }
}

One billing code across up to 10 named hospitals, one normalized row each

$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
MCP tool
hospital_compare
Method
hospital.compare@1.1.0
Freshness
weekly
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: GET /v1/hospital/compare?code=470&hospitals=co-060001%2Cco-061323&payer=aetna answers 402 with the payment requirements; pay with any x402 client.

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": []
}

Negotiated prices for one billing code in one area, per canonical payer and plan type

$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
MCP tool
hospital_payers
Method
hospital.payers@1.1.0
Freshness
weekly
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: 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.

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
    }
  ]
}

Hospital price and file changes, as a paged feed

$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
MCP tool
hospital_changes
Method
hospital.changes@1.1.0
Freshness
weekly
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: GET /v1/hospital/changes?limit=1 answers 402 with the payment requirements; pay with any x402 client.

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

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.

{
  "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."],
  "request_id": "…"
}

For agents

HTTP
x402 v2: the 402 carries PAYMENT-REQUIRED; pay with PAYMENT-SIGNATURE; the receipt is PAYMENT-RESPONSE.
MCP
https://data.spencermcw.com/mcp, streamable HTTP, stateless, 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.