---
updatedAt: 2026-03-19T02:39:20.000Z
agentTools:
  projectIndex: https://neutronpay.readme.io/llms.txt
---

# Fiat out

Neutron supports sending fiat payouts to local bank accounts or mobile money systems in selected countries. This is handled through the `destReq` object in a transaction request.

Neutron lets you convert BTC to local fiat currency and send payouts directly to bank accounts or mobile money wallets. This guide covers the full payout flow.

## Payout Flow

```
1. Authenticate       →  GET access token
2. Look up bank codes →  GET /api/v2/reference/fiat-institution/by-country/{countryCode}
3. Create transaction →  POST /api/v2/transaction/
4. Confirm            →  PUT /api/v2/transaction/{txnId}/confirm
5. Monitor            →  Webhook callback or GET /api/v2/transaction/{txnId}
```

## Supported Payout Destinations

| Country       | Currency | Payout Method       | Method Code                    |
| ------------- | -------- | ------------------- | ------------------------------ |
| Canada        | CAD      | Bank (EFT, Interac) | `cad-interac`                  |
| India         | INR      | Bank transfer       | `inr-bank`                     |
| Indonesia     | IDR      | Bank, Mobile        | `idr-bank`                     |
| Kenya         | KES      | Mobile money        | `ke-kes-mobile`                |
| Malaysia      | MYR      | Bank, Mobile        | `myr-bank`, `myr-mobile`       |
| Nigeria       | NGN      | Bank, Mobile        | `ng-ngn-bank`, `ng-ngn-mobile` |
| Philippines   | PHP      | Bank, Mobile        | `ph-php-bank`                  |
| Rwanda        | RWF      | Mobile money        | `rw-rwf-mobile`,`rw-rwf-bank`  |
| Singapore     | SGD      | Bank transfer       | `sg-sgd-bank`                  |
| South Korea   | KRW      | Bank transfer       | `krw-bank`                     |
| Thailand      | THB      | Bank transfer       | `thb-bank`                     |
| Vietnam       | VND      | Bank (instant)      | `vnd-instant`                  |
| Benin         | XOF      | Mobile money        | `bj-xof-mobile`                |
| Côte d'Ivoire | XOF      | Mobile money        | `ci-xof-mobile`                |
| Ghana         | GHS      | Mobile money        | `gh-ghs-mobile`                |
| Senegal       | XOF      | Mobile money        | `sn-xof-mobile`                |
| Taiwan        | TWD      | Bank                | `tw-twd-mobile`                |
| Cambodia      | USD      | Mobile money        | `kh-usd-mobile`                |

## Step 1: Look Up Bank Codes

Before creating a payout, you need the correct `institutionCode` for the recipient's bank. Use the [Get fiat institution by country](/reference/getfiatinstitutionsbycountry) endpoint:

```
GET /api/v2/reference/fiat-institution/by-country/VN
```

**Response:**

```json
{
  "banks": [
    {
      "institutionCode": "TPBVVNVX",
      "institutionType": "bank",
      "institutionName": "TPBank"
    },
    {
      "institutionCode": "ICBVVNVX",
      "institutionType": "bank",
      "institutionName": "VietinBank"
    }
  ],
  "mobiles": [
    {
      "institutionCode": "ICBVVNVY",
      "institutionType": "mobile",
      "institutionName": "Viettel"
    }
  ]
}
```

> ⚠️ Not all countries support this endpoint. For countries without lookup support, contact Neutron for the required institution codes.

## Step 2: Create the Transaction

Fiat payouts require **KYC information** on both the sender (`sourceReq.kyc`) and recipient (`destReq.kyc`), plus a `sourceOfFunds` declaration for international transfers.

### Full Example — VND Bank Payout

```json
POST /api/v2/transaction/

{
  "sourceReq": {
    "ccy": "BTC",
    "method": "neutronpay",
    "reqDetails": {},
    "kyc": {
      "type": "individual",
      "details": {
        "legalFullName": "John Doe",
        "countryCode": "CA",
        "contactNumber": "+12045557123",
        "address1": "147 Maple Grove Avenue, Winnipeg, Manitoba R3K 0V8"
      }
    }
  },
  "destReq": {
    "ccy": "VND",
    "amtRequested": 1000000,
    "method": "vnd-instant",
    "reqDetails": {
      "acctName": "Tran Van A",
      "acctNum": "590061086034",
      "institutionCode": "TPBVVNVX",
      "institutionName": "TPBank"
    },
    "kyc": {
      "type": "individual",
      "details": {
        "legalFullName": "Tran Van A",
        "countryCode": "VN",
        "contactNumber": "+84901557351",
        "address1": "135 Nam Ky Khoi Nghia, Ben Thanh ward, District 1, Ho Chi Minh city"
      }
    }
  },
  "sourceOfFunds": {
    "purpose": 1,
    "source": 5,
    "relationship": 4
  }
}
```

