Attributes of an address at a block
Open this address in TraceFast →
The attributes an address held at the end of one block, each with the window of blocks it held for. Use it to ask "was this true then?" in the same vocabulary the current attributes use for "is this true now?".
GET https://tracefast.xyz/api/v1/chains/1/entities/{address}/attributes/at-block?block={block}
| Parameter | In | Type | Notes |
|---|---|---|---|
address | path | string | 0x-prefixed, 40 hex characters, any case |
block | query | integer, required | the block to answer about — the state at the end of it |
Access — an API key on the Intelligence 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_entity_attributes_at_block on the MCP server. Stable — see stability.
chains/1 is a literal: other chain ids answer 404 chain_not_supported. An
unknown parameter is refused rather than ignored.
What it covers, and what it does not
- Only what
coveredFamiliesandcoveredAttributeIdsname. The history is built for some attribute families whole, and for some single ids of other families. An attribute is covered when its family is incoveredFamiliesor its id is incoveredAttributeIds. Any other attribute is not listed whether or not it held — for those, only the current attributes can answer. - For a covered attribute, absence is an answer. With
addressKnown: true, a covered attribute missing fromintervalsdid not hold at that block. For an attribute covered by neither field, absence says nothing. blockis required. Without it there is no question; "what is true now" is the current attributes method.- A block past the covered history is refused with the highest block that can be answered, never answered with the latest state.
Response
200 application/json, here with ?block=25000000:
{
"data": {
"chainId": 1,
"address": "0x4838b106fce9647bdf1e7877bf73ce8b0bad5f97",
"block": 25000000,
"coverageBlock": 26246351,
"addressKnown": true,
"intervals": [
{ "attributeId": "address_nature:account_state_ever_touched", "startBlock": 16976894 },
{ "attributeId": "address_nature:eoa_currently", "startBlock": 16976894, "endBlock": 25251272 },
{ "attributeId": "address_nature:has_onchain_existence", "startBlock": 16976894 },
{ "attributeId": "address_presence:call_callee_ever", "startBlock": 16976894 },
{ "attributeId": "address_presence:call_caller_ever", "startBlock": 16983719 },
{ "attributeId": "address_presence:token_transfer_recipient_ever", "startBlock": 16983730 },
{ "attributeId": "address_presence:token_transfer_sender_ever", "startBlock": 16983759 },
{ "attributeId": "address_presence:tx_recipient_ever", "startBlock": 16976894 },
{ "attributeId": "address_presence:tx_sender_ever", "startBlock": 16983719 }
],
"coveredFamilies": ["address_nature", "address_presence"],
"coveredAttributeIds": [
"architecture:proxy",
"architecture:beacon_proxy",
"standard:erc20_interface",
"capability:mint_surface_present",
"dex:pool"
]
},
"meta": {
"chain": "ethereum",
"timestamp": 1792654704709,
"cached": false,
"asOfBlock": 26246351,
"docs": "https://docs.tracefast.xyz/api/address-attributes-at-block"
}
}At block 25,000,000 the address was still a plain externally owned account:
address_nature:eoa_currently held from 16,976,894 until 25,251,272, when the
address was delegated under EIP-7702 and the interval closed.
coveredAttributeIds is shortened here: this answer named 50 single ids, from
architecture:* and standard:* interfaces to dex:* and lending:* roles.
None of them is in intervals: none held for this address at that block.
data
| Field | Meaning |
|---|---|
chainId | 1, Ethereum mainnet |
address | the address, lowercase |
block | the block you asked about, echoed so a forwarded answer cannot be mistaken for another block's |
coverageBlock | the highest block the history has been computed up to. block is at or below it |
addressKnown | false when the history does not know the address at all — a different answer from an empty intervals, which means "known, no covered attribute held at this block". Absent when the history does not state it |
intervals[] | the attributes that held at block, each with its window |
coveredFamilies | the attribute families the history is built for, whole |
coveredAttributeIds | single attribute ids with a history although their family is not in coveredFamilies. An attribute covered by neither field is never listed here |
An interval
| Field | Meaning |
|---|---|
attributeId | family:name — the same ids as the current attributes, explained in the dictionary |
startBlock | the first block the attribute held at |
endBlock | the last block it held at. Absent when the interval was still open at the end of the covered history — an end that was not observed is not stated |
value | the attribute's value over the interval, for attributes that carry one; absent otherwise |
The ids that describe a contract's code — the standard:* interfaces,
capability:*_surface_present, architecture:* and the like — follow the code
the address executes. Their intervals are cut at each change of that code and
not merged, so two adjacent intervals of one id mean it held through a code
change. At one block there is only ever one.
An interval can end after block: it is listed because it held at block,
and its full window is shown.
Errors
| Status | code | When | details |
|---|---|---|---|
| 400 | bad_request | block absent | reason: block_required |
| 400 | bad_request | block is 0 or not a number | reason: block_not_positive, block |
| 422 | block_not_available | block is past the covered history | reason: block_not_available, maxAvailableBlock |
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
- Address attribute dictionary — what each attribute id means
- Attribute history of an address — every interval, not only those at one block
- Proof of one attribute — the evidence behind an attribute
- Relations of an address at a block — the same question for relations
Last updated 22 Oct 2026, 08:06 UTC · verified against TraceFast v1.0.261 · Markdown