Skip to content
TraceFast Docs

Which issuer contracts list one address

Check this address in TraceFast →

Some token contracts keep an on-chain blacklist: an admin function adds an address, after which it can no longer move that token. This method answers, for one address, which of those contracts have ever listed it — whether each still does, when it happened and how often — and, separately, which ones have gone further and destroyed or frozen its funds.

GET https://tracefast.xyz/api/v1/chains/1/risk/blacklists/{address}
ParameterInTypeNotes
addresspathstring0x-prefixed, 40 hex characters, any case

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_status 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. The method takes no query parameters — an unknown one, limit included, is refused rather than ignored.

What it covers, and what it does not

  • On-chain facts only. Every row is built from events the issuer contracts themselves emitted — list, unlist, destroy or freeze. No external sanctions list is consulted, and the answer is not a legal or sanctions determination.
  • No single verdict. There is deliberately no blacklisted: true. A listing is one issuer's decision about its own token; authorityTier says how much weight that issuer carries, and you decide what the combination means.
  • Most blacklisting contracts are not recognized issuers. Any token can ship a blacklist function. A listing by an arbitrary_token is that token's own decision and says nothing beyond it.
  • Membership and enforcement are separate facts. An enforcement neither lists nor unlists; an address can be listed without ever being enforced against, and the two lists are answered independently.
  • Identity-blind. Issuers are named by contract address and, where the contract declares one, its token symbol — never by an organisation name.
  • meta.asOfBlock is the reach of the blacklist history — the last block the blacklist history covers. It trails the chain tip by design, so an event after that block is not in the answer yet. The method carries no meta.coverage.
  • Empty lists are an answer — no issuer recorded anything about the address up to meta.asOfBlock.

Response

200 application/json:

{
  "data": {
    "chainId": 1,
    "address": "0x8f882eb5e9a17220a21ec14e09b2fcf7b75d204d",
    "listedBy": [
      {
        "issuerContract": "0xdac17f958d2ee523a2206206994597c13d831ec7",
        "tokenSymbol": "USDT",
        "authorityTier": "recognized_issuer",
        "listed": true,
        "firstListedBlock": 24184326,
        "lastAction": "add",
        "lastEventBlock": 25890354,
        "lastEventTimestamp": 1788361103,
        "lastEventTxHash": "0xb6dd8173fc2a6bd34ca35752e8ec5431f6fc67c3724868cfef362b2bc5e07733",
        "lastEventName": "DestroyedBlackFunds",
        "lastEventKind": "enforcement",
        "listCount": 1,
        "unlistCount": 0
      }
    ],
    "enforcement": [
      {
        "issuerContract": "0xdac17f958d2ee523a2206206994597c13d831ec7",
        "tokenSymbol": "USDT",
        "authorityTier": "recognized_issuer",
        "count": 1,
        "last": {
          "blockNumber": 25890354,
          "timestamp": 1788361103,
          "txHash": "0xb6dd8173fc2a6bd34ca35752e8ec5431f6fc67c3724868cfef362b2bc5e07733",
          "eventName": "DestroyedBlackFunds"
        }
      }
    ]
  },
  "meta": {
    "chain": "ethereum",
    "timestamp": 1789063641420,
    "cached": true,
    "asOfBlock": 25924174,
    "docs": "https://docs.tracefast.xyz/api/risk-blacklist-status"
  }
}

Here USDT listed the address at block 24184326 and, later, destroyed its funds — so the listing row's latest event is the enforcement, while lastAction still reports the last membership change.

data

FieldMeaning
chainId1
addressthe address asked about, lowercase
listedBy[]every issuer contract that ever listed the address, one row each, currently listed or not. Empty when none ever did
enforcement[]every issuer that destroyed or froze the address's funds, one row each. Empty when none did

A listedBy row

FieldMeaning
issuerContractthe contract that keeps the list, lowercase — usually a token contract with a freeze or blacklist function
tokenSymbolthe issuer's token symbol, when it is a token contract that declares one; absent otherwise. Declared by the contract, not verified
authorityTierrecognized_issuer — a curated stablecoin or asset issuer; arbitrary_token — any other token contract that emits blacklist events; unknown — a contract nothing further is known about
listedtrue while the issuer's list holds the address now; false after the issuer removed it
firstListedBlockthe block the issuer first listed the address; absent when it cannot be stated
lastActionthe issuer's latest membership change: add or remove
lastEventBlock, lastEventTimestamp, lastEventTxHashthe issuer's most recent event about the address of any kind — block, Unix seconds, transaction
lastEventNamethat event's name as the contract declares it: AddedBlackList, Blacklisted, DestroyedBlackFunds, … Issuers name the same action differently
lastEventKindmembership or enforcement — what that latest event was
listCount, unlistCounthow many times the issuer listed the address, and removed it again

An enforcement row

FieldMeaning
issuerContract, tokenSymbol, authorityTieras on listedBy
counthow many enforcement events the issuer recorded against the address
lastthe most recent enforcement — blockNumber, timestamp, txHash, eventName (DestroyedBlackFunds, FundsFrozen, …). Present only when it is also the issuer's most recent event about the address of any kind; every enforcement is listed by blacklist events

Errors

StatuscodeWhendetails
400bad_requesta malformed address, or any query parameter — the method takes nonereason: address_invalid or unknown_parameter
503service_unavailablethe reach of the blacklist history could not be read, so an empty answer 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.


Last updated 22 Oct 2026, 08:06 UTC · verified against TraceFast v1.0.261 · Markdown