{"components":{"schemas":{"AttributeDetail":{"description":"Evaluation detail of one attribute.","properties":{"attributeId":{"description":"Attribute id, `family:name`.","type":"string"},"referenceBlock":{"description":"Block height at which the attribute was evaluated. Per attribute: different\nattributes of the same address can be proven at different heights.","format":"int64","type":"integer"},"result":{"description":"Evaluation result. `pass` means the attribute is proven for this address.","type":"string"}},"required":["attributeId","result","referenceBlock"],"type":"object"},"AttributeHistory":{"description":"Every attribute interval an address has held, oldest first.","properties":{"address":{"description":"The address, lowercase and `0x`-prefixed.","type":"string"},"chainId":{"description":"Chain id the facts are about. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"coveredFamilies":{"description":"Attribute families the history is built for. An empty or short timeline says\nnothing about attributes of other families.","items":{"type":"string"},"type":"array"},"intervals":{"description":"Intervals in ascending order of `startBlock`, then attribute id. An interval with\nno `endBlock` was still open at the end of the covered history.","items":{"$ref":"#/components/schemas/AttributeInterval"},"type":"array"},"truncated":{"description":"`true` when the timeline was cut at `limit`: what is listed is a prefix of the\naddress's history, not the whole of it.","type":"boolean"}},"required":["chainId","address","intervals","coveredFamilies","truncated"],"type":"object"},"AttributeHistoryResponse":{"description":"Response of the address-attribute-history method.","properties":{"data":{"$ref":"#/components/schemas/AttributeHistory"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"AttributeInterval":{"description":"One attribute and the block window it held for.","properties":{"attributeId":{"description":"Attribute id, `family:name` — the same vocabulary as the current attributes, which\nis what makes \"was it true then\" comparable with \"is it true now\".","type":"string"},"endBlock":{"description":"Last block the attribute held at. Absent when the interval was still open at the\nend of the covered history: an end that was not observed is not stated.","format":"int64","type":["integer","null"]},"startBlock":{"description":"First block the attribute held at.","format":"int64","type":"integer"},"value":{"description":"The attribute's value over the interval, for attributes that carry one.","type":["string","null"]}},"required":["attributeId","startBlock"],"type":"object"},"AttributesAtBlock":{"description":"The attributes an address held at one block.\n\nAnswered from the interval history, which covers the families listed in\n`coveredFamilies` only. An attribute of another family is never listed here, whether or\nnot it held — compare with the current attributes method for those.","properties":{"address":{"description":"The address, lowercase and `0x`-prefixed.","type":"string"},"addressKnown":{"description":"`false` when the address is unknown to the history altogether — a different answer\nfrom an empty `intervals` (\"known, nothing proven at this block\"). Absent when the\nhistory does not state it.","type":["boolean","null"]},"block":{"description":"The block the question was asked about, echoed so a forwarded answer cannot be\nmistaken for another block's.","format":"int64","minimum":0,"type":"integer"},"chainId":{"description":"Chain id the facts are about. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"coverageBlock":{"description":"The highest block the history has been computed up to. `block` is at or below it;\na question past it is refused with `block_not_available`.","format":"int64","minimum":0,"type":"integer"},"coveredFamilies":{"description":"Attribute families the history is built for. An attribute outside these families\nis not listed here whether or not it held.","items":{"type":"string"},"type":"array"},"intervals":{"description":"The attributes that held at `block`, each with its window.","items":{"$ref":"#/components/schemas/AttributeInterval"},"type":"array"}},"required":["chainId","address","block","coverageBlock","intervals","coveredFamilies"],"type":"object"},"AttributesAtBlockResponse":{"description":"Response of the address-attributes-at-block method.","properties":{"data":{"$ref":"#/components/schemas/AttributesAtBlock"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"BalanceBasis":{"description":"How balances are computed.","enum":["contract_storage"],"type":"string"},"BalanceWindow":{"description":"The block a balance answer is true at.","properties":{"asOfBlock":{"description":"The block the answer is true at — the state at the END of that block. With\n`kind: block`, the requested block itself. With `kind: current`, the block the\ncurrent balances are valid at.","format":"int64","minimum":0,"type":["integer","null"]},"kind":{"$ref":"#/components/schemas/BalanceWindowKind"}},"required":["kind"],"type":"object"},"BalanceWindowKind":{"description":"Which state a balance answer describes.","enum":["current","block"],"type":"string"},"Block":{"description":"One Ethereum block: its header and the totals of what it contains.","properties":{"baseFeePerGas":{"description":"Base fee per gas in wei, decimal string. Absent before EIP-1559.","type":["string","null"]},"blobBaseFeeWei":{"description":"Blob base fee in wei for this block, decimal string. Absent before Cancun.","type":["string","null"]},"blobGasUsed":{"description":"Blob gas used and excess blob gas (EIP-4844), decimal strings. Absent before Cancun.","type":["string","null"]},"blobTxCount":{"format":"int32","minimum":0,"type":"integer"},"burntFees":{"description":"Fees: burnt base fees (absent before EIP-1559), total gas fees paid, total priority\nfees (tips) — wei, decimal strings.","type":["string","null"]},"chainId":{"description":"Chain id. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"contractCreationCount":{"description":"Transactions that created a contract, and EIP-4844 blob transactions.","format":"int32","minimum":0,"type":"integer"},"difficulty":{"description":"Header `difficulty` (0 since the merge) and `extraData`, `0x`-prefixed.","type":"string"},"excessBlobGas":{"type":["string","null"]},"extraData":{"type":"string"},"failedTxCount":{"format":"int32","minimum":0,"type":["integer","null"]},"feeRecipient":{"description":"The address that received the block's priority fees (the header's `beneficiary`).","type":"string"},"gasLimit":{"description":"Gas limit and gas used, as decimal strings.","type":"string"},"gasUsed":{"type":"string"},"hash":{"description":"Block hash, lowercase and `0x`-prefixed.","type":"string"},"logCount":{"description":"Number of receipt logs across all transactions. Absent with the two outcome counts\nwhen the block's receipt aggregates were not computed upstream.","format":"int32","minimum":0,"type":["integer","null"]},"number":{"description":"Block height.","format":"int64","type":"integer"},"ommersCount":{"description":"Number of ommers (0 since the merge).","format":"int32","minimum":0,"type":"integer"},"parentHash":{"description":"Hash of the parent block.","type":"string"},"receiptsRoot":{"type":"string"},"stateRoot":{"description":"State root after this block, lowercase and `0x`-prefixed.","type":"string"},"successfulTxCount":{"description":"Absent, together with its two siblings, when the block's receipt aggregates were\nnot computed upstream — never zero there, because a block with transactions cannot\nhave no outcomes. Absence is \"not stated\", never \"none\".","format":"int32","minimum":0,"type":["integer","null"]},"timestamp":{"description":"Unix time of the block, seconds.","format":"int32","minimum":0,"type":"integer"},"totalGasFees":{"description":"Total gas fees the block's transactions paid, and the part that went to the\nproposer as tips. Absent TOGETHER when they were not computed upstream — never a\nzero fee for a block that ran transactions, and never a negative tip.","type":["string","null"]},"totalTips":{"type":["string","null"]},"totalValueWei":{"description":"Sum of transaction values in wei, decimal string.","type":"string"},"totalWithdrawalGwei":{"type":"string"},"transactionsRoot":{"type":"string"},"txCount":{"description":"Number of transactions, and how many of them succeeded / failed.","format":"int32","minimum":0,"type":"integer"},"uniqueAddressCount":{"description":"Distinct addresses whose state the block touched. Absent for the most recent\nblocks while the count is still being reconciled — absence is \"not yet counted\",\nnever zero.","format":"int32","minimum":0,"type":["integer","null"]},"withdrawalCount":{"description":"Validator withdrawals in this block, and their total in gwei (decimal string).","format":"int32","minimum":0,"type":"integer"}},"required":["chainId","number","hash","parentHash","timestamp","feeRecipient","stateRoot","transactionsRoot","receiptsRoot","gasLimit","gasUsed","txCount","contractCreationCount","blobTxCount","withdrawalCount","totalWithdrawalGwei","totalValueWei","difficulty","extraData","ommersCount"],"type":"object"},"BlockResponse":{"description":"Response of the block methods (`blocks/latest`, `blocks/{number}`).","properties":{"data":{"$ref":"#/components/schemas/Block"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"BlockTransactions":{"description":"A page of one block's transactions.","properties":{"blockNumber":{"description":"The block these transactions belong to.","format":"int64","type":"integer"},"nextCursor":{"description":"Opaque cursor for the next page. Absent on the last page. Pass it back unchanged\nas `?cursor=`; a cursor is only valid for the request it was issued for.","type":["string","null"]},"transactions":{"description":"This page, in transaction-index order.","items":{"$ref":"#/components/schemas/Transaction"},"type":"array"},"txCount":{"description":"How many transactions the block holds in total.","format":"int64","minimum":0,"type":"integer"}},"required":["blockNumber","txCount","transactions"],"type":"object"},"BlockTransactionsResponse":{"description":"Response of the block-transactions method.","properties":{"data":{"$ref":"#/components/schemas/BlockTransactions"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"Contract":{"description":"One deployed contract: what its code is, what it looks like, and how it came to be.","properties":{"address":{"description":"The contract address, lowercase and `0x`-prefixed.","type":"string"},"blockNumber":{"description":"Block height of the current code record.","format":"int64","type":"integer"},"bytecodeSize":{"description":"Size of the current runtime code in bytes.","format":"int32","type":"integer"},"bytecodeVariant":{"description":"`legacy_raw`, `legacy_analyzed` or `eip7702` (a delegation designator, not code).","type":"string"},"chainId":{"description":"Chain id the contract is on. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"codeHash":{"description":"Keccak-256 hash of the current runtime code, `0x`-prefixed.","type":"string"},"erc20Interface":{"$ref":"#/components/schemas/Erc20Interface"},"isEip1167Proxy":{"description":"`true` when the bytecode is an EIP-1167 minimal proxy.","type":"boolean"},"isErc165":{"description":"`true` when the bytecode exposes `supportsInterface` (ERC-165).","type":"boolean"},"isErc20":{"description":"`true` when the bytecode exposes all four ERC-20 view functions; see\n`erc20Interface` for each one.","type":"boolean"},"lifecycle":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContractLifecycle","description":"Deployment and destruction, when the lifecycle index has reached the address."}]},"proxyConfidence":{"description":"Confidence of `proxyFamily`, 0 (none) to 3 (high). Absent with it.","format":"int32","minimum":0,"type":["integer","null"]},"proxyFamily":{"description":"Proxy pattern detected from the code: `eip1967`, `oz_v1`, `diamond_like`, `custom`,\n`none`, `unknown`. Absent when the code has not been analysed for it.","type":["string","null"]},"proxyImplementation":{"description":"The implementation an EIP-1167 proxy delegates to. Absent otherwise; the proxy\nmethod lists implementations of every proxy kind.","type":["string","null"]},"selectorCount":{"description":"Number of 4-byte function selectors found in the code.","format":"int32","type":"integer"}},"required":["chainId","address","codeHash","blockNumber","bytecodeSize","bytecodeVariant","isErc20","isErc165","isEip1167Proxy","selectorCount","erc20Interface"],"type":"object"},"ContractBytecode":{"description":"The runtime bytecode of a contract.","properties":{"address":{"description":"The contract address, lowercase and `0x`-prefixed.","type":"string"},"bytecode":{"description":"The runtime code, `0x`-prefixed hex. Up to 24 576 bytes of code, i.e. up to 49 154\ncharacters. Empty when the code is not stored for this hash.","type":"string"},"bytecodeSize":{"description":"Size of the code in bytes.","format":"int32","type":"integer"},"chainId":{"description":"Chain id the contract is on. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"codeHash":{"description":"Keccak-256 hash of the code, `0x`-prefixed.","type":"string"},"fingerprint":{"description":"A structural fingerprint of the code that is stable across metadata-only\ndifferences, `0x`-prefixed. Two contracts with equal fingerprints share their logic.","type":"string"}},"required":["chainId","address","codeHash","bytecode","bytecodeSize","fingerprint"],"type":"object"},"ContractBytecodeResponse":{"description":"Response of the contract-bytecode method.","properties":{"data":{"$ref":"#/components/schemas/ContractBytecode"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"ContractEvents":{"description":"One page of the events a contract emitted.","properties":{"address":{"description":"The contract address, lowercase and `0x`-prefixed.","type":"string"},"chainId":{"description":"Chain id the contract is on. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"events":{"description":"Newest first.","items":{"$ref":"#/components/schemas/EventLog"},"type":"array"},"nextCursor":{"description":"Cursor of the next page. Absent on the last page.","type":["string","null"]}},"required":["chainId","address","events"],"type":"object"},"ContractEventsResponse":{"description":"Response of the contract-events method.","properties":{"data":{"$ref":"#/components/schemas/ContractEvents"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"ContractLifecycle":{"description":"How the contract came to exist and whether it still does.","properties":{"codeChangeCount":{"description":"Number of code states observed, deployment included.","format":"int32","type":"integer"},"deployBlock":{"description":"Block the contract was deployed at.","format":"int64","type":"integer"},"deployCallType":{"description":"`CREATE` or `CREATE2` — how the creation ran.","type":["string","null"]},"deployCodeHash":{"description":"Hash of the code deployed at `deployBlock`.","type":"string"},"deployTxHash":{"description":"Hash of the creating transaction. Absent when the creation frame is not indexed yet.","type":["string","null"]},"deployTxIndex":{"description":"Index of the creating transaction within its block.","format":"int32","minimum":0,"type":["integer","null"]},"deployer":{"description":"The account that executed the creation — a factory, or the sender itself. Absent\nwhen the creation frame is not indexed yet.","type":["string","null"]},"isAlive":{"description":"`false` after a self-destruct.","type":"boolean"},"latestCodeBlock":{"description":"Block of the latest code change observed (equal to `deployBlock` when the code never\nchanged).","format":"int64","type":"integer"},"latestCodeHash":{"description":"Hash of the code at `latestCodeBlock` (equal to `deployCodeHash` when the code never\nchanged). Absent when the lifecycle index does not state it.","type":["string","null"]},"origin":{"description":"The externally-owned account that sent the creating transaction. Absent when the\ncreation frame is not indexed yet.","type":["string","null"]},"selfDestructBlock":{"description":"Block the contract self-destructed at; absent while it is alive.","format":"int64","type":["integer","null"]}},"required":["deployBlock","latestCodeBlock","deployCodeHash","codeChangeCount","isAlive"],"type":"object"},"ContractResponse":{"description":"Response of the contract method.","properties":{"data":{"$ref":"#/components/schemas/Contract"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"ContractSelectors":{"description":"The function selectors found in a contract's bytecode.","properties":{"address":{"description":"The contract address, lowercase and `0x`-prefixed.","type":"string"},"chainId":{"description":"Chain id the contract is on. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"codeHash":{"description":"Keccak-256 hash of the code the selectors were read from, `0x`-prefixed.","type":"string"},"selectorCount":{"description":"Number of selectors found.","format":"int32","type":"integer"},"selectors":{"description":"The selectors, each with its resolution.","items":{"$ref":"#/components/schemas/Selector"},"type":"array"}},"required":["chainId","address","codeHash","selectorCount","selectors"],"type":"object"},"ContractSelectorsResponse":{"description":"Response of the contract-selectors method.","properties":{"data":{"$ref":"#/components/schemas/ContractSelectors"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"CorpusBasis":{"description":"How the `corpus` figure beside a ranking was obtained.","enum":["registry","counted","precomputed","window","at_block"],"type":"string"},"Counterparty":{"description":"One counterparty of the ranked address.","properties":{"counterparty":{"description":"The counterparty address, lowercase and `0x`-prefixed.","type":"string"},"firstBlock":{"description":"First and last block the two interacted in, within the window.","format":"int64","type":"integer"},"interactionTxCount":{"description":"All transactions between the two, attempts included (reverted ones too).","format":"int64","minimum":0,"type":"integer"},"lastBlock":{"format":"int64","type":"integer"},"receivedTxCount":{"description":"Transactions the ranked address received from the counterparty.","format":"int64","minimum":0,"type":"integer"},"sentTxCount":{"description":"Transactions the ranked address sent to the counterparty.","format":"int64","minimum":0,"type":"integer"},"succeededTxCount":{"description":"The ranking key: transactions between the two that succeeded.","format":"int64","minimum":0,"type":"integer"},"surfaceCounts":{"additionalProperties":{"format":"int64","minimum":0,"type":"integer"},"description":"Transactions per surface, for exactly the surfaces listed in `surfaces`. On the\nattempts scale (like `interactionTxCount`), and a transaction touching two surfaces\ncounts on both — so the values explain where the relation lives, and do not add up to\nthe ranking key. Absent when the source of this answer does not carry the breakdown\n(high-degree addresses served from the pre-built top list); absence means the\nbreakdown was not computed, never zero.","propertyNames":{"description":"Where an interaction can be observed.","enum":["external","internal","token"],"type":"string"},"type":["object","null"]},"surfaces":{"description":"On which surfaces the relation was observed: `external` (top-level transactions),\n`internal` (calls inside transactions), `token` (token transfers). A surface missing\nhere had no interaction between the two.","items":{"$ref":"#/components/schemas/Surface"},"type":"array"},"tokenClasses":{"description":"Which classes of token the `token` surface consists of: `fungible`, `nft`, or both.\nPresent only when `surfaces` includes `token`. Both listed means the relation spans\nboth classes; it does not say in what proportion.","items":{"$ref":"#/components/schemas/TokenClass"},"type":"array"}},"required":["counterparty","succeededTxCount","interactionTxCount","sentTxCount","receivedTxCount","firstBlock","lastBlock","surfaces"],"type":"object"},"CounterpartyRanking":{"description":"The addresses one address interacts with most, ranked.","properties":{"address":{"description":"The address the ranking is about, lowercase and `0x`-prefixed.","type":"string"},"boundaryTieCount":{"description":"How many counterparties are level with the LAST row served and did not make the list.\nZero means nothing ties with the boundary. Ties are common — at the\nhundredth place of a mid-sized address there are typically hundreds of equals — which\nis also why rows carry no rank number: the order is all the data supports.","format":"int64","minimum":0,"type":["integer","null"]},"corpus":{"description":"How many distinct counterparties the ranking covered — the size of the set the list\nis the top of. A list of 100 out of a `corpus` of 216 770 is a different statement\nfrom 100 out of 104.","format":"int64","minimum":0,"type":["integer","null"]},"corpusBasis":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CorpusBasis","description":"How `corpus` was obtained. See `CorpusBasis`."}]},"counterparties":{"description":"In ranking order: most successful transactions first, then most recent, then by\naddress. At most `limit` rows; no rank number (see `boundaryTieCount`).","items":{"$ref":"#/components/schemas/Counterparty"},"type":"array"},"window":{"$ref":"#/components/schemas/CounterpartyWindow","description":"What the ranking covers: the whole history, or the state at the end of a block."}},"required":["address","window","counterparties"],"type":"object"},"CounterpartyRankingResponse":{"description":"Response of the address-counterparties method.","properties":{"data":{"$ref":"#/components/schemas/CounterpartyRanking"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"CounterpartyWindow":{"description":"What a counterparty ranking covers.","properties":{"asOfBlock":{"description":"The block the ranking is true as of. For `all`, the block the relationship graph\nwas last built to; for `block`, the requested block.","format":"int64","type":["integer","null"]},"kind":{"$ref":"#/components/schemas/CounterpartyWindowKind","description":"`all` — the whole history up to `asOfBlock`; `block` — everything up to and\nincluding the requested block."}},"required":["kind"],"type":"object"},"CounterpartyWindowKind":{"enum":["all","block"],"type":"string"},"DecodedArg":{"description":"One decoded argument.","properties":{"indexed":{"type":"boolean"},"name":{"type":"string"},"type":{"description":"Solidity type, for example `address`, `uint256`.","type":"string"},"value":{"description":"The value: addresses as `0x` strings, integers as decimal strings, bytes as `0x`\nhex, booleans as booleans. An indexed dynamic argument (string, bytes, array) is\nonly its hash on chain and is returned as `{ \"hash\": \"0x…\", \"dynamic\": true }`.","type":"object"}},"required":["name","type","value","indexed"],"type":"object"},"DecodedEvent":{"description":"A decoded event: its name and arguments.","properties":{"args":{"description":"Arguments in declaration order.","items":{"$ref":"#/components/schemas/DecodedArg"},"type":"array"},"candidateCount":{"description":"How many known signatures share this event's hash. `1` is unambiguous.","format":"int32","minimum":0,"type":"integer"},"name":{"description":"Event name, for example `Transfer`.","type":"string"}},"required":["name","args","candidateCount"],"type":"object"},"EntityAttributes":{"description":"Facts proven for one address by the TraceFast knowledge graph.","properties":{"attributeDetails":{"description":"One entry per id in `attributes`, in the same order, with the evaluation detail.","items":{"$ref":"#/components/schemas/AttributeDetail"},"type":"array"},"attributes":{"description":"Attribute ids proven for this address, in `family:name` form\n(for example `address_nature:eoa_currently`, `address_presence:tx_sender_ever`).\nEmpty when nothing is proven yet — absence of an attribute never means its opposite.","items":{"type":"string"},"type":"array"},"chainId":{"description":"Chain id the facts are about. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"entity":{"description":"The address, lowercase and `0x`-prefixed.","type":"string"},"typeHints":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TypeHints","description":"Provisional classification, present while the knowledge graph has not yet reached\nthis address. See `TypeHints`."}]}},"required":["chainId","entity","attributes","attributeDetails"],"type":"object"},"EntityAttributesResponse":{"description":"Response of the address-attributes method: the facts under `data`, response metadata\nunder `meta`.","properties":{"data":{"$ref":"#/components/schemas/EntityAttributes"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"EntityInternalTransfers":{"description":"A page of an address's internal transfers, newest first.","properties":{"address":{"type":"string"},"nextCursor":{"type":["string","null"]},"transfers":{"items":{"$ref":"#/components/schemas/FeedInternalTransfer"},"type":"array"}},"required":["address","transfers"],"type":"object"},"EntityInternalTransfersResponse":{"description":"Response of the address-internal-transfers feed.","properties":{"data":{"$ref":"#/components/schemas/EntityInternalTransfers"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"EntityTokenTransfers":{"description":"A page of an address's token transfers, newest first.","properties":{"address":{"type":"string"},"nextCursor":{"type":["string","null"]},"transfers":{"items":{"$ref":"#/components/schemas/FeedTokenTransfer"},"type":"array"}},"required":["address","transfers"],"type":"object"},"EntityTokenTransfersResponse":{"description":"Response of the address-token-transfers feed.","properties":{"data":{"$ref":"#/components/schemas/EntityTokenTransfers"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"EntityTransactions":{"description":"A page of an address's transactions, newest first.","properties":{"address":{"description":"The address this feed is about, lowercase and `0x`-prefixed.","type":"string"},"nextCursor":{"description":"Opaque cursor for the next page. Absent on the last page.","type":["string","null"]},"transactions":{"items":{"$ref":"#/components/schemas/FeedTransaction"},"type":"array"}},"required":["address","transactions"],"type":"object"},"EntityTransactionsResponse":{"description":"Response of the address-transactions feed.","properties":{"data":{"$ref":"#/components/schemas/EntityTransactions"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"Erc20Interface":{"description":"Which ERC-20 view functions the bytecode exposes, from its selectors.","properties":{"hasDecimals":{"type":"boolean"},"hasName":{"type":"boolean"},"hasSymbol":{"type":"boolean"},"hasTotalSupply":{"type":"boolean"}},"required":["hasDecimals","hasSymbol","hasName","hasTotalSupply"],"type":"object"},"ErrorBody":{"properties":{"code":{"description":"Stable machine-readable code — one of the closed set in the documentation\n(`bad_request`, `not_found`, `chain_not_supported`, `method_not_allowed`,\n`uri_too_long`, `block_not_available`, `portfolio_too_large`, `token_not_covered`,\n`balance_not_available`, `service_unavailable`, `internal_error`). Branch on this\nand on `details.reason`, never on the sentence.","type":"string"},"details":{"description":"Present only when the refusal carries something to act on: `reason` (a stable\nsub-code), the bound that was hit and the actual value. Absent otherwise.","type":["object","null"]},"message":{"description":"Human-readable explanation. Numbers a client must act on are also given in\n`details`; do not parse them out of this sentence, it may be reworded.","type":"string"},"requestId":{"description":"The request's id, echoed from the `X-Request-Id` header. Quote it when asking for\nsupport: it identifies this exact call. Absent only when the request did not carry\none.","type":["string","null"]}},"required":["code","message"],"type":"object"},"ErrorEnvelope":{"description":"Error response. Every refusal, whichever layer raises it, has this shape.","properties":{"error":{"$ref":"#/components/schemas/ErrorBody"}},"required":["error"],"type":"object"},"EventLog":{"description":"One event log emitted by a transaction, with its decoding when the signature is known.","properties":{"address":{"description":"The contract that emitted the log, lowercase and `0x`-prefixed.","type":"string"},"blockNumber":{"description":"Block, transaction index within the block, and the log's index within the block.","format":"int64","type":"integer"},"data":{"description":"The log's data, `0x`-prefixed.","type":"string"},"decodeStatus":{"description":"How confident the decoding is: `verified` (one known signature, decoded), `partial`,\n`ambiguous` (several signatures share the hash; `decoded` is the best candidate),\n`inferred`, `abi_missing` (signature unknown), `failed` (known but the data did not\ndecode).","type":"string"},"decoded":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DecodedEvent","description":"The decoded event, when the signature is known and the data decodes."}]},"logIndex":{"format":"int32","minimum":0,"type":"integer"},"logIndexInTx":{"description":"The log's index within its transaction (emission order).","format":"int32","minimum":0,"type":"integer"},"timestamp":{"description":"Unix time of the block, seconds.","format":"int32","minimum":0,"type":"integer"},"topics":{"description":"The log's topics in order (`topics[0]` is the event signature hash), `0x`-prefixed.","items":{"type":"string"},"type":"array"},"txHash":{"description":"Hash of the transaction that emitted the log, `0x`-prefixed.","type":"string"},"txIndex":{"format":"int32","minimum":0,"type":"integer"}},"required":["address","blockNumber","txIndex","logIndex","logIndexInTx","txHash","timestamp","topics","data","decodeStatus"],"type":"object"},"FailedFrame":{"description":"One failed call frame inside a reverted transaction.","properties":{"callDepth":{"description":"Depth from the root frame, 1 = root.","format":"int32","minimum":0,"type":"integer"},"callPath":{"description":"Position in the call tree: four hex characters per level, the root frame is\n`0000`. Sort by `(callDepth, callPath)` to render the tree.","type":"string"},"callType":{"description":"EVM call type: `CALL`, `CALLCODE`, `DELEGATECALL`, `STATICCALL`, `CREATE`,\n`CREATE2`, `SELFDESTRUCT`, `EOA_TRANSFER`.","type":"string"},"errorKind":{"description":"Why the frame failed: `Revert`, `Panic`, `CustomError`, `OutOfGas`,\n`StackOverflow`, `InvalidOpcode`, `PrecompileError`, `Other`.","type":"string"},"errorName":{"description":"Human-readable error name and canonical signature (for example `Error(string)`)\nwhen the selector is known; both absent otherwise — render `revertSelector` then.","type":["string","null"]},"errorSignature":{"type":["string","null"]},"from":{"description":"The frame's caller and target, lowercase and `0x`-prefixed.","type":"string"},"gasUsed":{"description":"Gas used by this frame.","format":"int64","type":"integer"},"revertData":{"description":"The revert payload, `0x`-prefixed; `0x` when the frame reverted with no data.\nCapped at 4 KB: `revertDataTruncated` says when, and `revertDataLength` is the\nfull length.","type":"string"},"revertDataLength":{"format":"int32","minimum":0,"type":"integer"},"revertDataTruncated":{"type":"boolean"},"revertSelector":{"description":"First four bytes of the revert payload, `0x`-prefixed (`0x00000000` when the\npayload is shorter).","type":"string"},"status":{"description":"`Revert` (the frame reverted) or `Halt` (the EVM halted the frame).","type":"string"},"to":{"type":"string"}},"required":["callPath","callDepth","callType","from","to","errorKind","status","revertSelector","revertData","revertDataTruncated","revertDataLength","gasUsed"],"type":"object"},"FeedInternalTransfer":{"description":"One internal transfer: a value-carrying call frame inside a transaction. The\ntransaction's own top-level call is NOT one of these — it is the transaction, and it\nrides the transactions feed.","properties":{"blockNumber":{"format":"int64","type":"integer"},"callDepth":{"description":"Depth in the call tree; `1` is the transaction's own top-level call, which never\nappears here.","format":"int32","minimum":0,"type":"integer"},"callPath":{"description":"The frame's position in the call tree, as the trace encodes it — the third component\nof this feed's cursor.","type":"string"},"callType":{"description":"`call`, `delegatecall`, `create`, `create2`, `selfdestruct`, …","type":"string"},"counterparty":{"description":"The other party of the frame, when there is one.","type":["string","null"]},"from":{"type":"string"},"role":{"description":"`sender` | `receiver` | `self`.","type":"string"},"status":{"description":"The frame's own outcome: `success` | `reverted` | …","type":"string"},"timestamp":{"format":"int32","minimum":0,"type":"integer"},"to":{"description":"The frame's recipient. Absent where the trace records none — a `selfdestruct`\nbeneficiary is written that way when it IS the participant.","type":["string","null"]},"txHash":{"type":"string"},"txIndex":{"format":"int32","minimum":0,"type":"integer"},"valueWei":{"description":"Value moved by this frame, in wei, as a decimal string.","type":"string"}},"required":["blockNumber","txIndex","timestamp","txHash","callPath","callDepth","callType","from","valueWei","status","role"],"type":"object"},"FeedTokenTransfer":{"description":"One token transfer of an address's feed.","properties":{"blockNumber":{"format":"int64","type":"integer"},"eventType":{"description":"The log that carried it: `transfer`, `transfer_single`, `transfer_batch`, `mint`, …","type":"string"},"from":{"description":"Whose balance decreased. Absent on a mint — nothing was debited.","type":["string","null"]},"logIndex":{"description":"The log's index within its block — the position this feed pages on.","format":"int32","minimum":0,"type":"integer"},"operator":{"description":"The party that executed an approved transfer (ERC-1155 `operator`), when the log\nnames one.","type":["string","null"]},"role":{"description":"`sender` | `receiver` | `self` — this address's part in the transfer.","type":"string"},"timestamp":{"description":"Block time, Unix seconds. Absent for the same reason as `txHash`.","format":"int32","minimum":0,"type":["integer","null"]},"to":{"description":"Whose balance increased. Absent on a burn.","type":["string","null"]},"token":{"$ref":"#/components/schemas/TransferToken"},"tokenId":{"description":"The NFT's token id, as a decimal string.","type":["string","null"]},"txHash":{"description":"The transaction that emitted the transfer. Absent on the rare resolve miss: the\ntransfer is recorded by its position, and the hash is resolved alongside it.","type":["string","null"]},"txIndex":{"format":"int32","minimum":0,"type":"integer"},"txSender":{"description":"Who SENT the transaction that emitted this transfer. On a batch disburser or an\napproved `transferFrom` this is a different party from `from`. Absent when\nunresolved — `from` never stands in for it.","type":["string","null"]},"txTo":{"description":"The transaction's top-level recipient — on a router or a disburser, not the token.","type":["string","null"]},"value":{"description":"Raw amount as a decimal string, unscaled by `decimals`. Absent where the standard\ncarries no amount.","type":["string","null"]}},"required":["blockNumber","txIndex","logIndex","token","eventType","role"],"type":"object"},"FeedTransaction":{"description":"One transaction of an address's feed: the transaction as recorded, plus how this address\ntook part in it.","properties":{"blockNumber":{"format":"int64","type":"integer"},"counterparty":{"description":"The other party, when there is one. Absent on a contract creation and on a\ntransaction the address sent to itself: `self` already says the other side is this\naddress, and a null would conflate that with \"no other side\".","type":["string","null"]},"feeWei":{"description":"Fee actually paid, in wei, as a decimal string.","type":"string"},"from":{"description":"Who sent the transaction.","type":"string"},"gasPrice":{"type":["string","null"]},"gasUsed":{"type":"string"},"hash":{"description":"Transaction hash, lowercase and `0x`-prefixed.","type":"string"},"inputSize":{"format":"int32","minimum":0,"type":"integer"},"methodId":{"description":"The called function's 4-byte selector, `0x`-prefixed. Absent on a plain transfer.","type":["string","null"]},"methodName":{"description":"The function's name where the selector is known. Absent when it is not — never a\nguess, and never the selector standing in for a name.","type":["string","null"]},"nonce":{"format":"int64","minimum":0,"type":"integer"},"role":{"description":"`sender` | `receiver` | `self` — this address's part in the transaction.","type":"string"},"status":{"description":"Receipt status: `1` success, `0` failure. Absent when the receipt is not yet\nrecorded — absence is \"unknown\", never \"failed\".","format":"int32","type":["integer","null"]},"timestamp":{"description":"Block time, Unix seconds.","format":"int32","minimum":0,"type":"integer"},"to":{"description":"The recipient. Absent on a contract creation — the contract has no `to`.","type":["string","null"]},"txIndex":{"format":"int32","minimum":0,"type":"integer"},"txType":{"format":"int32","minimum":0,"type":"integer"},"valueWei":{"description":"Value moved by the top-level call, in wei, as a decimal string.","type":"string"}},"required":["hash","blockNumber","txIndex","timestamp","from","valueWei","feeWei","nonce","txType","inputSize","gasUsed","role"],"type":"object"},"HolderBalanceBasis":{"description":"How a holder balance was computed.","enum":["transfer_sum"],"type":"string"},"Portfolio":{"description":"What one address holds, valued in USD.","properties":{"address":{"description":"The address, lowercase and `0x`-prefixed.","type":"string"},"balanceBasis":{"$ref":"#/components/schemas/BalanceBasis"},"coveredTokenCount":{"description":"How many token contracts balances are currently served for — those whose storage\nlayout has been verified against the node. The set grows continuously. A balance in\na token outside it is ABSENT from this answer, not zero.","format":"int64","minimum":0,"type":["integer","null"]},"hiddenCount":{"description":"Assets the address holds a positive balance of that could NOT be valued: no USD price\nfor the hour, or the token's decimals are unknown. Counted, never listed, and not part\nof `totalUsd`. `pricedCount` and `hiddenCount` together are everything held.","format":"int64","minimum":0,"type":"integer"},"positions":{"description":"Valued positions in descending USD value, at most `limit` rows. No NFTs, no DeFi\npositions, no liquidity-pool shares — token balances and the native asset only.","items":{"$ref":"#/components/schemas/Position"},"type":"array"},"priceBasis":{"$ref":"#/components/schemas/PriceBasis"},"priceHour":{"description":"With `priceBasis: hour_of_block`: start of the UTC hour every position is priced at,\nUnix seconds. Absent with `latest_hour`.","format":"int64","type":["integer","null"]},"pricedCount":{"description":"How many positions carry a USD value — the size of the set `positions` is the top of.","format":"int64","minimum":0,"type":"integer"},"totalUsd":{"description":"Sum of `valueUsd` over ALL valued positions of the address — not only the ones listed\nwhen `limit` cuts the list. Absent when nothing could be valued (absent, never 0).","format":"double","type":["number","null"]},"window":{"$ref":"#/components/schemas/BalanceWindow"}},"required":["address","window","balanceBasis","priceBasis","pricedCount","hiddenCount","positions"],"type":"object"},"PortfolioResponse":{"description":"Response of the address-portfolio method.","properties":{"data":{"$ref":"#/components/schemas/Portfolio"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"Position":{"description":"One valued position of a portfolio.","properties":{"asOfBlock":{"description":"The block this balance was last recomputed at. In the current view it can be earlier\nthan `window.asOfBlock`: the balance has not changed since and is valid at\n`window.asOfBlock`. Absent for the native asset in the current view.","format":"int64","minimum":0,"type":["integer","null"]},"balance":{"description":"The balance in the asset's smallest unit (wei for the native asset), as a decimal\nstring.","type":"string"},"decimals":{"format":"int32","type":"integer"},"kind":{"$ref":"#/components/schemas/PositionKind"},"priceCarried":{"description":"`true` when no price was observed in that hour and the latest earlier price is used\ninstead.","type":"boolean"},"priceHour":{"description":"Start of the UTC hour `priceUsd` is for, Unix seconds.","format":"int64","type":"integer"},"priceUsd":{"description":"USD price of one whole unit of the asset at `priceHour`.","format":"double","type":"number"},"share":{"description":"`valueUsd / totalUsd`, in `0..=1`.","format":"double","type":"number"},"symbol":{"description":"Ticker as declared by the token contract; `ETH` for the native asset. Absent when\nthe contract declares none. Not a proof of identity: any contract can declare any\nsymbol.","type":["string","null"]},"token":{"description":"The token contract, lowercase and `0x`-prefixed. Absent for the native asset.","type":["string","null"]},"valueUsd":{"description":"`balance / 10^decimals * priceUsd`. A floating-point estimate; the exact value follows\nfrom `balance` and `priceUsd`.","format":"double","type":"number"}},"required":["kind","decimals","balance","priceUsd","priceHour","priceCarried","valueUsd","share"],"type":"object"},"PositionKind":{"description":"Kind of asset a portfolio position is.","enum":["native","token"],"type":"string"},"PriceBasis":{"description":"Which hour the USD prices of a portfolio are for.","enum":["latest_hour","hour_of_block"],"type":"string"},"Proof":{"description":"The evidence behind one proven fact — an attribute of an address, or a relation\nbetween two addresses. Nothing here is summarised or ranked: the fields are the\nevaluator's own record, so a reader can check the claim rather than trust it.","properties":{"attributeId":{"description":"The attribute or relation id, `family:name`.","type":"string"},"bindingVersions":{"description":"Versions of the data bindings the evaluation read."},"chainId":{"description":"Chain id the fact is about. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"definitionVersion":{"description":"Version of the definition the fact was evaluated against.","type":"string"},"dependencyProofRefs":{"description":"Other proofs this one depends on."},"evaluatedAt":{"description":"When the evaluation ran, Unix time in seconds.","format":"int64","minimum":0,"type":"integer"},"evaluatorVersion":{"description":"Version of the evaluator that produced this proof.","type":"string"},"factResults":{"description":"The facts checked, each with the operator, the expected and the observed value.\nJSON as produced by the evaluator."},"failureReasonCodes":{"description":"Reason codes when `result` is not `pass`. Empty on a passing fact."},"graphRevision":{"description":"Revision of the knowledge graph's rule set that produced this proof.","type":"string"},"negativeControlResults":{"description":"Conditions that had to be false for the fact to hold, each with what was observed."},"object":{"description":"The other end of a relation. Absent on an attribute proof.","type":["string","null"]},"proofHash":{"description":"Digest of the proof record, `sha256:` + hex.","type":"string"},"referenceBlock":{"description":"Block the evidence was read at.","format":"int64","type":"integer"},"referenceBlockHash":{"description":"Hash of that block, `0x`-prefixed — pins the evidence to one chain state.","type":"string"},"result":{"description":"Evaluation result. `pass` means the fact is proven.","type":"string"},"selectedFamilyId":{"description":"Which of the fact's alternative evidence families satisfied it.","type":"string"},"snapshotId":{"description":"Identifier of the chain snapshot the evaluation ran on.","type":"string"},"sourceEvidenceRefs":{"description":"Where the evidence was read from: the source, its grain and the columns used."},"subject":{"description":"The address the fact is about, lowercase and `0x`-prefixed.","type":"string"},"value":{"description":"The fact's value, for facts that carry one.","type":["string","null"]}},"required":["chainId","subject","attributeId","result","definitionVersion","graphRevision","referenceBlock","referenceBlockHash","snapshotId","selectedFamilyId","factResults","negativeControlResults","dependencyProofRefs","bindingVersions","sourceEvidenceRefs","evaluatorVersion","evaluatedAt","failureReasonCodes","proofHash"],"type":"object"},"ProofResponse":{"description":"Response of the two proof methods.","properties":{"data":{"$ref":"#/components/schemas/Proof"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"ProxyImplementation":{"description":"One implementation a proxy has been observed delegating to, and whether it still does.","properties":{"confidence":{"description":"Confidence of the detection, 0 (none) to 3 (high).","format":"int32","minimum":0,"type":"integer"},"firstSeenBlock":{"description":"First and last block the pointer was observed at.","format":"int64","type":"integer"},"implementation":{"description":"The implementation address, lowercase and `0x`-prefixed. For a beacon proxy this is\nthe BEACON: the logic contract behind it is resolved on the beacon, not here.","type":"string"},"isSelfDelegation":{"description":"`true` when the proxy delegates to itself.","type":"boolean"},"lastSeenBlock":{"format":"int64","type":"integer"},"proxyFamily":{"description":"Proxy pattern of the proxy contract: `eip1967`, `oz_v1`, `diamond_like`, `custom`,\n`none`, `unknown`.","type":"string"},"slot":{"description":"The storage slot the pointer was read from, `0x`-prefixed. Absent for\n`eip1167`, where the pointer is in the code.","type":["string","null"]},"slotLastEvent":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SlotEvent","description":"The last write observed on the pointer's slot: `set`, `changed` or `cleared`, with\nthe block and transaction. Absent when no write to the slot is indexed."}]},"source":{"description":"How the implementation was found: `eip1167` (minimal-proxy bytecode),\n`storage_eip1967_impl` (the EIP-1967 implementation slot), `storage_beacon` (the\nEIP-1967 beacon slot), `storage_oz_v1` (the OpenZeppelin v1 slot).","type":"string"},"supersededBy":{"description":"Whether this pointer has since been replaced. Three states, and each means something\ndifferent: ABSENT — storage cannot say (the pointer lives in the code, or on a\nbeacon upgraded elsewhere); `null` — no replacement observed, the pointer is current;\nan address — the pointer was replaced by it.","type":["string","null"]},"supersededByBlock":{"description":"Block of the replacement. Present exactly when `supersededBy` is an address.","format":"int64","type":["integer","null"]}},"required":["implementation","source","proxyFamily","confidence","firstSeenBlock","lastSeenBlock","isSelfDelegation"],"type":"object"},"ProxyImplementations":{"description":"The implementations a proxy contract has delegated to.","properties":{"address":{"description":"The proxy contract address, lowercase and `0x`-prefixed.","type":"string"},"chainId":{"description":"Chain id the contract is on. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"implementations":{"description":"Newest-seen first. Empty when no implementation pointer has been observed for the\naddress — which is not a statement that it is not a proxy.","items":{"$ref":"#/components/schemas/ProxyImplementation"},"type":"array"}},"required":["chainId","address","implementations"],"type":"object"},"ProxyImplementationsResponse":{"description":"Response of the contract-proxy method.","properties":{"data":{"$ref":"#/components/schemas/ProxyImplementations"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"PublicMeta":{"description":"Response metadata.","properties":{"asOfBlock":{"description":"The block height the answer is valid at — the same place on every method, whatever\nthe body's own shape. Absent when the method's source states no block (a ranking\nrecomputed daily, a set of proven facts): absence means \"not stated\", never\n\"latest\".","format":"int64","minimum":0,"type":["integer","null"]},"cached":{"description":"`true` when the answer came from the TraceFast response cache rather than being\ncomputed for this call. Cached answers are refreshed within minutes.","type":"boolean"},"chain":{"description":"Network the answer is about. `ethereum` for chain id `1`.","type":"string"},"docs":{"description":"Documentation page of the method that produced this response.","type":"string"},"timestamp":{"description":"When this response was produced, Unix time in milliseconds.","format":"int64","minimum":0,"type":"integer"}},"required":["chain","timestamp","cached","docs"],"type":"object"},"Relation":{"description":"One relation that holds now.","properties":{"attributeId":{"description":"Relation id, `relation:name`.","type":"string"},"counterpart":{"description":"The other end of the relation, lowercase `0x`-prefixed: the object under\n`direction=subject`, the subject under `direction=object`.","type":"string"},"referenceBlock":{"description":"Block height at which the relation was evaluated.","format":"int64","type":"integer"},"result":{"description":"Evaluation result. `pass` means the relation is proven.","type":"string"},"value":{"description":"The relation's value, for relations that carry one.","type":["string","null"]}},"required":["attributeId","counterpart","result","referenceBlock"],"type":"object"},"RelationHistory":{"description":"Every relation interval an address has held, in one direction, oldest first.","properties":{"address":{"description":"The address, lowercase and `0x`-prefixed.","type":"string"},"chainId":{"description":"Chain id the facts are about. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"coveredFamilies":{"description":"Relation ids the history is built for. An empty or short timeline says nothing\nabout relations outside this list.","items":{"type":"string"},"type":"array"},"direction":{"description":"The side the address is read on, echoed: `subject` lists what it pointed at,\n`object` lists who pointed at it.","type":"string"},"intervals":{"description":"Intervals in ascending order of `startBlock`, then relation id.","items":{"$ref":"#/components/schemas/RelationInterval"},"type":"array"},"truncated":{"description":"`true` when the timeline was cut at `limit`.","type":"boolean"}},"required":["chainId","address","direction","intervals","coveredFamilies","truncated"],"type":"object"},"RelationHistoryResponse":{"description":"Response of the address-relation-history method.","properties":{"data":{"$ref":"#/components/schemas/RelationHistory"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"RelationInterval":{"description":"One relation and the block window it held for.","properties":{"attributeId":{"description":"Relation id, `relation:name` (for example `relation:was_implementation_of`,\n`relation:eip7702_delegates_to`).","type":"string"},"counterpart":{"description":"The other end of the relation, lowercase `0x`-prefixed: the object when the\naddress is the subject, the subject when the address is the object.","type":"string"},"endBlock":{"description":"Last block the relation held at. Absent when the interval was still open at the\nend of the covered history.","format":"int64","type":["integer","null"]},"startBlock":{"description":"First block the relation held at.","format":"int64","type":"integer"},"value":{"description":"The relation's value over the interval, for relations that carry one.","type":["string","null"]}},"required":["attributeId","counterpart","startBlock"],"type":"object"},"Relations":{"description":"One page of the relations an address holds now.","properties":{"address":{"description":"The address, lowercase and `0x`-prefixed.","type":"string"},"chainId":{"description":"Chain id the facts are about. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"direction":{"description":"The side the address is read on, echoed: `subject` lists what it points at,\n`object` lists who points at it.","type":"string"},"nextCursor":{"description":"Cursor of the next page. Absent on the last page — and that absence is the only\ncompleteness statement this method makes: there is no total, in either direction.","type":["string","null"]},"relations":{"description":"The page, ordered by relation id then counterpart.","items":{"$ref":"#/components/schemas/Relation"},"type":"array"}},"required":["chainId","address","direction","relations"],"type":"object"},"RelationsAtBlock":{"description":"The relations an address was the subject of at one block.","properties":{"address":{"description":"The address, lowercase and `0x`-prefixed. Always the SUBJECT of the relations\nlisted: \"what did this address point at\".","type":"string"},"addressKnown":{"description":"`false` when the address is unknown to the history altogether. Absent when the\nhistory does not state it.","type":["boolean","null"]},"block":{"description":"The block the question was asked about.","format":"int64","minimum":0,"type":"integer"},"chainId":{"description":"Chain id the facts are about. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"coverageBlock":{"description":"The highest block the history has been computed up to.","format":"int64","minimum":0,"type":"integer"},"coveredFamilies":{"description":"Relation ids the history is built for. A relation outside this list is not listed\nhere whether or not it held.","items":{"type":"string"},"type":"array"},"intervals":{"description":"The relations that held at `block`, each with its window. `counterpart` is the\nobject of every relation here.","items":{"$ref":"#/components/schemas/RelationInterval"},"type":"array"}},"required":["chainId","address","block","coverageBlock","intervals","coveredFamilies"],"type":"object"},"RelationsAtBlockResponse":{"description":"Response of the address-relations-at-block method.","properties":{"data":{"$ref":"#/components/schemas/RelationsAtBlock"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"RelationsResponse":{"description":"Response of the address-relations method.","properties":{"data":{"$ref":"#/components/schemas/Relations"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"Selector":{"description":"One function selector of a contract, resolved to a signature where one is known.","properties":{"candidateCount":{"description":"How many known signatures share this selector. `1` is unambiguous; when several do,\n`signature` is the most common one.","format":"int32","minimum":0,"type":["integer","null"]},"decodeStatus":{"description":"How confident the resolution is: `partial` (one known signature; parameter names\nare not known), `ambiguous` (several known signatures share the selector),\n`abi_missing` (no known signature).","type":"string"},"name":{"description":"The function name alone. Absent with `signature`.","type":["string","null"]},"selector":{"description":"The 4-byte selector, `0x`-prefixed.","type":"string"},"signature":{"description":"The canonical signature, for example `transfer(address,uint256)`. Absent when no\nknown signature has this selector.","type":["string","null"]}},"required":["selector","decodeStatus"],"type":"object"},"SlotEvent":{"description":"One write to a proxy's pointer slot.","properties":{"blockNumber":{"format":"int64","type":"integer"},"kind":{"description":"`set` (from empty), `changed`, `cleared` (to empty).","type":"string"},"txHash":{"type":"string"}},"required":["kind","blockNumber","txHash"],"type":"object"},"Surface":{"description":"Where an interaction can be observed.","enum":["external","internal","token"],"type":"string"},"Token":{"description":"One token contract, as it declares itself.","properties":{"address":{"description":"The token contract, lowercase and `0x`-prefixed.","type":"string"},"chainId":{"description":"Chain id. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"decimals":{"description":"`decimals()` as declared. Absent when the contract declares none (NFTs, and some\nfungible tokens) — absent, never a default of 18.","format":"int32","type":["integer","null"]},"holderCount":{"description":"All-time number of distinct holders. Absent where the holder index does not carry\nthis token — absent, never zero.","format":"int64","minimum":0,"type":["integer","null"]},"name":{"type":["string","null"]},"standard":{"description":"Token standard as observed from its events: `erc20`, `erc721`, `erc1155`.","type":"string"},"symbol":{"description":"`symbol()` and `name()` as the contract declares them — verbatim, not verified.\nA contract may declare any text. Absent when the contract declares none.","type":["string","null"]},"transferCount":{"description":"All-time number of transfer events.","format":"int64","minimum":0,"type":"integer"}},"required":["chainId","address","standard","transferCount"],"type":"object"},"TokenBalance":{"description":"The balance of one token on one address.","properties":{"address":{"description":"The holder address, lowercase and `0x`-prefixed.","type":"string"},"balance":{"description":"The balance in the token's smallest unit, as a decimal string. `\"0\"` is a real zero:\nthe token is covered and the address holds none of it at `window.asOfBlock`. A token\nthat is not covered is refused (422 `token_not_covered`), and a past block with no\nrecorded balance for the pair is refused too (422 `balance_not_available`) — never\nanswered with zero.","type":"string"},"balanceBasis":{"$ref":"#/components/schemas/BalanceBasis"},"decimals":{"description":"Decimals as declared by the token contract; absent when unknown.","format":"int32","type":["integer","null"]},"symbol":{"description":"Ticker as declared by the token contract; absent when it declares none. Not a proof\nof identity.","type":["string","null"]},"token":{"description":"The token contract, lowercase and `0x`-prefixed.","type":"string"},"window":{"$ref":"#/components/schemas/BalanceWindow"}},"required":["address","token","balance","balanceBasis","window"],"type":"object"},"TokenBalanceResponse":{"description":"Response of the address-token-balance method.","properties":{"data":{"$ref":"#/components/schemas/TokenBalance"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"TokenClass":{"description":"Class of token behind a `token` surface. `nft` covers both single- and multi-token\ncollections; they are not distinguished.","enum":["fungible","nft"],"type":"string"},"TokenHolder":{"description":"One holder of a token.","properties":{"address":{"description":"The holder address, lowercase and `0x`-prefixed.","type":"string"},"balance":{"description":"The balance in the token's smallest unit, as a decimal string (not divided by\n`decimals`).","type":"string"}},"required":["address","balance"],"type":"object"},"TokenHolders":{"description":"The largest current holders of a token.","properties":{"balanceBasis":{"$ref":"#/components/schemas/HolderBalanceBasis","description":"How the balances behind this ranking are computed. See `HolderBalanceBasis`."},"holderCount":{"description":"Number of addresses holding a positive balance now — the size of the set this list\nis the top of. Holders who once held and now hold nothing are not counted.","format":"int64","minimum":0,"type":"integer"},"holders":{"description":"Holders in descending balance order, at most `limit` rows. No rank number: balances\ncan tie, and the order is all the data supports.","items":{"$ref":"#/components/schemas/TokenHolder"},"type":"array"},"token":{"description":"The token contract, lowercase and `0x`-prefixed.","type":"string"}},"required":["token","balanceBasis","holderCount","holders"],"type":"object"},"TokenHoldersResponse":{"description":"Response of the token-holders method.","properties":{"data":{"$ref":"#/components/schemas/TokenHolders"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"TokenResponse":{"description":"Response of the token method.","properties":{"data":{"$ref":"#/components/schemas/Token"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"TraceFrame":{"description":"One executed call frame of a transaction.","properties":{"callPath":{"description":"The frame's address in the tree, and its parent's. Absent parent = the root.","type":"string"},"callType":{"description":"`call`, `callcode`, `delegatecall`, `staticcall`, `create`, `create2`,\n`selfdestruct`, `eoa_transfer`.","type":"string"},"codeAddress":{"description":"The address whose CODE executes in this frame. On a `delegatecall` this is the\nimplementation while `to` stays the storage context — the PAIR is what makes a\nproxy call readable, which is why `to` does not change meaning. Absent where there\nis no callee code (`create`, `create2`, `selfdestruct`).","type":["string","null"]},"createdAddress":{"description":"The address a `create` / `create2` frame deployed.","type":["string","null"]},"depth":{"description":"Depth in the tree; `1` is the top-level call.","format":"int32","type":"integer"},"errorKind":{"description":"How it failed: `Revert`, `Panic`, `CustomError`, `OutOfGas`, …","type":["string","null"]},"errorSelector":{"description":"The custom error's 4-byte selector — the ERROR selector, not `inputSelector`.","type":["string","null"]},"from":{"type":"string"},"gas":{"description":"Gas offered to the frame and gas it consumed, decimal strings.","type":"string"},"gasUsed":{"type":"string"},"initCodeHash":{"type":["string","null"]},"inputHead":{"description":"The first 260 bytes of the frame's calldata and of its output, `0x`-hex, with each\nfull length in BYTES. Present only with `?includeCalldata=true`. Compare the size\nagainst 260, not against the hex string's length: the units differ.","type":["string","null"]},"inputSelector":{"description":"The called function's 4-byte selector.","type":["string","null"]},"inputSize":{"format":"int32","type":["integer","null"]},"order":{"description":"Position in pre-order traversal of the call tree; `0` is the transaction's own\ntop-level call.","format":"int32","minimum":0,"type":"integer"},"outputHead":{"type":["string","null"]},"outputSize":{"format":"int32","type":["integer","null"]},"parentPath":{"type":["string","null"]},"revertData":{"description":"The raw ABI revert payload, and its full length in BYTES. The payload is truncated\nupstream, and `revertDataTruncated` says when — a clipped payload decodes into a\nplausible but wrong argument list, so the flag is not decoration.","type":["string","null"]},"revertDataSize":{"format":"int32","type":["integer","null"]},"revertDataTruncated":{"type":["boolean","null"]},"revertDecodeStatus":{"description":"Why `revertReason` is what it is: `decoded`, `undecodable` (a payload is present\nbut no name was found) or `absent` (no payload to decode). An empty reason is\nambiguous three ways, and this field is what separates them.\n\nNamed apart from the event decoder's `decodeStatus` on purpose: that vocabulary\ndescribes event-decode confidence and the two appear in one response.","type":["string","null"]},"revertReason":{"description":"The decoded revert reason, or the custom error's name when its selector is known.","type":["string","null"]},"salt":{"description":"`create2` salt, and the keccak-256 of the init code on a creating frame.","type":["string","null"]},"selfdestructBeneficiary":{"description":"Who received the balance of a `selfdestruct` frame.","type":["string","null"]},"status":{"description":"`success`, `reverted` or `halted` — the FRAME's own outcome, which on a caught\nrevert differs from the transaction's.","type":"string"},"to":{"description":"The frame's target. Absent on a contract creation.","type":["string","null"]},"valueWei":{"description":"Value this frame moved, in wei, as a decimal string.","type":"string"}},"required":["order","depth","callPath","callType","from","valueWei","gas","gasUsed","status"],"type":"object"},"Transaction":{"description":"One transaction as recorded on chain, with its receipt's outcome.","properties":{"blockNumber":{"description":"The block that includes it, and the transaction's index within that block.","format":"int64","type":"integer"},"chainId":{"description":"Chain id. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"effectiveGasPrice":{"type":["string","null"]},"from":{"description":"Sender, lowercase and `0x`-prefixed.","type":"string"},"gasLimit":{"description":"Gas limit and gas used by the receipt, decimal strings.","type":"string"},"gasPrice":{"description":"`gasPrice` as declared (legacy types), `maxFeePerGas` / `maxPriorityFeePerGas`\n(EIP-1559), and the price actually PAID per gas — all wei, decimal strings. Each\nabsent where the type does not carry it; `effectiveGasPrice` absent only while the\nblock's base fee is not yet available.","type":["string","null"]},"gasUsed":{"type":"string"},"hash":{"description":"Transaction hash, lowercase and `0x`-prefixed.","type":"string"},"inputSize":{"description":"Size of the input in bytes.","format":"int32","minimum":0,"type":"integer"},"logCount":{"description":"Number of receipt logs. Absent where not yet recorded; a log-less transaction is\nan honest `0`.","format":"int32","minimum":0,"type":["integer","null"]},"maxFeePerGas":{"type":["string","null"]},"maxPriorityFeePerGas":{"type":["string","null"]},"methodId":{"description":"The first four bytes of the input (`0x`-prefixed), when the input is at least four\nbytes long — the function selector of a contract call.","type":["string","null"]},"nonce":{"description":"Sender's nonce.","format":"int64","minimum":0,"type":"integer"},"status":{"description":"Receipt status: `1` success, `0` failure. Absent when the receipt is not yet\navailable — absence is \"unknown\", never \"failed\".","format":"int32","type":["integer","null"]},"timestamp":{"description":"Unix time of the block, seconds.","format":"int32","minimum":0,"type":"integer"},"to":{"description":"Recipient. Absent for a contract creation.","type":["string","null"]},"txIndex":{"format":"int32","minimum":0,"type":"integer"},"txType":{"description":"Transaction type (0 legacy, 1 EIP-2930, 2 EIP-1559, 3 EIP-4844, 4 EIP-7702).","format":"int32","minimum":0,"type":"integer"},"valueWei":{"description":"Value transferred, wei, decimal string.","type":"string"}},"required":["chainId","hash","blockNumber","txIndex","timestamp","from","valueWei","inputSize","nonce","txType","gasLimit","gasUsed"],"type":"object"},"TransactionEvents":{"description":"A page of one transaction's event logs.","properties":{"events":{"description":"This page, in emission order.","items":{"$ref":"#/components/schemas/EventLog"},"type":"array"},"hash":{"description":"Transaction hash, lowercase and `0x`-prefixed.","type":"string"},"nextCursor":{"description":"Opaque cursor for the next page. Absent on the last page.","type":["string","null"]}},"required":["hash","events"],"type":"object"},"TransactionEventsResponse":{"description":"Response of the transaction-events method.","properties":{"data":{"$ref":"#/components/schemas/TransactionEvents"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"TransactionFailures":{"description":"Why a transaction reverted, frame by frame.","properties":{"blockNumber":{"description":"The block that includes it. Absent when there are no failed frames.","format":"int64","type":["integer","null"]},"chainId":{"description":"Chain id. `1` is Ethereum mainnet.","format":"int64","type":"integer"},"frameCount":{"description":"Number of failed frames returned.","format":"int32","minimum":0,"type":"integer"},"frames":{"description":"Failed call frames, root first, then nested frames in tree order. Empty for a\nsuccessful transaction, and for one that is not known — an empty list is \"no\nfailure recorded\", never \"succeeded\".","items":{"$ref":"#/components/schemas/FailedFrame"},"type":"array"},"framesTruncated":{"description":"`true` when the transaction has more failed frames than this method returns (a\ncap of 100); `frames` is then a prefix in tree order.","type":"boolean"},"hash":{"description":"Transaction hash, lowercase and `0x`-prefixed.","type":"string"}},"required":["chainId","hash","frameCount","framesTruncated","frames"],"type":"object"},"TransactionFailuresResponse":{"description":"Response of the transaction-failures method.","properties":{"data":{"$ref":"#/components/schemas/TransactionFailures"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"TransactionResponse":{"description":"Response of the transaction method.","properties":{"data":{"$ref":"#/components/schemas/Transaction"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"TransactionTrace":{"description":"The call tree of one transaction, in pre-order.","properties":{"blockNumber":{"format":"int64","type":"integer"},"frameCount":{"description":"Frames in this response. Equal to the tree's size unless `framesTruncated`.","format":"int32","minimum":0,"type":"integer"},"frames":{"items":{"$ref":"#/components/schemas/TraceFrame"},"type":"array"},"framesTruncated":{"description":"`true` when the tree is larger than the 1 000-frame cap and this is its first\n1 000 frames in pre-order. A clipped tree never claims to be the whole one.","type":"boolean"},"hash":{"description":"The transaction, lowercase and `0x`-prefixed.","type":"string"},"txIndex":{"format":"int32","minimum":0,"type":"integer"}},"required":["hash","blockNumber","txIndex","frameCount","framesTruncated","frames"],"type":"object"},"TransactionTraceResponse":{"description":"Response of the transaction-trace method.","properties":{"data":{"$ref":"#/components/schemas/TransactionTrace"},"meta":{"$ref":"#/components/schemas/PublicMeta"}},"required":["data","meta"],"type":"object"},"TransferToken":{"description":"The token a transfer moved, as the contract declares itself. Same words as the token\nmethod; no price and no name from any resolver.","properties":{"address":{"type":"string"},"decimals":{"description":"Declared decimals. Absent when the contract declares none — never a default `18`,\nwhich would silently misprice every amount.","format":"int32","type":["integer","null"]},"name":{"type":["string","null"]},"standard":{"description":"`erc20`, `erc721`, `erc1155`, …","type":"string"},"symbol":{"type":["string","null"]}},"required":["address","standard"],"type":"object"},"TypeHintSource":{"description":"Which source answered the \"what kind of address is this\" question.","enum":["graph","hint","none"],"type":"string"},"TypeHints":{"description":"Provisional classification of an address the knowledge graph has not reached yet.\n\nHints are positive and non-exclusive: a freshly deployed token carries both `contract`\nand `fungible_token`. They are a list, never a set of booleans — a `false` here would\nread as a negative fact that was never established.","properties":{"evidenceBlock":{"description":"Newest block among the evidence behind the hints. Present only with `source: hint`.","format":"int64","type":["integer","null"]},"hints":{"description":"Hints observed for the address. Vocabulary: `contract`, `fungible_token`,\n`nft_collection`, `multi_token_collection`, `eoa`. Present only with `source: hint`.","items":{"type":"string"},"type":"array"},"source":{"$ref":"#/components/schemas/TypeHintSource"}},"required":["source"],"type":"object"}}},"externalDocs":{"description":"TraceFast API documentation","url":"https://docs.tracefast.xyz/api"},"info":{"description":"Read-only Ethereum facts from the TraceFast knowledge graph and live chain data: address attributes, top counterparties, token holders, address portfolios and token balances, now or at a past block; blocks and their transactions; a transaction, why it reverted and the events it emitted; a token contract's declared metadata; an address's transactions, token transfers and internal transfers; and the call frames a transaction executed. Every method takes the chain id in the path (`1`, Ethereum mainnet), answers in a `data` / `meta` envelope, and refuses in `{ \"error\": { \"code\", \"message\" } }`. A fact that is absent is not proven; absence never means the opposite. Paid per call with x402 (USDC on Base); there is no API key on this rail — payment is the authentication, and this document itself is free.","license":{"name":""},"title":"TraceFast API","version":"0.1.0+8e24080c"},"openapi":"3.1.0","paths":{"/chains/{chain_id}/entities/{address}/attributes":{"get":{"description":"TraceFast knowledge graph: the facts proven about one Ethereum address — what kind of account it is, how it has been used, what it is known to be. Returns the list of proven attribute ids (`family:name`), the evaluation detail of each (result and the block height it was evaluated at), and, while the graph has not yet reached the address, a provisional classification from on-chain evidence. An attribute that is absent is not proven; absence never means the opposite.","externalDocs":{"url":"https://docs.tracefast.xyz/api/address-attributes"},"operationId":"getAddressAttributes","parameters":[{"description":"Chain id. `1` (Ethereum mainnet) is served; any other value answers 404 `chain_not_supported`.","in":"path","name":"chain_id","required":true,"schema":{"format":"int64","type":"integer"}},{"description":"The address, `0x`-prefixed, 40 hex characters, any case.","in":"path","name":"address","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityAttributesResponse"}}},"description":"The address's attributes in the `data` / `meta` envelope"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`bad_request`: malformed address, or an unknown query parameter (the message names it)"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`chain_not_supported`, or an unknown path"}},"summary":"Attributes of an address","tags":["addresses"]}},"/chains/{chain_id}/entities/{address}/counterparties":{"get":{"description":"TraceFast knowledge graph: the addresses one address interacts with most, ranked by successful transactions across top-level calls, internal calls and token transfers. Returns up to 100 counterparties in ranking order, each with its transaction counts, first and last block of interaction, the surfaces the relation was seen on and the token classes involved, plus `corpus` — how many counterparties the ranking covered. With `block`, the ranking as it stood at the end of that block, reconstructed from the full history up to it; very large addresses are refused for that question with the bound stated, never answered with a narrowed set.","externalDocs":{"url":"https://docs.tracefast.xyz/api/address-counterparties"},"operationId":"getAddressCounterparties","parameters":[{"description":"Chain id. `1` (Ethereum mainnet) is served; any other value answers 404 `chain_not_supported`.","in":"path","name":"chain_id","required":true,"schema":{"format":"int64","type":"integer"}},{"description":"The address, `0x`-prefixed, 40 hex characters, any case.","in":"path","name":"address","required":true,"schema":{"type":"string"}},{"description":"State at the end of this block (everything up to and including it). Absent: the current all-time ranking.","in":"query","name":"block","required":false,"schema":{"format":"int64","type":"integer"}},{"description":"1..=100, default 100.","in":"query","name":"limit","required":false,"schema":{"format":"int32","minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CounterpartyRankingResponse"}}},"description":"The ranking in the `data` / `meta` envelope"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`bad_request`: malformed address, `block` not positive, `limit` outside 1..=100, an unknown query parameter — or, with `block`, an address too large to rank at a past block (`details.reason`: `peer_count_over_limit` with `peerCount`/`maxPeerCount`, or `row_count_over_limit` with `rowCount`/`maxRowCount`)"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`chain_not_supported`, or an unknown path"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`block_not_available`: `block` is past the history currently covered; `details.maxAvailableBlock` is the highest block that can be answered"}},"summary":"Top counterparties of an address","tags":["addresses"]}},"/chains/{chain_id}/entities/{address}/portfolio":{"get":{"description":"TraceFast live Ethereum data: everything an address holds, valued in USD — its token balances and its native ETH, each with the balance, the hourly USD price, the USD value and the share of the total. Returns up to 100 positions in descending USD value, plus `totalUsd`, `pricedCount` and `hiddenCount` over the whole holding. A position is listed only when it can be valued (a USD price for the hour and known decimals); anything else the address holds is counted in `hiddenCount`, never listed. Token balances are read from contract storage for the tokens whose storage layout has been verified (`coveredTokenCount`, growing continuously); a balance in a token outside that set is absent, not zero. No NFTs, no DeFi positions, no liquidity-pool shares. With `block`, the exact state at the end of that block, priced at that block's hour.","externalDocs":{"url":"https://docs.tracefast.xyz/api/address-portfolio"},"operationId":"getAddressPortfolio","parameters":[{"description":"Chain id. `1` (Ethereum mainnet) is served; any other value answers 404 `chain_not_supported`.","in":"path","name":"chain_id","required":true,"schema":{"format":"int64","type":"integer"}},{"description":"The address, `0x`-prefixed, 40 hex characters, any case.","in":"path","name":"address","required":true,"schema":{"type":"string"}},{"description":"State at the end of this block. Absent: the current state.","in":"query","name":"block","required":false,"schema":{"format":"int64","minimum":0,"type":"integer"}},{"description":"1..=100, default 100.","in":"query","name":"limit","required":false,"schema":{"format":"int32","minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioResponse"}}},"description":"The portfolio in the `data` / `meta` envelope. An address holding nothing valued answers an empty list, no `totalUsd`, and `hiddenCount` for what it holds unvalued."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`bad_request`: malformed address, `block` not positive, `limit` outside 1..=100, or an unknown query parameter"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`chain_not_supported`, or an unknown path"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`block_not_available`: `block` is past the covered history (`details.maxAvailableBlock` is the highest block that can be answered); `portfolio_too_large`: the address holds more distinct tokens than this method can value (`details.maxPositions`)"}},"summary":"Portfolio of an address","tags":["addresses"]}},"/chains/{chain_id}/entities/{address}/tokens/{token}/balance":{"get":{"description":"TraceFast live Ethereum data: the balance of one token contract on one address — the value `balanceOf(address)` returns at the end of a block, read from the token contract's storage, never derived from transfer events. Served for token contracts whose storage layout has been verified against the node (a growing set); a token outside it is refused with 422 `token_not_covered` rather than answered with a meaningless zero, so a `balance` of `\"0\"` is always a real zero. With `block`, the exact balance at the end of that block; a pair with no recorded balance at or before it is refused with 422 `balance_not_available`.","externalDocs":{"url":"https://docs.tracefast.xyz/api/address-token-balance"},"operationId":"getAddressTokenBalance","parameters":[{"description":"Chain id. `1` (Ethereum mainnet) is served; any other value answers 404 `chain_not_supported`.","in":"path","name":"chain_id","required":true,"schema":{"format":"int64","type":"integer"}},{"description":"The holder address, `0x`-prefixed, 40 hex characters, any case.","in":"path","name":"address","required":true,"schema":{"type":"string"}},{"description":"The token contract address, `0x`-prefixed, 40 hex characters, any case.","in":"path","name":"token","required":true,"schema":{"type":"string"}},{"description":"State at the end of this block. Absent: the current balance.","in":"query","name":"block","required":false,"schema":{"format":"int64","minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenBalanceResponse"}}},"description":"The balance in the `data` / `meta` envelope."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`bad_request`: malformed address or token, `block` not positive, or an unknown query parameter"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`chain_not_supported`, or an unknown path"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`token_not_covered`: the token's storage layout is not verified, so no balance can be stated for it (`details.token`); `balance_not_available`: no balance of this pair is recorded at or before `block` (`details.token`, `details.block`); `block_not_available`: `block` is past the covered history (`details.maxAvailableBlock`)"}},"summary":"Balance of one token on an address","tags":["addresses"]}},"/chains/{chain_id}/tokens/{token}/holders":{"get":{"description":"TraceFast live Ethereum data: the largest current holders of a token contract. Returns up to 100 holders in descending balance order with the balance in the token's smallest unit, plus `holderCount` — how many addresses hold a positive balance now. Balances are the signed sum of the token's verified transfer events, recomputed daily (`balanceBasis`); balance changes a contract makes without a transfer event are not reflected. Only the current ranking is served — a past block is refused.","externalDocs":{"url":"https://docs.tracefast.xyz/api/token-holders"},"operationId":"getTokenHolders","parameters":[{"description":"Chain id. `1` (Ethereum mainnet) is served; any other value answers 404 `chain_not_supported`.","in":"path","name":"chain_id","required":true,"schema":{"format":"int64","type":"integer"}},{"description":"The token contract address, `0x`-prefixed, 40 hex characters, any case.","in":"path","name":"token","required":true,"schema":{"type":"string"}},{"description":"1..=100, default 100.","in":"query","name":"limit","required":false,"schema":{"format":"int32","minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenHoldersResponse"}}},"description":"The holders in the `data` / `meta` envelope. A token with no current holders answers an empty list and `holderCount: 0`."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`bad_request`: malformed token address, `limit` outside 1..=100, an unknown query parameter, or `block` (`details.reason: block_not_supported` — only the current ranking exists)"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"`chain_not_supported`, or an unknown path"}},"summary":"Top holders of a token","tags":["tokens"]}}},"servers":[{"description":"TraceFast API — paid per call with x402 (USDC on Base)","url":"https://mpp.tracefast.xyz/api/v1"}],"tags":[{"description":"Facts about one Ethereum address","name":"addresses"},{"description":"Facts about one token contract","name":"tokens"},{"description":"Blocks and their transactions","name":"blocks"},{"description":"One transaction: itself, its failures, its events","name":"transactions"},{"description":"The call frames a transaction executed","name":"traces"},{"description":"One deployed contract: its code, selectors, proxy implementations and events","name":"contracts"}]}