Relations of an address
Open the USDC contract in TraceFast →
The relations an address holds now: which implementation a proxy points at, which beacon it reads, who administers it, where an account has delegated, which bridge maps a token to its remote representation. A relation joins two addresses — a subject and an object. Read the address from either side:
direction=subject(default) — what the address points at;direction=object— who points at the address.
GET https://tracefast.xyz/api/v1/chains/1/entities/{address}/relations
| Parameter | In | Type | Notes |
|---|---|---|---|
address | path | string | 0x-prefixed, 40 hex characters, any case |
direction | query | string, optional | subject (default) or object |
attributeId | query | string, optional | narrow to one relation id, relation:name |
limit | query | integer, optional | 1..100, default 25 |
cursor | query | string, optional | nextCursor of the previous page |
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_relations 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
- Proven relations only. Every row is a relation the knowledge graph has proven. A relation missing from the answer is not proven — never "false".
- No names, no labels. A counterpart is an address. To learn what it is, ask its attributes.
- No total, in either direction. On the object side one implementation can
be pointed at by millions of proxies. The absence of
nextCursoris the only completeness statement the method makes. - Now only. For the relations at a past block, see relations at a block; for when each one started and ended, the relation history.
Response
200 application/json for the USDC proxy, here with
?attributeId=relation:proxy_uses_implementation:
{
"data": {
"chainId": 1,
"address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"direction": "subject",
"relations": [
{
"attributeId": "relation:proxy_uses_implementation",
"counterpart": "0x43506849d7c04f9138d1a2050bbf3a0c054402dd",
"result": "pass",
"referenceBlock": 18963716
}
]
},
"meta": {
"chain": "ethereum",
"timestamp": 1789047745695,
"cached": false,
"asOfBlock": 25924975,
"docs": "https://docs.tracefast.xyz/api/address-relations"
}
}Asked from the other side — the implementation 0x4350…02dd with
?direction=object — the same relation lists the USDC proxy as a counterpart,
next to every other proxy that points at that implementation.
data
| Field | Meaning |
|---|---|
chainId | 1, Ethereum mainnet |
address | the address, lowercase |
direction | the side the address is read on, echoed |
relations[] | the page, ordered by relation id, then by counterpart |
nextCursor | the cursor of the next page. Absent on the last page |
A relation
| Field | Meaning |
|---|---|
attributeId | the relation id, relation:name |
counterpart | the other end, lowercase: the object under direction=subject, the subject under direction=object |
result | pass means the relation is proven |
referenceBlock | the block the relation was evaluated at |
value | the relation's value, for relations that carry one; absent otherwise. A string — for some relations it holds JSON text, for example the bridge contract of a bridged-token relation |
Pagination
Pages are keyset, never offset. Pass nextCursor back as cursor, with the
same direction and attributeId, until nextCursor is absent. A cursor
issued for one direction or filter does not open under another — it answers
400 invalid_cursor, and the recovery is to start again from the first page.
See pagination.
Errors
| Status | code | When | details |
|---|---|---|---|
| 400 | bad_request | direction is not subject or object | reason: direction_invalid, direction |
| 400 | bad_request | attributeId is not a short identifier of letters, digits and :_.- | reason: attribute_id_invalid |
| 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 request | — |
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
- Relations of an address at a block — the same question at a past block
- Relation history of an address — when each relation started and ended
- Proof of one relation — the evidence behind a relation
- Implementations of a proxy contract — a proxy's implementations, read from the contract side
- Address counterparties — who an address transacts with, which is not the same as a relation
Last updated 22 Oct 2026, 08:06 UTC · verified against TraceFast v1.0.261 · Markdown