# NFT Payment Guard

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

Transfers

1 NFT from

this collection

Core Candy Machine

Owner: Core Candy Machine Core Program

Candy Guard

Owner: Core Candy Guard Program

GuardsnftPayment- Required Collection- Destination Wallet...

Collection NFT

Mint Account

Owner: Token Metadata Program

Destination Wallet

Owner: System Program

Mint from

*Core Candy Guard Program*

Access Control

Mint from

*Core Candy Machine Program*

Mint Logic

Asset

[React Flow](https://reactflow.dev/)

### Guard Settings <a href="#guard-settings" id="guard-settings"></a>

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

JavaScript

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

API References: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [NftPayment](https://mpl-core-candy-machine.typedoc.metaplex.com/types/NftPayment.html)

### Mint Settings <a href="#mint-settings" id="mint-settings"></a>

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](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#nftpayment) for more details.

Set up a Candy Machine using the NFT Payment Guard

JavaScript

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](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [NftPaymentMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/NftPaymentMintArgs.html)

### Route Instruction <a href="#route-instruction" id="route-instruction"></a>

*The NFT Payment guard does not support the route instruction.*
