Skip to Content
ReferenceIndexer API

Indexer API

https://indexer.aevachain.com — the read-only HTTP API behind the explorer (OpenAPI 3.0.3, API version 0.12.2; the document is indexer/openapi.yaml, served at /openapi.yaml). JSON only; lists page with limit (≤ 100) and an opaque cursor. The TypeScript client is @aeva/sdk (api.createClient). The API sends no CORS headers: call it from a server or a script.

Routes

GET /v1/status

Indexer status

200 → Status

GET /v1/stats

Chain-wide transaction aggregates (the explorer home)

The number of transactions on chain (every committed tx, failed ones included), the most recent transactions whatever their age, and the transactions per UTC day for the 14 days ending on the latest block’s day (block time is “now”), oldest first, zero-filled.

parameterintyperequiredmeaning
limitqueryintegernohow many latest transactions (default 6)

200 → Stats

GET /v1/blocks

Blocks, newest first

parameterintyperequiredmeaning
limitqueryintegerno
cursorquerystringnoopaque cursor from a previous next_cursor

200 → blocks: Block[], next_cursor: string

GET /v1/blocks/{height}

One block with its transactions and block-level events

parameterintyperequiredmeaning
heightpathintegeryes

200 → block: Block, txs: Tx[], events: Event[]

GET /v1/txs

Transactions, newest first

Keyset-paged on (height, tx_index), every transaction on chain (failed ones included) — never a block window. method keeps the transactions whose first message has that type URL (the explorer’s Method column). next_cursor walks to older transactions, prev_cursor to newer ones, last_cursor to the oldest page (total % limit transactions, a full page when it divides); total counts the matches; methods is the whole chain’s facet for the filter.

parameterintyperequiredmeaning
limitqueryintegerno
cursorquerystringnoopaque cursor from a previous next_cursor
methodquerystringnothe type URL of the first message, e.g. /aeva.rights.v1.MsgTransfer

200 → TxPage

GET /v1/txs/{hash}

One transaction with its messages, decoded events and (for MsgEthereumTx) its EVM view

parameterintyperequiredmeaning
hashpathstringyesthe CometBFT hash (64 hex characters, case-insensitive) or the 0x eth hash of a MsgEthereumTx (0x + 64 hex)

200 → Tx

GET /v1/assets

Assets ordered by id

parameterintyperequiredmeaning
limitqueryintegerno
cursorquerystringnoopaque cursor from a previous next_cursor

200 → assets: AssetSummary[], next_cursor: string

GET /v1/assets/{id}

One asset with kinds, supplies, effective policies, holder counts and the latest invariant check

parameterintyperequiredmeaning
idpathstringyes64 lower-case hex characters

200 → asset: Asset

GET /v1/assets/{id}/graph

Rights graph of an asset — kinds → top-100 holders by units with encumbered units and locks

parameterintyperequiredmeaning
idpathstringyes64 lower-case hex characters

200 → asset_id: string, status: string, kinds: object[]

GET /v1/assets/{id}/kinds/{kind}/holders

Holders of one right kind, units desc then holder asc

parameterintyperequiredmeaning
idpathstringyes64 lower-case hex characters
kindpathintegeryes
limitqueryintegerno
cursorquerystringnoopaque cursor from a previous next_cursor

200 → asset_id: string, kind_id: integer, holders: Holder[], next_cursor: string

GET /v1/accounts/{addr}

Account view — positions grouped by asset with whole_units, locks, pending settlements as either party, attestations

parameterintyperequiredmeaning
addrpathstringyesaccount address — bech32 (aeva1…) or the 0x form of the same 20-byte key (EIP-55 checked when mixed case); answers name the canonical bech32 form

200 → Account

GET /v1/accounts/{addr}/attestations

Attestations about one subject, with live computed against the latest block time

parameterintyperequiredmeaning
addrpathstringyesaccount address — bech32 (aeva1…) or the 0x form of the same 20-byte key (EIP-55 checked when mixed case); answers name the canonical bech32 form

