# Asset Payment Multi

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

The guard is similar to the [Asset Payment Guard](https://developers.metaplex.com/core-candy-machine/guards/asset-payment) but can accept more than one asset to pay with.

Core Candy Machine

Owner: Core Candy Machine Core Program

Candy Guard

Owner: Core Candy Guard Program

GuardsassetPayment- Required Collection- Destination Wallet- Number...

Collection

Owner: Core Program

Destination Wallet

Owner: System Program

Transfers

n Asset(s) from

this collection

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 Asset Payment guard contains the following settings:

* **Required Collection**: The mint address of the required Collection. The Asset we use to pay with must be part of this collection.
* **Destination**: The address of the wallet that will receive all Assets.
* **Number**: The amount of assets that have to be paid.

Set up a Candy Machine using the Asset Payment Multi Guard

JavaScript

```
create(umi, {
  // ...
  guards: {
    assetPaymentMulti: some({
      requiredCollection: requiredCollection.publicKey,
      destination: umi.identity.publicKey,
      num: 2
    }),
  },
});
```

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

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

The Asset Payment guard contains the following Mint Settings:

* **\[Asset Adress]**: An array of the Assets to pay with. These must be part of the required collection and must belong to the minter.
* **Collection Address**: The Address of the Collection that is used for payment.
* **Destination**: The address of the wallet that will receive all Assets.

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#assetpayment) for more details.

Set up a Candy Machine using the Asset Payment Multi Guard

JavaScript

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

```

mintV1(umi, {
  // ...
  mintArgs: {
    assetPaymentMulti: some({
      requiredCollection: publicKey(requiredCollection),
      destination,
      assets: [firstAssetToSend.publicKey, secondAssetToSend.publicKey],
      num: 2
    }),
  },
});
```

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

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

*The Asset Payment Multi guard does not support the route instruction.*
