Available Guards

NFT Payment Guard

Last updated March 10, 2026

The NFT Payment guard allows minting by charging the payer an NFT from a specified collection, transferring it to a predefined destination wallet instead of burning it.

Overview

The NFT Payment guard allows minting by charging the payer an NFT from a specified NFT collection. The NFT will be transferred to a predefined destination.

If the payer does not own an NFT from the required collection, minting will fail.

Guard Settings

The NFT Payment guard contains the following settings:

  • Required Collection: The mint address of the required NFT Collection. The NFT we use to pay with must be part of this collection.
  • Destination: The address of the wallet that will receive all NFTs.

Set up a Candy Machine using the NFT Payment Guard

create(umi, {
// ...
guards: {
nftPayment: some({
requiredCollection: requiredCollectionNft.publicKey,
destination: umi.identity.publicKey,
}),
},
});

API References: create, NftPayment

Mint Settings

The NFT Payment guard contains the following Mint Settings:

  • Destination: The address of the wallet that will receive all NFTs.
  • Mint: The mint address of the NFT to pay with. This must be part of the required collection and must belong to the minter.
  • Token Standard: The token standard of the NFT used to pay.
  • Token Account (optional): You may optionally provide the token account linking the NFT with its owner explicitly. By default, the associated token account of the payer will be used.
  • Rule Set (optional): The Rule Set of the NFT used to pay, if we are paying using a Programmable NFT with a Rule Set.

Note that, if you're planning on constructing instructions without the help of our SDKs, you will need to provide these Mint Settings and more as a combination of instruction arguments and remaining accounts. See the Core Candy Guard's program documentation for more details.

Set up a Candy Machine using the NFT Payment Guard

You may pass the Mint Settings of the NFT Payment guard using the mintArgs argument like so.

import { TokenStandard } from "@metaplex-foundation/mpl-token-metadata";
mintV1(umi, {
// ...
mintArgs: {
nftPayment: some({
destination,
mint: nftToPayWith.publicKey,
tokenStandard: TokenStandard.NonFungible,
}),
},
});

API References: mintV1, NftPaymentMintArgs

Route Instruction

The NFT Payment guard does not support the route instruction.

Notes

  • Unlike the NFT Burn guard, this guard transfers the NFT to a destination wallet rather than burning it. The NFT remains in circulation.
  • The destination wallet must be specified in both the guard settings and the mint arguments.
  • If the payer does not own an NFT from the required collection, the mint transaction will fail.
  • When paying with a Programmable NFT that has a Rule Set, include the ruleSet in the mint arguments to ensure the transfer complies with the NFT's authorization rules.
  • This guard uses Token Metadata NFTs (not Core Assets) for payment and collection verification.