---
title: Payins
description: Convert fiat money to stablecoins by moving funds from a sender's bank account to a customer's wallet.
---

## What it is

A payin is an operation that moves funds from the sender's bank account to the customer's blockchain wallet. You can also receive stablecoins directly into a [BlindPay-managed wallet](/docs/essentials/wallets#collect-fiat) by using `wallet_id` instead of `blockchain_wallet_id` when creating the payin quote.

## How it works

A payin can only be executed if a payin quote was created previously, and you have 5 minutes to initiate the payin before the quote expires.

::c-alert{icon="circle-info"}
For US payments, customers with enabled [virtual accounts](/docs/essentials/virtual-accounts) will have their own virtual account details displayed. For customers without virtual accounts, BlindPay will generate a unique memo code and provide BlindPay's bank account details for the transaction.
::

### Settlement times

On development instances all payins are automatically paid 30 seconds after initiation.

On production, these are the times the system waits for the payment to arrive:

| Payment method | Currency | Waiting time for arrival | Data to share to the end user                                                   |
| -------------- | -------- | ------------------------ | ------------------------------------------------------------------------------- |
| ach            | USD 🇺🇸   | 5 business days          | `memo_code` (ignored if virtual account is enabled) and `blindpay_bank_details` |
| wire           | USD 🇺🇸   | 5 business days          | `memo_code` (ignored if virtual account is enabled) and `blindpay_bank_details` |
| pix            | BRL 🇧🇷   | 5 minutes                | `pix_code` as copyable text or qr code                                          |
| clabe          | MXN 🇲🇽   | 5 minutes                | `clabe` and copyable text                                                       |
| transfers      | ARS 🇦🇷   | 5 minutes                | `cbu` as copyable text                                                          |
| pse            | COP 🇨🇴   | 5 minutes                | payment link                                                                    |

### Supported networks

BlindPay supports payins on multiple blockchain networks. The stablecoins are sent from BlindPay's treasury to your specified blockchain wallet address after fiat payment is confirmed.

- **EVM Chains**: Ethereum, Polygon, Base, Arbitrum (USDC, USDT)
- **Stellar**: Stellar mainnet and testnet (USDC)
- **Solana**: Solana mainnet and devnet (USDC, USDT)

::c-alert{icon="circle-info"}
**BlindPay Stellar mainnet wallet**: `GCOSSQDM2SWMHRP7CDBOLL2V45NHCRLUWUCEHPPBA2ABCOOLPOLZKIHE`. This is the treasury wallet that sends stablecoins to your blockchain wallet after fiat payment is confirmed.
::

When you create a blockchain wallet with a Solana address, BlindPay automatically detects the network type and handles the token transfer accordingly once the fiat payment is confirmed.

## Prerequisites

::c-prerequisites
::

You also need a [blockchain wallet](/docs/essentials/blockchain-wallets#add-a-blockchain-wallet-secure) and a [payin quote](/docs/essentials/payin-quotes#create-a-payin-quote).

## Create a payin

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

::c-auth-note
::

Replace `pq_000000000000` with the payin quote you generated previously.

::c-code-group

```bash [cURL]
curl https://api.blindpay.com/v1/instances/in_000000000000/payins/evm \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "payin_quote_id": "pq_000000000000"
}'
```

::

::c-alert{type="success" icon="circle-check"}
Done. To initiate more payins, generate a new payin quote and repeat the API request.
::

### Testing scenarios

By default all payins are automatically completed in `development` instances. Force `refund` and `failed` scenarios by adding specific values to the payin amount.

| Amount | Result Status |
| ------ | ------------- |
| 666.00 | Failed        |
| 777.00 | Refunded      |

## Related

- [Payin Quotes](/docs/essentials/payin-quotes) · [Blockchain Wallets](/docs/essentials/blockchain-wallets) · [Wallets](/docs/essentials/wallets)
- [Virtual Accounts](/docs/essentials/virtual-accounts) · [Customers](/docs/essentials/customers)
