Blacklist events about one address
Check this address in TraceFast →
Every blacklist event any issuer contract recorded about one address, newest
first: the address was listed (add), unlisted (remove), or its funds were
destroyed or frozen (enforce). Each event carries the issuer, its authority
tier and the transaction that emitted it. For the summary per issuer — who
lists the address now — see which issuer contracts list one address.
GET https://tracefast.xyz/api/v1/chains/1/risk/blacklists/{address}/events
| Parameter | In | Type | Notes |
|---|---|---|---|
address | path | string | 0x-prefixed, 40 hex characters, any case |
issuerContract | query | string, optional | only events emitted by this issuer contract, 0x-prefixed |
action | query | string, optional | only events of this kind: add, remove or enforce |
limit | query | integer, optional | 1..100, default 25 |
cursor | query | string, optional | nextCursor of the previous page |
Access — an API key on the Investigation plan or higher (plans), or no key at all: pay per call with x402 at the same path on https://mpp.tracefast.xyz/api/v1, at the price its 402 states. As a tool for AI agents: get_blacklist_events on the MCP server. Stable — see stability.
chains/1 is a literal: the method serves Ethereum mainnet data. Other chain
ids answer 404 chain_not_supported. There are no other parameters — an
unknown one is refused rather than ignored.
What it covers, and what it does not
- On-chain facts only, emitted by the issuer contracts themselves. No external sanctions list is consulted, and no event here is a legal or sanctions determination.
- Weigh every event by its issuer. Any token can ship a blacklist function;
an event from an
arbitrary_tokenis that token's own decision. - Identity-blind — issuers appear as contract addresses, never as organisation names.
meta.asOfBlockis the reach of the blacklist history — the last block the blacklist history covers. It trails the chain tip by design, so a newer event may not be listed yet. The method carries nometa.coverage.- An empty page is an answer — no issuer recorded an event about the
address up to
meta.asOfBlock.
Response
200 application/json, here with ?limit=3 — the address has two events, so
there is no nextCursor:
{
"data": {
"chainId": 1,
"address": "0x8f882eb5e9a17220a21ec14e09b2fcf7b75d204d",
"events": [
{
"blockNumber": 25890354,
"logIndex": 1061,
"timestamp": 1788361103,
"txHash": "0xb6dd8173fc2a6bd34ca35752e8ec5431f6fc67c3724868cfef362b2bc5e07733",
"issuerContract": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"authorityTier": "recognized_issuer",
"action": "enforce",
"statusEffect": "enforcement",
"eventName": "DestroyedBlackFunds"
},
{
"blockNumber": 24184326,
"logIndex": 541,
"timestamp": 1767807239,
"txHash": "0xeb6d5edc63a62c421f2d87f8f3b25e58aba9b6c92298378fdf8566960e111b92",
"issuerContract": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"authorityTier": "recognized_issuer",
"action": "add",
"statusEffect": "membership",
"eventName": "AddedBlackList"
}
]
},
"meta": {
"chain": "ethereum",
"timestamp": 1789063641427,
"cached": false,
"asOfBlock": 25924174,
"docs": "https://docs.tracefast.xyz/api/risk-blacklist-events"
}
}data
| Field | Meaning |
|---|---|
chainId | 1 |
address | the address asked about, lowercase |
events[] | at most limit events, newest first. Empty when no issuer ever recorded one |
nextCursor | cursor of the next page; absent on the last page |
An event
| Field | Meaning |
|---|---|
blockNumber, logIndex | where the event sits. Together they identify it — one transaction can emit the same event twice |
timestamp | Unix time of the block, seconds |
txHash | the transaction that emitted the event, lowercase |
issuerContract | the contract that emitted it, lowercase |
authorityTier | recognized_issuer, arbitrary_token or unknown — see authority tiers. Absent when it cannot be stated |
action | add — listed; remove — unlisted; enforce — funds destroyed or frozen |
statusEffect | membership for add and remove, enforcement for enforce |
eventName | the event's name as the issuer's contract declares it: AddedBlackList, Blacklisted, DestroyedBlackFunds, FundsFrozen, … |
Pagination
Pages are keyset, newest first. While nextCursor is present, pass it back as
cursor with the same issuerContract and action; it is absent on the
last page. A cursor reused with other filters answers 400 invalid_cursor —
restart from the first page. See pagination.
Errors
| Status | code | When | details |
|---|---|---|---|
| 400 | bad_request | issuerContract is not a 0x-prefixed 40-hex address | reason: issuer_contract_invalid, issuerContract |
| 400 | bad_request | action is outside add / remove / enforce | reason: action_invalid, action |
| 400 | bad_request | limit outside 1..100 | reason: limit_out_of_range, limit, maxLimit: 100 |
| 400 | invalid_cursor | the cursor is not valid for this address and these filters | — |
| 503 | service_unavailable | the reach of the blacklist history could not be read, so an empty page could not be told from a gap. Retry with backoff | — |
Malformed input, unknown parameters and the key check's 401/403/429 are the same for every method — see conventions and API keys.
Related pages
- Which issuer contracts list one address — the summary per issuer
- Blacklisted — the blacklist feed across all issuers, in the app
- Transaction events — the full event log of the transaction behind an event
- Token transfers of an address — what the address moved before and after
Last updated 22 Oct 2026, 08:06 UTC · verified against TraceFast v1.0.261 · Markdown