# Tezos Core NFT Metadata Schema
## Purpose
The Core NFT Metadata Schema needs to define the base characteristics associated with non-fungible (NFT) tokens on the Tezos blockchain. There are three required categories:
- **Essential Fields:** Extends the metadata fields from TZIP-012 by adding core content elements of an NFT.
- **Business Logic Related:** Describes the restrictions or allowances of the token in order to give clients instructions on how to interact with it.
- **UI Attributes:** Defines data that wallets require to best present the token to end-users.
***Note***: The eventual purpose of this is to define the base fields for NFT (non-fungible) and fungible tokens.
### Essential Fields
Essential Fields includes both metadata that is pre-defined in [TZIP-012](https://gitlab.com/tzip/tzip/-/blob/0c8e9bbf12b0c006ff8114c8817a44473f536a75/proposals/tzip-12/tzip-12.md#token-metadata-values), alongside a number of additional fields, that combined, represent the content of the token. The pre-defined metadata from TZIP-012 is as follows:
```
{
"name": <string>,
"symbol": <string>,
"decimals": <number>
}
```
- **name**: The display name for the token.
- **symbol**: A short identifier for the token. This is an optional field for an NFT.
- **decimal**: An integer that defines the position of the decimal point in token balances. Considering that NFTs will normally be singletons, the decimal integer will be 0.
Additionally, NFTs will require other content fields:
```
{
"artifactUri": <string>,
"displayUri": <string>,
"description": <string>,
"author": <array>
}
```
- **artifactUri:** The artifact URI is the location of the underlying object that the NFT represents. It would be wrong to assume that every NFT is associated with an image, as an NFT could be representing an audio file, video file, or even a document.
- **displayUri:** The display URI is for wallets and client applications to have an image to present to end-users in their UIs.
- **thumbnailUri:** The thumbnail URI is for wallets and client applications to have a scaled down image to present to end-users in their UIs, at a maximum size of 350x350px.
- **description:** The description serves as a means to allow the creator to add context to the artifact associated with the NFT.
- **author:** The author metadata serves as a contextual marker of the creator(s) of the NFT. In the future, this could be served through the use of credentialing, but this allows an immediate implicit association to a particular creator.
### Business Logic Related
Business Logic Related includes any restrictions or allowances on both the token and token owner. This is separate from the content or context of the token, but rather allows token creators to communicate the core charactaristics of the token itself:
```
{
"nonTransferable": <bool>,
"booleanAmount": <bool>
}
```
***Note***: Boolean field names where chosen such that the default is always false and don't need to be included in the json unless they are being defined as `true`
- **nonTransferable:** All NFTs will be transferable by default to allow end-users to send them to other end-users. However, this attribute exists to serve in special cases where owners will not be able to transfer the token.
- **booleanAmount:** Describes whether an account can have an amount of exactly 0 or 1. (The purpose of this field is for wallets to determine whether or not to display balance information and an amount field when transferring.)
### UI Attributes
UI Attributes include any information that wallets need to properly display tokens:
```
{
"symbolPreference": <bool>
}
```
- **symbolPreference:** This attribute allows wallets to decide whether or not a symbol should be displayed in place of a `name`. However, in the case of NFTs, symbols are not a requirement and therefore `symbolPreference` should default to `false`.
## Additional Resources
- [The Token Taxonomy Framework](https://wiki.hyperledger.org/download/attachments/24775128/TTF-Presentation.pdf?version=1&modificationDate=1574277519000&api=v2) (IBM, Hyperledger, Microsoft, Intel)
## Future State
Different NFTs that represent different types of tokens will have attributes beyond this core set. For example, an NFT representing ownership over a song would have a `runtime` or `codec` attribute which are both inherent to that type of NFT.