MWEBscanMWEBscan API

A free, read-only JSON API over the same engine the site uses. No key or sign-up for normal use.

All links and attributions are heuristic, not proof (public-chain inference only). See the methodology.

Need a higher limit? You have two paths: self-host (the whole stack is open-source under the AGPL, so your own instance is not subject to the public API rate limit), or email [email protected] with your use case and rough volume. Options include a raised per-key limit, bulk data exports, hosted/dedicated instances, or commercial (non-AGPL) terms.

Endpoints

Examples below are abbreviated; every response also includes "version". Field meanings (confidence, block_gap, candidate_count, privacy/risk scores) are defined in the methodology.

GET /api/health

Sync height and data freshness (how far the scanner has got, and how long ago the analysis last ran).

curl "https://mwebscan.com/api/health"
{
  "health": {
    "ok": true, "last_scanned_block": 2870431,
    "analysis_updated": 1733800000, "analysis_age_seconds": 540,
    "pegins": 51234, "pegouts": 48910
  },
  "version": "1"
}

GET /api/stats

Headline analysis counts (totals, linkable peg-outs, labelled addresses, scores...).

curl "https://mwebscan.com/api/stats"
{
  "stats": {
    "total_pegins": 51234, "total_pegouts": 48910,
    "linkable_pegouts": 312, "high_confidence_links": 88,
    "labeled_addresses": 64, "avg_privacy_score": 47.2,
    "high_risk_pegouts": 19
  },
  "version": "1"
}

GET /api/privacy?amount=<ltc>

amount: positive LTC value.

Wallet pre-flight check: how well a peg-in of this amount blends in (anonymity set + privacy score + advice). Amount only, so no address leaves the client.

curl "https://mwebscan.com/api/privacy?amount=1.0"
{
  "privacy": {
    "amount": 1.0, "rounded": 1.0,
    "rounded_set": 842, "exact_set": 137,
    "privacy_score": 71, "rating": "Excellent",
    "advice": "A very common amount; you blend into a large anonymity set."
  },
  "version": "1"
}

GET /api/recommendations

Live privacy guidance: best peg-in amounts right now, suggested wait before pegging out, and tips.

curl "https://mwebscan.com/api/recommendations"

GET /api/trace?q=<address|txid>

q: a Litecoin address, peg-in txid, or peg-out txid.  Optional format=csv.

Full one-hop trace across the MWEB hop: funders -> peg-in -> linked peg-outs -> destinations, with entity tags and confidences.

curl "https://mwebscan.com/api/trace?q=ltc1q..."
{
  "trace": {
    "query": "ltc1q...", "type": "address",
    "attribution": { "entity": "Binance", "category": "exchange", "via": "direct" },
    "pegins": [ { "txid": "d32a...", "amount": 64.50828331,
                  "links": [ { "pegout_txid": "ae02...", "confidence": 1.0,
                               "pegout_entity": null } ] } ],
    "pegouts": []
  },
  "version": "1"
}

GET /api/follow?q=<address>&depth=3

q: address.  depth: hops to follow (1-10, default 3).

Multi-hop "follow the money": chains repeated peg cycles together. Multiply the per-hop confidences for the chain total.

curl "https://mwebscan.com/api/follow?q=ltc1q...&depth=4"

GET /api/address?q=<address>

q: address.

Summary for an address: entity attribution plus peg-outs received and peg-ins funded.

curl "https://mwebscan.com/api/address?q=ltc1q..."

GET /api/links?min_confidence=0.5&limit=100

min_confidence: 0-1 (default 0.5).  limit: 1-500 (default 100).  Optional format=csv.

The round-trip links: peg-outs matched to earlier peg-ins, with confidence, AML risk and reasons.

curl "https://mwebscan.com/api/links?min_confidence=0.9"
{
  "min_confidence": 0.9, "count": 1,
  "links": [
    { "pegout_txid": "ae02...", "pegout_amount": 64.50821921, "pegout_entity": null,
      "pegin_txid": "d32a...", "pegin_amount": 64.50828331,
      "confidence": 1.0, "risk_score": 40, "block_gap": 1, "candidate_count": 1,
      "reasons": ["exact amount match", "1 candidate peg-in", "1 block after peg-in"] }
  ],
  "version": "1"
}

GET /api/pegin_amounts?limit=100

limit: 1-500 (default 100).  Optional format=csv.

Most common (rounded) peg-in amounts and their counts (the "blend in with the crowd" data).

curl "https://mwebscan.com/api/pegin_amounts?limit=50"

Wallet integration

For a privacy wallet, the right call is a pre-flight check that never sends a user's address. Query privacy with the amount only, before a peg-in:

// nudge the user toward a more private amount
const r = await fetch(`https://mwebscan.com/api/privacy?amount=${amt}`);
const { privacy } = await r.json();
if (privacy.privacy_score < 40) {
    warn(`This amount is easy to single out (score ${privacy.privacy_score}/100). ` +
         `Try a common rounded amount.`);
}

Even more privacy-preserving: fetch pegin_amounts and recommendations once, cache them, and evaluate locally, so no per-transaction request leaves the wallet at all. (You can also self-host the API so nothing touches a third party.)

Errors

JSON {"error": "...", "version": "1"} with an HTTP status: 400 (bad/missing params), 404 (unknown endpoint), 429 (rate limited), 503 (DB unavailable / analysis not yet run).

Live endpoint index (JSON)