Data model — the directory
Every Hive Engine NFT collection encodes name, image, and attributes in its own property conventions. The display-mapping layer is a small, versioned adapter from a collection's raw properties to one normalized object — this is the actual 'directory,' not the raw balances.
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.