How to format the off-chain metadata for an NFT on Solana
Some NFT metadata is stored on Solana (on-chain), while some is stored off of Solana (off-chain). We discuss how to format the off-chain NFT metadata for an NFT.
Creating an NFT and some background
You can create an NFT with our endpoint here.
Note that an NFT has a few on-chain attributes for metadata:
The uri
is the URL that contains all of the off-chain data, such as attributes, the image, etc. Thus, in Solana, the image is NOT stored on Solana’s blockchain.
The attribute nft_upload_method
offers two options: LINK
and S3
.
The S3
will automatically upload your NFT off-chain data to our S3 bucket and the uri
of the NFT to our S3 link. You can use this for testing purposes, but we don’t recommend using it for live NFTs, although you can.
The LINK
method directly uploads the link you provide as a value for the attribute for nft_url
as the uri
of the NFT.
However, for the image to show and the metadata to be properly recognized by Solana platforms, then you must format the file you uploaded correctly.
First, it must be JSON formatted. Second, it must follow the format as outlined in the next section.
The JSON Schema
See this JSON schema example for how to format the JSON for your NFT.
{
"name": "Solflare X NFT",
"symbol": "",
"description": "Celebratory Solflare NFT for the Solflare X launch",
"seller_fee_basis_points": 0,
"image": "https://www.arweave.net/abcd5678?ext=png",
"animation_url": "https://www.arweave.net/efgh1234?ext=mp4",
"external_url": "https://solflare.com",
"attributes": [
{
"trait_type": "web",
"value": "yes"
},
{
"trait_type": "mobile",
"value": "yes"
},
{
"trait_type": "extension",
"value": "yes"
}
],
"collection": {
"name": "Solflare X NFT",
"family": "Solflare"
},
"properties": {
"files": [
{
"uri": "https://www.arweave.net/abcd5678?ext=png",
"type": "image/png"
},
{
"uri": "https://watch.videodelivery.net/9876jkl",
"type": "unknown",
"cdn": true
},
{
"uri": "https://www.arweave.net/efgh1234?ext=mp4",
"type": "video/mp4"
}
],
"category": "video",
"creators": [
{
"address": "SOLFLR15asd9d21325bsadythp547912501b",
"share": 100
}
]
}
}
What the JSON fields do
This section was informed by this article.