> For the complete documentation index, see [llms.txt](https://docs.usemeta.fi/unity-sdk/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.usemeta.fi/unity-sdk/sdk-reference/checkout.md).

# Checkout

{% hint style="info" %}
This function triggers a modal for the user to confirm the transfer
{% endhint %}

## Description

The checkout function is designed to be the simplest way for your users to purchase items on your website using crypto. Once users complete their purchase, you will receive a webhook at the URL that you configure.

## Details

### Signature

```csharp
Task Checkout(dynamic args, System.Action<dynamic> callback = null)
```

### Arguments

<table><thead><tr><th width="258">Parameter</th><th width="114">Type</th><th>Definition</th></tr></thead><tbody><tr><td><code>callback?</code></td><td>Action&#x3C;dynamic></td><td>Function that will be invoked once the transaction is complete</td></tr><tr><td><code>args.treasuryAddress</code></td><td>String</td><td>Address to send funds to. This should be your treasury address.</td></tr><tr><td><code>args.cost</code></td><td>String</td><td>Amount to send in <strong>display units</strong> of the currency. So if you want the user to pay 0.5 ETH, pass in '0.5' to this field.</td></tr><tr><td><code>args.currency</code></td><td>Metafi.Unity.Asset</td><td>Asset object of the currency you want to accept as the mode of payment. </td></tr><tr><td><code>args.itemDescription</code></td><td>String</td><td>Description of the item that you would like users to be shown on the Checkout screen.</td></tr><tr><td><code>args.webhookMetadata?</code></td><td>String</td><td><p>Metadata you want to be sent along with your webhook. Please validate this data on your webhook notification endpoint before using. Eg. </p><p><code>'{productName:"Crew T-shirt",sku:AX19281BN}'</code></p></td></tr></tbody></table>

### Return Value

None

### Webhook

You can configure a POST Webhook URL in the developer portal that will be invoked once the funds have been transferred to your treasury address.&#x20;

The following is the format of the webhook call body:

```json
{
    "webhookMetadata": "webhookMetadata",  // metadata passed in during function input
    "currencyMetadata": {
        "exchangeRate": 0.005,
        "fiatCurrency": "usd",
        "cryptoCurrency": "eth_eth"
    },
    "value": "1.5",
    "gasFees": "0.005",
    "from": "0x40562Cf2E90f23b3969d782B5c8f134A77069b49",
    "to": "0xfFEaf294106b610d0cdD4afaAfe861563c72BB76",  // your treasury wallet address
}
```

## Example

{% code lineNumbers="true" %}

```csharp
using System;
using Metafi.Unity;

public class CheckoutButton : MonoBehaviour {
    public async void Checkout(){
        await MetafiProvider.Instance.Checkout( new {
            cost = "0.001",
            currency = Assets.MUMBAI_MATIC,
            itemDescription = "Pet NFT",
            treasuryAddress = "your-treasury-address",
            webhookMetadata = "{\"func\":\"buyNft\"}",
        }, 
        ((System.Action<dynamic>) (result => {
            Debug.Log("Checkout complete, result: " + result.ToString());
        })));
    }
}

```

{% endcode %}
