Skip to content

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:

  1. On-chain primary source — the nft and assets pallets, and the ERC-721/ERC-1155/ERC-20 precompiles. These are authoritative but require you to walk every collection.
  2. 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.
  3. 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

FieldReturnsUse it for
nodeNodeRefetch any node by Relay id (the universal escape hatch).
accountAccountResolve an account by EOA address.
nftNFTFetch a single NFT by chain location + tokenId.
nftsNFTConnectionCursor-paginated list of NFTs for one or more addresses across chains.
nftsByTokenIds[NFT]Bulk fetch NFTs by (chainLocation, tokenId) pairs — efficient batch read.
genericTokenGenericTokenFungible token metadata (symbol, decimals) at a chain location.
genericTokenBalanceGenericTokenBalanceSingle balance: token × address.
genericTokenBalancesGenericTokenBalanceConnectionMatrix balance read: tokens × addresses (use for a portfolio view).

Worked examples

List every NFT held by a wallet across chains

graphql
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

graphql
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

graphql
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

Interfaces

Input types

Scalars

  • Address — An ethereum address
  • Boolean — The Boolean scalar type represents true or false.
  • ChainId — Chain ID of the chain
  • ChainLocation — Location on a blockchain, such as a smart contract address
  • ChainType — The chain type. Either evm or root
  • GenericTokenLocation — Generic collection location on a chain
  • ID — The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON re
  • Int — The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.
  • MetadataAttributes
  • MetadataProperties
  • MetadataRawAttributes
  • String — The String scalar 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 200 for any payload, so this is intended as a public read-only API. Do not assume that will hold; design clients to handle a 401 gracefully.
  • 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.
Schema captured by introspecting https://adx1wewtnh.execute-api.us-west-2.amazonaws.com/ on 2026-05-02.

Curated independently by Codeology. Source-attributed reference for The Root Network. Not affiliated with Futureverse / TRN Labs.