### Key Fields Explained

| Field                                | Description                                                                                                |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
| `destReq.ccy`                        | The fiat currency code (e.g., `VND`, `NGN`, `USD`)                                                         |
| `destReq.amtRequested`               | The payout amount **in fiat** (not BTC). Set the amount on `destReq` only — the BTC amount auto-calculates |
| `destReq.method`                     | The payout method code from the supported destinations table                                               |
| `destReq.reqDetails.acctName`        | Recipient's name as it appears on their bank account                                                       |
| `destReq.reqDetails.acctNum`         | Recipient's bank account number                                                                            |
| `destReq.reqDetails.institutionCode` | Bank code from the [institution lookup](/reference/getfiatinstitutionsbycountry)                           |
| `destReq.reqDetails.institutionName` | Bank name (for display/verification)                                                                       |
| `sourceReq.kyc`                      | Sender's identity — required for all fiat payouts                                                          |
| `destReq.kyc`                        | Recipient's identity — required for all fiat payouts                                                       |
| `sourceOfFunds`                      | Required for international transfers — see [Source of Funds](/reference/source-of-funds)                   |

### KYC Details

Both sender and recipient KYC objects follow the same structure:

```json
{
  "type": "individual",
  "details": {
    "legalFullName": "Full legal name",
    "countryCode": "XX",
    "contactNumber": "+1234567890",
    "address1": "Full street address"
  }
}
```

| Field           | Required | Description                                              |
| --------------- | -------- | -------------------------------------------------------- |
| `type`          | Yes      | `"individual"` or `"business"`                           |
| `legalFullName` | Yes      | Full legal name (individual) or registered business name |
| `countryCode`   | Yes      | ISO 3166-1 alpha-2 country code                          |
| `contactNumber` | Varies   | Phone number with country code                           |
| `address1`      | Varies   | Street address                                           |

> 📘 **KYC is only required for fiat payouts.** BTC, Lightning, and stablecoin transactions do not require KYC.

## Step 3: Confirm the Transaction

After creating the transaction, you'll receive a `txnId` and the quoted exchange rate. Review the quote, then confirm:

```
PUT /api/v2/transaction/{txnId}/confirm
```

The BTC equivalent will be deducted from your Neutron wallet and the fiat payout will be initiated.

## Step 4: Monitor Status

Track the payout via [webhooks](/reference/createwebhook) (recommended) or by polling:

```
GET /api/v2/transaction/{txnId}
```

Fiat payouts typically settle within minutes for instant methods (e.g., `vnd-instant`) and 1–3 business days for standard bank transfers. See [Transaction Status Types](/reference/transaction-status-types) for all possible states.

## Mobile Money Payouts

For mobile money destinations, the `reqDetails` fields differ slightly:

```json
"destReq": {
  "ccy": "KES",
  "amtRequested": 5000,
  "method": "mobile",
  "reqDetails": {
    "acctName": "Jane Wanjiku",
    "acctNum": "+254712345678",
    "institutionCode": "MPESA",
    "institutionName": "M-Pesa"
  }
}
```

For mobile payouts, `acctNum` is the recipient's mobile number including country code.

## Common Errors

| Error                      | Cause                                         | Solution                                                                                          |
| -------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| Missing KYC                | `sourceReq.kyc` or `destReq.kyc` not provided | Both sender and recipient KYC are required for fiat payouts                                       |
| Invalid institution code   | Unrecognized `institutionCode`                | Use the [institution lookup endpoint](/reference/getfiatinstitutionsbycountry) to get valid codes |
| Unsupported country/method | Country or method not in the supported list   | Check the supported destinations table above                                                      |
| Insufficient balance       | Not enough BTC in your Neutron wallet         | Deposit BTC via Lightning or on-chain before initiating the payout                                |