---
title: Wallets
description: BlindPay-managed wallets that let customers store, send, and receive USDC and USDT on Arbitrum and Polygon.
beta: true
---

::c-alert{icon="circle-info" variant="warning"}
**Beta Feature**: Wallets are currently in beta and only available for `development` instances.
::

## What it is

A wallet is a BlindPay-managed account that lets your customers store stablecoins. You can create one or more wallets per customer to hold, send, and receive digital assets directly within BlindPay. For externally owned, customer-controlled wallets, see [Blockchain Wallets](/docs/essentials/blockchain-wallets).

## How it works

Wallets support the following stablecoins:

- **USDC**
- **USDT**
- **USDB** (development instances only)

Available chains:

| Environment | Chains                  |
| ----------- | ----------------------- |
| Development | Arbitrum Sepolia, Polygon Amoy (testnet) |
| Production  | Arbitrum, Polygon (mainnet)              |

## Prerequisites

::c-prerequisites
::

A customer must exist before creating a wallet.

## Create a wallet

::c-auth-note{customer}
::

::c-code-group

```bash [cURL]
curl https://api.blindpay.com/v1/instances/in_000000000000/customers/re_000000000000/wallets \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "network": "polygon",
  "external_id": "your-database-id",
  "name": "Blindpay Wallet"
}'
```

::

## Receive stablecoins

You can receive funds from any external blockchain wallet by sending stablecoins to the wallet address provided by BlindPay. Retrieve the wallet details using the API and share the wallet address with the external sender.

You can check the required fields in the [BlindPay API Docs](https://api.blindpay.com/reference#tag/wallets/GET/v1/instances/{instance_id}/customers/{customer_id}/wallets/{id}){target="\_blank"}.

::c-alert{icon="circle-info"}
**Remember**: replace `YOUR_SECRET_TOKEN` with your API key, `in_000000000000` with your instance ID, `re_000000000000` with your customer ID and `bl_000000000000` with the wallet ID.
::

::c-code-group

```bash [cURL]
curl https://api.blindpay.com/v1/instances/in_000000000000/customers/re_000000000000/wallets/bl_000000000000 \
  --request GET \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
```

::

Every time stablecoins are deposited into the wallet, a `wallet.inbound` [webhook event](/docs/essentials/webhooks) is triggered with the following payload:

::c-code-group

```json [wallet.inbound]
{
  "id": "",
  "address": "",
  "network": "base",
  "token": {
    "address": "",
    "id": "",
    "symbol": "USDC",
    "amount": 1
  }
}
```

::

## Send stablecoins

You can send funds from a BlindPay wallet to other internal BlindPay wallets or external blockchain wallets. Follow these two steps:

1. **Create a transfer quote** — preview the amounts and fees before executing. See the [transfer quotes documentation](/docs/essentials/transfer-quotes#create-a-transfer-quote) for details.
2. **Execute the transfer** — confirm and move the funds using the quote you created. You have **15 seconds** to execute the transfer before the quote expires. See the [transfers documentation](/docs/essentials/transfers#execute-a-transfer) for details.

## Collect fiat

You can collect fiat currency and receive the equivalent stablecoins directly into the wallet. The process is the same as a traditional [payin](/docs/essentials/payins), with one key difference: use `wallet_id` instead of `blockchain_wallet_id` when creating the payin quote.

::c-alert{icon="circle-info"}
**Remember**: replace `YOUR_SECRET_TOKEN` with your API key, `in_000000000000` with your instance ID and `bl_000000000000` with the wallet ID.
::

::c-code-group

```bash [cURL]
curl https://api.blindpay.com/v1/instances/in_000000000000/payin-quotes \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "wallet_id": "bl_000000000000",
  "currency_type": "sender",
  "cover_fees": true,
  "request_amount": 1000,
  "payment_method": "pix",
  "token": "USDC",
  "is_otc": false
}'
```

::

After generating the payin quote, continue to the [payins documentation](/docs/essentials/payins) to initiate the payin.

## Send fiat

You can use the stablecoins stored in the wallet to send fiat currency to bank accounts. First, create a payout quote exactly as described in the [payout quotes documentation](/docs/essentials/payout-quotes#create-a-payout-quote).

Then, when creating the payout, use the BlindPay wallet address as the `sender_wallet_address`.

::c-alert{icon="circle-info"}
**Remember**: replace `YOUR_SECRET_TOKEN` with your API key, `in_000000000000` with your instance ID, `qu_000000000000` with the quote ID and `sender_wallet_address` with the address from your BlindPay wallet.
::

::c-code-group

```bash [cURL]
curl https://api.blindpay.com/v1/instances/in_000000000000/payouts/evm \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "quote_id": "qu_000000000000",
  "sender_wallet_address": "0x123...890"
}'
```

::

## Related

- [Blockchain Wallets](/docs/essentials/blockchain-wallets) · [Customers](/docs/essentials/customers) · [Payins](/docs/essentials/payins) · [Payouts](/docs/essentials/payouts)
