# 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 %}


---

# 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://docs.usemeta.fi/unity-sdk/sdk-reference/checkout.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.