200 → address: string, attestations: Attestation[], latest_block_time: string

GET /v1/attesters/{addr}

Per-credential-type aggregates of one attester (no subjects)

parameterintyperequiredmeaning
addrpathstringyesaccount address — bech32 (aeva1…) or the 0x form of the same 20-byte key (EIP-55 checked when mixed case); answers name the canonical bech32 form

200 → attester: string, types: object[], latest_block_time: string

GET /v1/settlements

Settlements, newest first, optionally filtered by party and status

parameterintyperequiredmeaning
partyquerystringnobech32 account that is the proposer or the counterparty
statusquerystringnoSTATUS_PENDING | STATUS_SETTLED | STATUS_CANCELLED | STATUS_EXPIRED (or pending | settled | cancelled | expired)
limitqueryintegerno
cursorquerystringnoopaque cursor from a previous next_cursor

200 → settlements: Settlement[], next_cursor: string

GET /v1/encumbrances/{id}

One encumbrance (pledge, lien or lockup) with its lifecycle timeline (M1.1)

parameterintyperequiredmeaning
idpathintegeryes

200 → encumbrance: Encumbrance, timeline: EncumbranceTimelineEntry[]

GET /v1/assets/{id}/distributions

Distribution history of an asset (every EventDistributed, newest first; M1.2)

parameterintyperequiredmeaning
idpathstringyes64 lower-case hex characters
limitqueryintegerno
cursorquerystringnoopaque cursor from a previous next_cursor

200 → asset_id: string, distributions: Distribution[], next_cursor: string

GET /v1/settlements/{id}

One settlement with legs and lifecycle timeline

parameterintyperequiredmeaning
idpathintegeryes

200 → settlement: Settlement

GET /v1/assets/{id}/liquidation

The M2 view of an asset — waterfall tiers with cumulative paid, the liquidation record and pool (I5), the redemption pools (I6)

parameterintyperequiredmeaning
idpathstringyes64 lower-case hex characters

200 → AssetLiquidation

GET /v1/delegations/{id}

One M3 term delegation by id

parameterintyperequiredmeaning
idpathintegeryes

200 → delegation: Delegation

GET /v1/bridge/routes

RH-2 bridge routes — the governance registry with the outbound / inbound counters, outstanding (escrow or synthetic supply), window usage

200 → routes: BridgeRoute[]

GET /v1/bridge/routes/{id}

One bridge route by id

parameterintyperequiredmeaning
idpathstringyes

200 → route: BridgeRoute

GET /v1/bridge/transfers

Bridge transfers seen on Aeva, newest first — out (in flight from Aeva’s view), in (completed on arrival) and rejected attempts (failed MsgBridgeOut txs, codespace bridge)

parameterintyperequiredmeaning
routequerystringno
statusquerystringno
accountquerystringnosender or recipient
message_idquerystringno
limitqueryintegerno
cursorquerystringnoopaque cursor from a previous next_cursor

200 → transfers: BridgeTransfer[], next_cursor: string

GET /v1/assets/{id}/events

Activity feed of an asset — every event whose derivation rule declares the asset as a subject, newest first

parameterintyperequiredmeaning
idpathstringyes64 lower-case hex characters
limitqueryintegerno
cursorquerystringnoopaque cursor from a previous next_cursor

GET /v1/accounts/{addr}/events

Activity feed of an account — every event whose derivation rule declares the account as a subject, newest first

parameterintyperequiredmeaning
addrpathstringyesaccount address — bech32 (aeva1…) or the 0x form of the same 20-byte key (EIP-55 checked when mixed case); answers name the canonical bech32 form
limitqueryintegerno
cursorquerystringnoopaque cursor from a previous next_cursor

GET /v1/lookup/{q}

Dispatch a free-form query by shape into candidates (asset, tx, account, block, settlement, encumbrance)

