Response shapes are pre-release and may change.

Raw properties

Every instance carries whatever properties its collection defined via create/addProperty — there's no shared schema across collections. This is what a wallet gets with zero interpretation:

instances.properties (raw)
{
  "symbol": "MYNFT",
  "nft_id": 1,
  "properties": {
    "Name": "Cool NFT #1",
    "thumb": "https://images.example/mynft/1.png",
    "rarity": "rare",
    "speed": 87
  }
}

Mapped: normalized display

A per-symbol display adapter (versioned, stored in display_mappings) renders the same instance into one shape every consumer can read without knowing the collection's conventions:

display (mapped)
{
  "display": {
    "name": "Cool NFT #1",
    "image": "https://images.example/mynft/1.png",
    "collection": "My Collection",
    "attributes": {
      "rarity": "rare",
      "speed": 87
    }
  }
}

Unmapped: display: null

Mappings are seeded coverage-first (most-held symbols get one first) and are meant to be community-contributable over time. The API never blocks on coverage — an unmapped symbol still serves its raw properties, just with no normalized object yet:

display (unmapped)
{
  "display": null
}

Coverage is a published trust metric, not a hidden gap — see display-mapping coverage on the Status page.