allow. challenge. block.
monapi is a self-hosted decision API: IP, domain or email in, explainable decision out — with score, signals and evidence. No US service, no third-country transfer, no black box.
{
"decision": "challenge",
"score": 40,
"confidence": 0.7,
"profile": "checkout",
"signals": [
{
"id": "feed:tor_exits:0",
"category": "anonymizer",
"weight": 40,
"source": "tor_exits",
"severity": "high"
}
],
"enrichment": {
"asn": 60729,
"asn_organization": "TORSERVERS-NET",
"country_iso": "DE",
"hostname": "berlin01.tor-exit.artikel10.org"
},
"timing_ms": { "total": 96 }
}Thresholds and weights are policy, not physics — configurable per profile.
Two lines, not a hundred.
The API is plain HTTP. The packages exist so you skip the timeout, fail-open and type handling every integrator writes from scratch — and so an agent can use the same decision as a tool, including one that explains its own verdicts.
const { decision, score, signals } =
await checkEmail("kontakt@gamil.com", "lead")
// challenge — email:domain_typo, did_you_mean: gmail.comIP addresses are personal data.
Every request to IPQualityScore, Sift or Castle is a third-country transfer — with SCC paperwork and a Transfer Impact Assessment. monapi runs on your infrastructure: feeds and the GeoIP database are held locally, nothing leaves at request time. The topic is settled, not managed.
Built and operated by projektsued GmbH in Kirchheim near Munich, Germany. We build and run systems like this for others, too: monitoring, anti-abuse, platform operations.