64 hex characters → asset (if it exists) then tx (if it exists); an aeva1… address → one account candidate with known (the chain recorded something about it) true or false and its evm_address; 0x + 40 hex → the asset whose AE-20 Right (kind_id) or Bundle (bundle) precompile lives at that address, else the account of that key (resolved to bech32); 0x + 64 hex → the tx with that eth hash (id = its CometBFT hash); a non-negative integer → block when ≤ the indexed height, settlement and encumbrance when they exist. An unrecognised shape (incl. a wrong EIP-55 checksum) is a 404; a recognised shape with nothing behind it is a 200 with an empty list. Ordering is deterministic.

parameterintyperequiredmeaning
qpathstringyes

200 → query: string, candidates: object[]

GET /v1/invariants

Latest reconciliation check per (asset, kind), both sources, plus the ae20_registry check

parameterintyperequiredmeaning
assetquerystringnorestrict to one asset id

200 → checks: InvariantCheck[], ae20_registry: AE20Check[]

Schemas

Error

fieldtyperequiredmeaning
errorstringyes
codestringyes(bad_request, not_found, internal, method_not_allowed)

Amount

cosmossdk.io/math.Int as a decimal string

Status

fieldtyperequiredmeaning
indexed_heightintegeryes
chain_heightintegeryes
lag_blocksintegeryes
latest_block_timestringyes
wall_clock_lag_secondsintegeryesseconds between the indexer’s wall clock and latest_block_time (integer)
drift_totalintegeryesrecorded disagreements (reconciliation rows with agree=false plus event post-value drifts)

Stats

fieldtyperequiredmeaning
indexed_heightintegeryes
tx_countintegeryesevery transaction indexed (committed on chain), failed ones included
latest_txsTx[]yesthe most recent transactions, newest first, whatever their age
tx_dailyTxDay[]yestransactions per UTC day, 14 days ending on the latest block’s day, oldest first

TxPage

fieldtyperequiredmeaning
txsTx[]yes
totalintegeryesthe transactions matching the filter
next_cursorstring | nullyesthe next (older) page; null on the oldest
prev_cursorstring | nullyesthe previous (newer) page; null on the newest
last_cursorstring | nullyesthe oldest page; null when everything fits one page
methodsMethodCount[]yestransactions per first-message type over the whole chain, most frequent first

MethodCount

fieldtyperequiredmeaning
methodstringyes
countintegeryes

TxDay

fieldtyperequiredmeaning
daystringyesYYYY-MM-DD (UTC)
countintegeryes

Block

fieldtyperequiredmeaning
heightintegeryes
hashstringyes
timestringyes
proposerstringyes
tx_countintegeryes
event_countintegeryes

Event

fieldtyperequiredmeaning
event_indexintegeryes
typestringyes
msg_indexinteger | nullyes
modestringnoBeginBlock | EndBlock for block-level events
attributesobject[]yesraw key/value attributes
decodedobject | nullyesproto-JSON of the Aeva typed event, null for other events
appliedbooleanyesderived into state (Aeva event of a successful tx or block-level)

EVMTx

the EVM view of a MsgEthereumTx (M5-B). The Cosmos tx succeeds (code 0) even when the EVM execution reverts — gas is charged and the nonce bumped — so status is the EVM outcome.

fieldtyperequiredmeaning
eth_hashstringyeskeccak256 of the signed RLP, lower-case 0x-hex (the hash wallets know; not the CometBFT hash)
fromstringyesEIP-55 sender
tostring | nullyesEIP-55 recipient; null for a contract creation
valueobjectyesaaeva moved by the call
gas_usedintegeryes
statusintegeryes1 = success, 0 = reverted / failed (0, 1)
revert_reasonstring | nullyesthe ABI-decoded Error(string) of a REVERT — the stable “aeva…” strings of docs/evm/revert-reasons.md for the AE-20 precompiles (a policy denial carries the rule path) — or the VM error; null on success

Tx

fieldtyperequiredmeaning
hashstringyes
heightintegeryes
tx_indexintegeryes
codeintegeryes
codespacestringyes
raw_logstringnopresent only when code != 0
gas_wantedintegeryes
gas_usedintegeryes
msgsobject[]yesmessages as proto-JSON objects with @type
feeobject[]yesthe fee paid ({denom, amount} pairs; empty for a fee-less tx) — AEVA (aaeva) is the gas token (ADR-016 §2)
block_timestringyes
evmobject | nullyesthe EVM view of a MsgEthereumTx; null for every other tx
eventsEvent[]yes

