Attribute history of an address
Open this address in TraceFast →
Every attribute interval an address has held, oldest first: when it first held state, when it became a contract, when its code was removed, when it was delegated. Each interval carries the block window it held for.
GET https://tracefast.xyz/api/v1/chains/1/entities/{address}/attributes/history
| Parameter | In | Type | Notes |
|---|---|---|---|
address | path | string | 0x-prefixed, 40 hex characters, any case |
limit | query | integer, optional | 1..500, default 100 |
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_attribute_history 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 the families in
coveredFamilies. An empty or short timeline says nothing about attributes of other families. For the full current set, ask the current attributes. - One call, no cursor. A whole timeline is a few hundred intervals on the
busiest addresses, so the method returns it in one answer up to
limit.truncated: truesays the cap cut it — what you got is a prefix of the history, not all of it. Ask again with a higherlimit. - Absence means "not proven", never "false".
Response
200 application/json, here with ?limit=3:
{
"data": {
"chainId": 1,
"address": "0x4838b106fce9647bdf1e7877bf73ce8b0bad5f97",
"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 }
],
"coveredFamilies": ["address_nature", "address_presence"],
"truncated": true
},
"meta": {
"chain": "ethereum",
"timestamp": 1789047669326,
"cached": false,
"asOfBlock": 25924843,
"docs": "https://docs.tracefast.xyz/api/address-attribute-history"
}
}data
| Field | Meaning |
|---|---|
chainId | 1, Ethereum mainnet |
address | the address, lowercase |
intervals[] | ascending by startBlock, then by attribute id |
coveredFamilies | the attribute families the history is built for |
truncated | true when the timeline was cut at limit |
An interval
| Field | Meaning |
|---|---|
attributeId | family:name, 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 |
value | the attribute's value over the interval, for attributes that carry one; absent otherwise |
The same attribute can appear more than once: an address can become a contract, lose its code and become one again. Each stretch is its own interval.
meta.asOfBlock is the block the history has been computed up to. An interval
without endBlock was still open there.
Errors
| Status | code | When | details |
|---|---|---|---|
| 400 | bad_request | limit outside 1..500 | reason: limit_out_of_range, limit, maxLimit: 500 |
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
- Attributes of an address at a block — one block, not the whole timeline
- Proof of one attribute — the evidence behind an attribute
- Relation history of an address — the same timeline for relations
Last updated 22 Oct 2026, 08:06 UTC · verified against TraceFast v1.0.261 · Markdown