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 endpoint:
GET /api/v2/reference/fiat-institution/by-country/VN
Response:
{
"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
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 |
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 |
KYC Details
Both sender and recipient KYC objects follow the same structure:
{
"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 (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 for all possible states.
Mobile Money Payouts
For mobile money destinations, the reqDetails fields differ slightly:
"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 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 |