AssetSummary

fieldtyperequiredmeaning
issuance_lockedbooleanyesthe issuer ended issuance irreversibly (MsgLockIssuance); Redeem and transfers unaffected
meta_hashstringyeshex of the asset’s off-chain document hash; "" when the issuer set none (lets a reader find an asset by its declared document)
idstringyes
issuerstringyes
statusstringyes
kind_countintegeryes
created_heightintegeryes
created_atstringyes

Kind

fieldtyperequiredmeaning
multiplierintegeryesthe SPLIT presentation multiplier (1 = none); raw state never changes (M2)
effective_supplyobjectyessupply × multiplier
bridgeablebooleanyesthe issuer allows units of this kind over a RIGHT_OUT bridge route (RH-3, v0.12.0); a route also needs an OPEN effective policy
kind_idintegeryes
classstringyes
decimalsintegeryes
bundlebooleanyes
transferablebooleanyes
termobject | nullyes
policy_overrideobject | nullyes
effective_policyobjectyespolicy_override when set, else the asset policy (chain EffectivePolicy)
policy_sourcestringyes(ASSET, KIND_OVERRIDE)
supplyAmountyes
holder_countintegeryes
ae20_addressstringyesthe AE-20 Right precompile of (asset, kind) — keccak256(“aeva/right/v1” || asset_id || uint32_be(kind_id))[12:], EIP-55 (decision 114); balanceOf there is the transferable units

Asset

fieldtyperequiredmeaning
idstringyes
issuerstringyes
statusstringyes
policyobjectyes
rolesobjectyes
meta_hashstringyeshex, empty when unset
settlement_denomstringyes
nonceintegeryes
kind_countintegeryes
issuance_lockedbooleanyesthe issuer ended issuance irreversibly (MsgLockIssuance)
liens_allowedbooleanyesthe operator role may create liens (decision 88)
distribution_denomsstring[]yesthe x/payout distribution denom allowlist (decision 101)
accrualsAccrual[]yesone accrual per (kind, denom) with its residue (decision 98)
created_heightintegeryes
created_tx_hashstringyes
created_atstringyes
updated_heightintegeryes
kindsKind[]yes
latest_invariant_checkobject | nullyes
bundle_addressstringyesthe AE-20 Bundle precompile of the asset — keccak256(“aeva/bundle/v1” || asset_id)[12:], EIP-55 (decision 114); balanceOf there is the transferable whole units

Lock

fieldtyperequiredmeaning
refstringyes
unitsAmountyes

Holder

fieldtyperequiredmeaning
holderstringyes
unitsAmountyes
encumberedAmountyes
locksLock[]yes
encumbrancesPositionEncumbrance[]yestyped breakdown of the ACTIVE encumbrances behind the encumbrance/ locks (decision 93)

Accrual

fieldtyperequiredmeaning
kind_idintegeryes
denomstringyes
indexstringyescumulative scaled income per unit (× 10^18), decimal string
carry_scaledstringyesscaled remainder carried into the next distribution (< supply)
total_distributedAmountyes
total_paidAmountyes
distributions_countintegeryes
module_heldAmountyes
sum_claimableAmountyes
carryAmountyes
residuestringyesmodule_held − Σ claimable − carry; the per-holder floor residue, reported not swept
updated_heightintegeryes

Distribution

fieldtyperequiredmeaning
heightintegeryes
tx_indexintegeryes
event_indexintegeryes
kind_idintegeryes
denomstringyes
payerstringyes
amountAmountyes
new_indexstringyes
carry_scaledstringyes
supplyAmountyes
tx_hashstringyes
block_timestringyes

ClaimableEntry

