API documentation / Документация API / API 文档
The public API is free, has no API-key requirement and accepts JSON. Limits: 20 checks per IP per minute, including cache hits. Response headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset; Retry-After on 429.
API бесплатный и не требует ключа: 20 проверок на IP в минуту, включая кэш. 剩余次数和重置时间由响应头提供。
POST /v1/check
curl -X POST https://cryptoaml.online/v1/check \
-H 'Content-Type: application/json' \
-d '{"chain":"ETH","address":"0x0000000000000000000000000000000000000000"}'
chain: BTC, ETH, TRON, or an empty string for automatic detection. ETH mixed-case addresses require a valid EIP-55 checksum; lowercase hexadecimal addresses are also accepted. Checks cover recent explorer pages, not a wallet’s complete history.
Response
chain, address, score (0–100 heuristic), level, analysis_status, matches, analyzed, sources, analyzed_at, database_version and cached. Score is not a probability of money laundering. A score of zero with unavailable data is not a clean verdict. Several sources can describe one primary record; matching lists are not added to the score.
| analysis_status | Meaning |
|---|---|
| match_found | Direct label / Прямое совпадение / 直接匹配 |
| exposure_found | Counterparty signal in the analyzed window |
| verified_clean | No matches in the available window and applicable sources; no guarantee |
| partially_analyzed | Limits, failed requests or unavailable sources restrict coverage |
| unable_to_analyze | The requested activity analysis was unavailable |
analyzed.assets gives separate denominators per asset: asset, decimals, total_raw, exposed_raw, exposure_percent, ambiguous. Raw amounts are integer strings; display amount = raw / 10^decimals. Legacy analyzed.exposure_percent is the maximum asset percentage, never a sum of BTC/ETH/token units. Hop-2 is a weaker relationship through an intermediary, not proof that the same funds moved.
GET /v1/stats
{"total":22360,"last_updated":"2026-10-09"}Illustrative values. total counts distinct (chain,address); EVM is a network-uncertain scope.
GET /v1/sources?chain=ETH
BTC, ETH or TRON; ETH by default. Returns status, chain, checked_at and sources. Source states: checked, unavailable, stale, not_applicable, disabled. Wallet reports can also mark an oracle skipped when a direct match makes the call unnecessary. A cached health probe is independent of a wallet result.
Errors
{"error":"address is not valid for chain ETH","code":"invalid_checksum","request_id":"server-generated-id","hint":"Verify the EIP-55 checksum or use confirmed lowercase."}
400 validation, 401 authentication on account endpoints, 404 missing endpoint, 405 method, 409 conflict, 429 rate limit, 500 internal error, 503 unavailable, 504 timeout. X-Request-ID correlates with server logs. Retry-After gives a conservative wait on rate limits.
Cache and monitoring
Complete reports live for up to six hours, bounded by source freshness. Incomplete reports live for 30 seconds. Cache identity changes with database version and ETH explorer configuration; cached=true denotes reuse. GET /health returns 503 when infrastructure or any applicable enabled source is unhealthy, including Tether ETH/TRON, Circle and the oracle. GET /health?scope=core lists the same checks but returns 503 only for database, cache or configuration failures. Failures retain previous labels.