MWEBscan API
A free, read-only JSON API over the same engine the site uses. No key or sign-up for normal use.
- Base URL:
https://mwebscan.com/api(/api.phpalso works if a deployment lacks URL rewriting) - Routing: path -
/api/<endpoint>(e.g./api/stats), or query -?endpoint=<name>. - Format: JSON by default; add
&format=csvtotrace,links,pegin_amountsto download a CSV. - Rate limit: ~120 requests/minute per IP (HTTP
429if exceeded). Need more? It's open-source - self-host it. Use is subject to the Terms. - CORS: open (
Access-Control-Allow-Origin: *), so it works from the browser. - Attribution: if you use this data in a public product, please credit MWEBscan with a link to
mwebscan.com.
All links and attributions are heuristic, not proof - public-chain inference only. See the methodology.
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 - 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 - then 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).