fieldtyperequiredmeaning
routed_fromstringyesset on a routed entry (M3) — the holder whose locked units route income here; "" for the account’s own accrual
refstringyesthe lock ref of the route (“encumbrance/” | “delegation/”); "" for own entries
asset_idstringyes
kind_idintegeryes
denomstringyes
pendingAmountyes
accruedAmountyes
totalAmountyes

PositionEncumbrance

fieldtyperequiredmeaning
idintegeryes
kindstringyes(pledge, lien, lockup)
beneficiarystringyesempty for lockups
unitsAmountyes
statusstringyes(active, released, exercised, expired)
expirystring | nullyes
holder_release_afterstring | nullyes

Encumbrance

fieldtyperequiredmeaning
income_to_beneficiarybooleanyesthe pledge routes its units’ income to the beneficiary while active (M3)
idintegeryes
kindstringyes(pledge, lien, lockup)
asset_idstringyes
kind_idintegeryes
holderstringyes
unitsAmountyes
beneficiarystringyesempty for lockups
holder_release_afterstring | nullyesthe holder may release after this block time; null = never (decision 85)
exercisablebooleanyes
expirystring | nullyes
evidence_hashstringyeshex; 32 bytes for liens, may be empty otherwise
statusstringyes(active, released, exercised, expired)
created_heightintegeryes
created_tx_hashstringyes
created_atstringyes
resolved_heightinteger | nullyes
updated_heightintegeryes

EncumbranceTimelineEntry

fieldtyperequiredmeaning
eventstringyes(created, released, exercised, expired)
heightintegeryes
block_timestringyes
tx_hashstring | nullyesnull for the EndBlock sweep
actorstring | nullyes
actor_rolestring | nullyes(holder, operator, issuer, releaser, beneficiary, protocol)
unitsobject | nullyes

Account

fieldtyperequiredmeaning
delegationsDelegation[]yes
voting_powerVotingPower[]yes
addressstringyesthe canonical bech32 form (whichever form the request used)
evm_addressstring | nullyesthe EIP-55 0x form of the same 20-byte key; null for 32-byte module accounts
assetsobject[]yes
locksobject[]yes
pending_settlementsSettlement[]yes
attestationsAttestation[]yes
claimableClaimableEntry[]yesclaimable income per (asset, kind, denom) — pending + accrued (decision 104)
latest_block_timestringyes

Attestation

fieldtyperequiredmeaning
typestringyes
attesterstringyes
expirystringyes
revokedbooleanyes
evidence_hashstringyeshex, empty when unset
livebooleanyesnot revoked and expiry > latest_block_time
updated_heightintegeryes

Settlement

fieldtyperequiredmeaning
cancel_reasonstringyes"" for a party’s cancel; “LIQUIDATION” when x/waterfall cancelled the PENDING settlement of a liquidating asset (M2)
idintegeryes
proposerstringyes
counterpartystringyes
legsobject[]yesproto-JSON aeva.settlement.v1.Leg objects (direction + right | coin)
expirystringyes
statusstringyes(STATUS_PENDING, STATUS_SETTLED, STATUS_CANCELLED, STATUS_EXPIRED)
memo_hashstringyeshex, empty when unset
created_heightintegeryes
created_tx_hashstringyes
created_atstringyes
updated_heightintegeryes
timelineobject[]nopresent on /v1/settlements/{id}; proposed then settled | cancelled | expired

AssetLiquidation

fieldtyperequiredmeaning
asset_idstringyes
statusstringyes
waterfallobject[]yes
liquidationobject | nullyes
redemption_poolsobject[]yes

BridgeRoute

