GraphQL asset indexer
Multi-chain (TRN + EVM) asset indexer exposing accounts, NFTs (ERC-721 + ERC-1155), fungible tokens, and metadata via a single Relay-spec GraphQL endpoint.
Endpoint stability
The endpoint at the time of capture is on a raw AWS API Gateway URL (*.execute-api.us-west-2.amazonaws.com), which is not a stable production hostname. Treat this reference as a snapshot of the schema captured 2026-05-02; the URL itself may change. The schema shape (accounts, NFT 721/1155, generic tokens, Relay pagination) is the stable contract.
- Endpoint
https://adx1wewtnh.execute-api.us-west-2.amazonaws.com/- Transport
- HTTPS POST, JSON body `{ query, variables, operationName }`
- Auth
- None observed (open POST). Treat as a public read-only API; do not embed mutations or PII.
- Captured
- 2026-05-02
- Operations
- 8 queries · 0 mutations · 0 subscriptions
- Type counts
- 14 objects · 2 interfaces · 2 inputs · 0 unions · 0 enums · 12 scalars
Why this exists
TRN exposes assets at three levels:
- On-chain primary source — the
nftandassetspallets, and the ERC-721/ERC-1155/ERC-20 precompiles. These are authoritative but require you to walk every collection. - Indexer (this API) — flattens the on-chain state into a query-friendly cross-chain view: "every NFT this address owns across TRN + Ethereum", "balance of asset X for accounts A,B,C", with Relay-spec cursor pagination.
- Asset Register — a higher-level GraphQL service that overlays relationships on top of ownership (which child is equipped to which parent). Operated by Futureverse — see the Migration playbook for status.
This indexer lives between (1) and (3): cheaper queries than walking pallets, more raw than the relationship-aware Asset Register.
Top-level operations
| Field | Returns | Use it for |
|---|---|---|
node | Node | Refetch any node by Relay id (the universal escape hatch). |
account | Account | Resolve an account by EOA address. |
nft | NFT | Fetch a single NFT by chain location + tokenId. |
nfts | NFTConnection | Cursor-paginated list of NFTs for one or more addresses across chains. |
nftsByTokenIds | [NFT] | Bulk fetch NFTs by (chainLocation, tokenId) pairs — efficient batch read. |
genericToken | GenericToken | Fungible token metadata (symbol, decimals) at a chain location. |
genericTokenBalance | GenericTokenBalance | Single balance: token × address. |
genericTokenBalances | GenericTokenBalanceConnection | Matrix balance read: tokens × addresses (use for a portfolio view). |
Worked examples
List every NFT held by a wallet across chains
query AddressNfts($addr: Address!, $first: Int, $cursor: String) {
nfts(addresses: [$addr], first: $first, after: $cursor) {
pageInfo { hasNextPage endCursor }
edges {
node {
id
tokenId
assetType
collection { name chainId chainType location }
metadata { uri attributes }
}
}
}
}Resolve a specific NFT by chain location + token id
query OneNft($loc: BlockchainLocationInput!, $tokenId: String!) {
nft(chainLocation: $loc, tokenId: $tokenId) {
id
tokenId
assetType
metadata { uri attributes }
... on NFT721 { owner { address } }
... on NFT1155 {
balanceOf(address: "0x...") { balance }
}
}
}Read fungible balances for a portfolio
query Balances($addrs: [Address!]!, $tokens: [BlockchainLocationInput!]!) {
genericTokenBalances(addresses: $addrs, chainLocations: $tokens) {
edges {
node {
amount
holder { address }
genericToken { symbol decimals chainId chainType location }
}
}
}
}Schema reference
Object types
Account—Collection—GenericToken—GenericTokenBalance—GenericTokenBalanceConnection—GenericTokenBalanceEdge—Metadata—NFT1155—NFT1155Balance—NFT721—NFTConnection—NFTEdge—PageInfo—Query—
Interfaces
Input types
Scalars
Address— An ethereum addressBoolean— TheBooleanscalar type representstrueorfalse.ChainId— Chain ID of the chainChainLocation— Location on a blockchain, such as a smart contract addressChainType— The chain type. Either evm or rootGenericTokenLocation— Generic collection location on a chainID— TheIDscalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON reInt— TheIntscalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.MetadataAttributes—MetadataProperties—MetadataRawAttributes—String— TheStringscalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to
Raw SDL
The SDL printed from introspection is on disk at docs/_collect/raw/asm-graphql/schema.graphql. The full introspection JSON is at docs/_collect/raw/asm-graphql/introspection.json. Either is suitable as input to graphql-codegen.
Stability notes
- Read-only — there are no mutations, so the API is safe to introspect without changing state.
- No auth observed — POST returns
200for any payload, so this is intended as a public read-only API. Do not assume that will hold; design clients to handle a401gracefully. - Endpoint is on a raw API Gateway URL. A custom-domain mapping could move the same backend to a friendlier hostname at any time. Keep the URL configurable.
https://adx1wewtnh.execute-api.us-west-2.amazonaws.com/ on 2026-05-02.