NFTs
Mint, transfer, and query NFTs (ERC-721 and ERC-1155) on EVM-compatible chains.
Minting NFTs
Programmatic
const nft = await app.onchain.nft.mint({
contractAddress: "0xMyNFTContract...",
to: "0xrecipient...5678",
tokenURI: "https://api.myapp.com/metadata/1",
chain: "arbitrum",
walletId: "65a1b2c3...",
});
console.log(nft.tokenId); // "1"
console.log(nft.txHash); // "0xabc..."
REST API
curl -X POST http://localhost:3000/onchain/nft/mint \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGci..." \
-d '{
"contractAddress": "0xMyNFTContract...",
"to": "0xrecipient...5678",
"tokenURI": "https://api.myapp.com/metadata/1",
"chain": "arbitrum",
"walletId": "65a1b2c3d4e5f6a7b8c9d0e1"
}'
Response (200):
{
"tokenId": "1",
"txHash": "0xabc123...",
"contractAddress": "0xMyNFTContract...",
"to": "0xrecipient...5678",
"chain": "arbitrum",
"status": "pending"
}
Transferring NFTs
const tx = await app.onchain.nft.transfer({
contractAddress: "0xMyNFTContract...",
from: "0xowner...1234",
to: "0xrecipient...5678",
tokenId: "1",
chain: "arbitrum",
walletId: "65a1b2c3...",
});
curl -X POST http://localhost:3000/onchain/nft/transfer \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGci..." \
-d '{
"contractAddress": "0xMyNFTContract...",
"to": "0xrecipient...5678",
"tokenId": "1",
"chain": "arbitrum",
"walletId": "65a1b2c3d4e5f6a7b8c9d0e1"
}'
Querying NFT Metadata
const metadata = await app.onchain.nft.getMetadata({
contractAddress: "0xMyNFTContract...",
tokenId: "1",
chain: "arbitrum",
});
console.log(metadata.name); // "My NFT #1"
console.log(metadata.description); // "A unique digital asset"
console.log(metadata.image); // "https://..."
console.log(metadata.attributes); // [{ trait_type: "...", value: "..." }]
curl "http://localhost:3000/onchain/nft/0xMyNFTContract.../1?chain=arbitrum" \
-H "Authorization: Bearer eyJhbGci..."
Response (200):
{
"contractAddress": "0xMyNFTContract...",
"tokenId": "1",
"owner": "0xrecipient...5678",
"tokenURI": "https://api.myapp.com/metadata/1",
"metadata": {
"name": "My NFT #1",
"description": "A unique digital asset",
"image": "https://example.com/nft-1.png",
"attributes": [
{ "trait_type": "Rarity", "value": "Legendary" }
]
}
}
Listing NFTs by Owner
const nfts = await app.onchain.nft.getByOwner({
contractAddress: "0xMyNFTContract...",
owner: "0xowner...1234",
chain: "arbitrum",
});
curl "http://localhost:3000/onchain/nft/0xMyNFTContract.../owner/0xowner...1234?chain=arbitrum" \
-H "Authorization: Bearer eyJhbGci..."
ERC-1155 Support
For ERC-1155 (multi-token) contracts, specify the amount:
// Mint multiple copies
await app.onchain.nft.mint({
contractAddress: "0xMyERC1155...",
to: "0xrecipient...",
tokenId: "1",
amount: 100,
chain: "arbitrum",
walletId: "65a1b2c3...",
standard: "erc1155",
});
// Transfer with amount
await app.onchain.nft.transfer({
contractAddress: "0xMyERC1155...",
to: "0xrecipient...",
tokenId: "1",
amount: 10,
chain: "arbitrum",
walletId: "65a1b2c3...",
standard: "erc1155",
});
Metadata Hosting
FluxKit can host NFT metadata for you via the Store wire:
import { store } from "@fluxkitdev/store";
import { onchain } from "@fluxkitdev/onchain";
const app = new FluxKit({
wires: [store(), onchain()],
database: { uri: process.env.MONGODB_URI },
});
// Create metadata and get a URL
const metadataUrl = await app.onchain.nft.createMetadata({
name: "My NFT #1",
description: "A unique digital asset",
image: imageBuffer, // Uploaded via store wire
attributes: [
{ trait_type: "Rarity", value: "Legendary" },
],
});
// => "https://myapp.com/onchain/metadata/abc123"