# 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.*


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://8bit-1.gitbook.io/solibrary/nft-payment-guard.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