fieldtyperequiredmeaning
route_idstringyes
remote_domainintegeryes
remote_contractstringyes0x bytes32 remote warp router
directionstringyes(DIRECTION_NATIVE_OUT, DIRECTION_SYNTHETIC_IN, DIRECTION_RIGHT_OUT)
local_denomstringyes
statusstringyes(ROUTE_STATUS_ACTIVE, ROUTE_STATUS_PAUSED)
window_secondsintegeryes
outbound_limitAmountyes
inbound_limitAmountyes
warp_token_idstringyes
displaystringyes
exponentintegeryes
outboundAmountyes
inboundAmountyes
outstandingAmountyesNATIVE_OUT — outbound − inbound (the expected escrow, I8); SYNTHETIC_IN — inbound − outbound (the expected synthetic supply)
outbound_usedAmountyes
inbound_usedAmountyes
created_heightintegeryes
updated_heightintegeryes
transfersintegeryes
asset_idstringyesRIGHT_OUT (RH-3) — the Aeva asset whose units the route moves (” for coin routes)
kind_idintegeryesRIGHT_OUT — the right kind (ignored when bundle)
bundlebooleanyesRIGHT_OUT — the route moves whole bundles (one unit of every bundle kind)
escrow_addressstringyesRIGHT_OUT — the escrow account holding the bridged-out units (I8b — escrow units == outbound − inbound); it accrues their income
income_sweptobjectyesRIGHT_OUT — Σ EventEscrowIncomeSwept per denom (governance moved the escrow’s income)
i8object | nullyesthe latest I8 reconciliation of this route (chain escrow / synthetic supply vs the indexer’s outstanding); null before the first one

I8Check

fieldtyperequiredmeaning
heightintegeryes
chain_actualstringyes
indexer_actualstringyes
chain_okbooleanyes
evaluatedbooleanyes
agreebooleanyes

BridgeTransfer

fieldtyperequiredmeaning
heightintegeryes
tx_indexintegeryes
tx_hashstringyes
route_idstringyes
directionstringyes(out, in)
statusstringyes(in_flight, completed, rejected)
senderstringyes
recipientstringyes
amountAmountyes
message_idstringyesthe Hyperlane message id; empty for rejected
reasonstringyesrejected only — the failed tx code (bridge/4 route paused, bridge/5 cap exceeded)
block_time_nsintegeryes
event_indexintegeryes
asset_idstringyesa right transfer (RH-3) — the asset; amount is raw units (bundle — whole bundles)
kind_idintegeryes
bundlebooleanyes

Delegation

fieldtyperequiredmeaning
idintegeryes
holderstringyes
asset_idstringyes
kind_idintegeryes
unitsAmountyes
delegatestringyes
untilstringyes
purposesstring[]yes
revocablebooleanyes
endedstringyes"" while active; END_REASON_EXPIRED | END_REASON_REVOKED | END_REASON_RETURNED
created_heightintegeryes
created_tx_hashstringyes
ended_heightinteger | nullyes

VotingPower

fieldtyperequiredmeaning
asset_idstringyes
ownAmountyes
delegated_outAmountyes
delegated_inAmountyes
voting_powerobjectyesown − delegated out + delegated in (VOTE-class kinds; informational — there is no vote module)

ActivityEvent

fieldtyperequiredmeaning
heightintegeryes
tx_indexintegeryes-1 for block-level events
event_indexintegeryes
tx_hashstring | nullyesnull for block-level events (e.g. the settlement expiry sweep)
block_timestringyes
typestringyesfull proto name of the typed event
modestringnoBeginBlock | EndBlock for block-level events
decodedobjectyesproto-JSON of the typed event

InvariantCheck

fieldtyperequiredmeaning
asset_idstringyes
kind_idintegeryes
heightintegeryes
agreebooleanyes
chainobjectyes
indexerobjectyes

AE20Check

one ae20_registry reconciliation row (M5-B) — the indexer’s decision-114 formula address against the chain’s erc20rights registry, introduced in chain 0.9.0. A chain before that, or a binary that does not serve the query, reports evaluated=false (“not evaluated”, ADR-005 rule 6) — never drift.

fieldtyperequiredmeaning
asset_idstringyes
kind_idinteger | nullyesthe Right kind; null for the Bundle row
bundlebooleanyes
heightintegeryes
indexer_addressstringyesthe formula address (EIP-55); empty for a token the chain registers for a kind the indexer does not know
chain_addressstringyesthe chain’s registry answer; empty when not evaluated or missing on the chain
evaluatedbooleanyes
agreebooleanyes
Last updated