Attributes of an address
See these facts on an entity page →
The facts proven about one Ethereum address — what kind of account it is, how it has been present on-chain, what it is known to be — each with the block it was observed at. The first half of this page is the method; the second half is the dictionary for reading its answer.
GET https://tracefast.xyz/api/v1/chains/1/entities/{address}/attributes
| Parameter | In | Type | Notes |
|---|---|---|---|
address | path | string | 0x-prefixed, 40 hex characters, any case |
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 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 is refused rather than ignored. For the attributes an address held
at a past block, see attributes at a block.
Response
200 application/json:
{
"data": {
"chainId": 1,
"entity": "0x4838b106fce9647bdf1e7877bf73ce8b0bad5f97",
"attributes": [
"address_nature:account_state_ever_touched",
"address_nature:eoa_currently",
"address_nature:has_onchain_existence",
"address_nature:was_eip7702_delegated",
"address_presence:call_callee_ever",
"address_presence:call_caller_ever",
"address_presence:token_transfer_recipient_ever",
"address_presence:token_transfer_sender_ever",
"address_presence:tx_recipient_ever",
"address_presence:tx_sender_ever",
"derived:account_type",
"derived:code_history_notable",
"derived:controller"
],
"attributeDetails": [
{ "attributeId": "address_nature:eoa_currently", "result": "pass", "referenceBlock": 16983719 }
],
"typeHints": { "source": "…" }
},
"meta": { "chain": "ethereum", "timestamp": 1788346425445, "cached": false }
}attributes— the ids of every attribute that holds for the address. Absence means "not proven", not "false".attributeDetails— one entry per id withresultandreferenceBlock, the block the fact was observed at.typeHints— which source answered, and the provisional type hints used when the knowledge graph has not reached the address yet. SeetypeHintsbelow.
Errors
| Status | code | When |
|---|---|---|
| 400 | bad_request | malformed address, or an unknown query parameter |
| 404 | chain_not_supported | a chain id other than 1 |
Malformed input, unknown parameters and the key check's 401/403/429 are
the same for every method — see conventions and
API keys. Over x402, a 402 is the
payment challenge or a rejected payment — see Paying with x402.
The rest of this page is the dictionary. The finished fields most consumers read first — account type, control model, DeFi role — are catalogued in derived address attributes.
How to read an entry
Every id has the shape family:fact. Ids are stable: an id that appears in a
response keeps its meaning, and new ids are added over time rather than
redefined.
attributes is the flat list of ids that hold for the address.
attributeDetails carries one entry per id:
| Field | Meaning |
|---|---|
attributeId | the id |
result | pass — the fact holds for the address |
referenceBlock | the block the fact was observed at — where the evaluation looked, not when the fact became true. Per attribute, not per response: a token can carry one block on its account-nature ids and a much later one on its behavioural ids |
value | present only on ids that carry one: a JSON string for the categorical projections, or a JSON array naming the facts an umbrella projection was assembled from |
Two rules that govern every id
- A fact is listed only when it was proven. Absence means "not proven",
never "false" — an address whose response carries no
derived:privileged_controlsis not thereby an address that has no privileged surface; it is one for which none was proven. - A fact claims exactly what it says. A projection about a surface (what the code can do) is never the same statement as one about an observation (what actually happened), and the two are never merged into one attribute.
The two layers
Proven facts are the base layer: each is established for an address by its own evaluation over chain data. They arrive in the response grouped by subject — the nature of the account, where it has been present on-chain, what asset it is, how the contract is put together, which interfaces it presents, which privileged capabilities exist, which protocol roles it holds, and how it is related to other addresses. Their evaluation is our implementation detail and is not published: what a consumer contracts on is the layer above.
Derived attributes are folds over those proven facts — one finished field
instead of an OR over a dozen ids: derived:account_type,
derived:control_model, derived:defi_role, derived:smart_account and the
rest. They are computed once, on our side, and versioned with the data.
The catalogue is here, with the values of every
enumerated projection.
Both layers appear in the same attributes list, so a response can be filtered
by the derived: prefix when only the finished fields are wanted.
typeHints
Not every address has been reached by the graph yet. typeHints says which
source answered:
| Field | Meaning |
|---|---|
source | which source answered: the knowledge graph, a provisional hint (hint), or neither (none) |
hints | the provisional type hints, e.g. contract, fungible_token, nft_collection, multi_token_collection, eoa. Empty unless source is hint |
evidenceBlock | the newest block behind those hints — how fresh the guess is |
Hints are positive and non-exclusive: a freshly deployed token carries both
contract and fungible_token. A hint is a guess with evidence behind it, not
a proven attribute — branch on hints being non-empty rather than on the
absence of an attribute id.
Related pages
- API — the method that returns these attributes
- Derived address attributes — the finished fields, with their values
- Paying with x402 — how to pay for a call
- Entity Page — the same facts, read in the app
Last updated 22 Oct 2026, 08:06 UTC · verified against TraceFast v1.0.261 · Markdown