Solana CookbookTokens
Tokens created with the Metaplex Token Metadata Program have a metadata account that stores the token's name, symbol, URI, and other information. The metadata account is a PDA derived from the mint address.
Fetch Metadata for a Single Token
Kit
import { address, createSolanaRpc } from "@solana/kit";import {findMetadataPda,fetchMetadata,fetchMaybeMetadata,fetchMetadataFromSeeds} from "@metaplex-foundation/mpl-token-metadata-kit";const rpc = createSolanaRpc("https://api.mainnet.solana.com");// Example: USDC mint addressconst mintAddress = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");// Option 1: Fetch directly from mint (simplest)const metadata = await fetchMetadataFromSeeds(rpc, { mint: mintAddress });console.log("Token Name:", metadata.data.name);console.log("Token Symbol:", metadata.data.symbol);console.log("Metadata URI:", metadata.data.uri);console.log("Update Authority:", metadata.data.updateAuthority);console.log("Is Mutable:", metadata.data.isMutable);// Check optional fieldsif (metadata.data.creators.__option === "Some") {console.log("Creators:", metadata.data.creators.value);}// Option 2: Safe fetch (returns exists: false if not found)const [metadataPda] = await findMetadataPda({ mint: mintAddress });const maybeMetadata = await fetchMaybeMetadata(rpc, metadataPda);if (maybeMetadata.exists) {console.log("Found metadata:", maybeMetadata.data.name);} else {console.log("No metadata found for this mint");}
Fetch Off-Chain JSON Metadata
The uri field in the on-chain metadata points to a JSON file containing
extended metadata like the image URL, description, and attributes.
Kit
import { address, createSolanaRpc } from "@solana/kit";import { fetchMetadataFromSeeds } from "@metaplex-foundation/mpl-token-metadata-kit";const rpc = createSolanaRpc("https://api.mainnet.solana.com");const mintAddress = address("YourMintAddressHere");// Fetch on-chain metadataconst metadata = await fetchMetadataFromSeeds(rpc, { mint: mintAddress });// Fetch off-chain JSON metadataif (metadata.data.uri) {const response = await fetch(metadata.data.uri);const jsonMetadata = await response.json();console.log("Name:", jsonMetadata.name);console.log("Description:", jsonMetadata.description);console.log("Image:", jsonMetadata.image);}
Not all tokens have Metaplex Token Metadata. Tokens using Token Extensions (Token-2022) may store metadata directly on the mint using the metadata extension. See Token Extensions Metadata.
Is this page helpful?