Hazard API
Risk scoring that admits
when it doesn't know.
Real-time, behavioral risk for pump.fun Mayhem coins — the agent selling into the crowd, exit liquidity draining, a rug fingerprint forming. Built for wallets, aggregators and trading tools that want to warn their users before the candle does.
Every other risk API returns a number. When it hasn't seen a token, it returns zero — which your users read as "safe." That is the single most dangerous thing a risk feed can do.
Hazard returns HTTP 503 for "unknown," never a reassuring 0.
A naive integration — if (resp.ok) allow() — is protected by default, because
"we can't see this token" arrives as a failure your code already handles, not a green light. Unknown is
never safe, and the status code enforces it.
Behavioral, not static
Not "is the contract a scam." We decode the agent's live trades off the bonding curve and flag a distribution the moment it starts.
Sub-second, self-provisioning
Query a mint and it enters the scan set. First
call may be unavailable; subsequent calls carry live data.
Honest about coverage
Each answer states live,
stale, or unavailable — you always know how much to
trust it.
Authentication
Every request carries an API key, as a header or bearer token. Keys are issued on request (see below) and rate-limited per key.
# header curl https://mememoon.fun/api/hazard/<MINT> \ -H "X-API-Key: mmh_your_key_here" # or bearer curl https://mememoon.fun/api/hazard/<MINT> \ -H "Authorization: Bearer mmh_your_key_here"
Endpoints
Public, no key. Is the feed trustworthy right now? Returns 200 when
serving, 503 when blind. Poll this to gate everything else.
// 200 — serving { "serving": true, "feed_state": "ok", "buffered_signals": 214 } // 503 — blind. Every /api/hazard query will return 503 too. { "serving": false, "feed_state": "blind", "coverage_note": "A 503 means UNKNOWN, never SAFE." }
Score one mint. hazard is 0–100, or null
when coverage is unavailable — in which case the response is a
503, never a 200 with a zero.
# request curl https://mememoon.fun/api/hazard/Amz1kR4t…pump -H "X-API-Key: mmh_…" // 200 — a real answer { "mint": "Amz1kR4t…pump", "coverage": "live", // live | stale | unavailable "hazard": 86.4, // 0–100, or null if unavailable "band": "critical", // clear | elevated | high | critical "reasons": ["EXIT_WARNING (CRITICAL, 4s ago)", "WHALE_DUMP (WARNING, 40s ago)"], "newest_signal_age_sec": 4.0, "feed_state": "ok" } // 503 — unknown. NOT a zero. Your `if (resp.ok)` guard blocks it for free. { "mint": "…", "coverage": "unavailable", "hazard": null, "detail": "no current view of this mint — this is NOT an assertion it is safe" }
Screen a portfolio in one call — up to 50 mints. Always 200 with
per-item coverage, so a partial answer is useful and you see exactly
which items are unknown.
curl -X POST https://mememoon.fun/api/hazard/batch -H "X-API-Key: mmh_…" \ -H "Content-Type: application/json" \ -d '{"mints":["Amz1…pump","23ED…pump"]}' { "count": 2, "known": 1, "unavailable": 1, "results": [ /* one HazardResult per mint */ ] }
Rate limits
Per-key sliding window. Exceed it and you get 429 with a
Retry-After header. Default budgets are generous; production integrations get a
tier sized to their traffic.
Why integrate this instead of a static scanner
Static scanners describe a contract
LP locked, mint renounced, holder spread. All true at launch, all useless once the agent starts selling into your users.
Hazard describes what's happening now
The distribution, the exit collapse, the whale exit — decoded live from on-chain behavior, in seconds.
Built from real losses
The detection is derived from live-fire Solana microstructure — patterns that took real capital to learn and can't be scraped.
It never lies to your users
The 503 contract means integrating Hazard cannot make your product tell someone a token is safe when you simply couldn't see it.
Request access
Keys are issued to integrators — wallets, aggregators, trading tools, risk desks. Tell us what you're building and expected volume, and we'll size a key and a rate tier. Design-partner terms available for early integrations.
Status is public and machine-readable at
/api/hazard/health — check our uptime before you commit. We publish our own
outages; nobody else in this category does.