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

CountryCurrencyPayout MethodMethod Code
CanadaCADBank (EFT, Interac)cad-interac
IndiaINRBank transferinr-bank
IndonesiaIDRBank, Mobileidr-bank
KenyaKESMobile moneyke-kes-mobile
MalaysiaMYRBank, Mobilemyr-bank, myr-mobile
NigeriaNGNBank, Mobileng-ngn-bank, ng-ngn-mobile
PhilippinesPHPBank, Mobileph-php-bank
RwandaRWFMobile moneyrw-rwf-mobile,rw-rwf-bank
SingaporeSGDBank transfersg-sgd-bank
South KoreaKRWBank transferkrw-bank
ThailandTHBBank transferthb-bank
VietnamVNDBank (instant)vnd-instant
BeninXOFMobile moneybj-xof-mobile
Côte d'IvoireXOFMobile moneyci-xof-mobile
GhanaGHSMobile moneygh-ghs-mobile
SenegalXOFMobile moneysn-xof-mobile
TaiwanTWDBanktw-twd-mobile
CambodiaUSDMobile moneykh-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

FieldDescription
destReq.ccyThe fiat currency code (e.g., VND, NGN, USD)
destReq.amtRequestedThe payout amount in fiat (not BTC). Set the amount on destReq only — the BTC amount auto-calculates
destReq.methodThe payout method code from the supported destinations table
destReq.reqDetails.acctNameRecipient's name as it appears on their bank account
destReq.reqDetails.acctNumRecipient's bank account number
destReq.reqDetails.institutionCodeBank code from the institution lookup
destReq.reqDetails.institutionNameBank name (for display/verification)
sourceReq.kycSender's identity — required for all fiat payouts
destReq.kycRecipient's identity — required for all fiat payouts
sourceOfFundsRequired 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"
  }
}
FieldRequiredDescription
typeYes"individual" or "business"
legalFullNameYesFull legal name (individual) or registered business name
countryCodeYesISO 3166-1 alpha-2 country code
contactNumberVariesPhone number with country code
address1VariesStreet 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

ErrorCauseSolution
Missing KYCsourceReq.kyc or destReq.kyc not providedBoth sender and recipient KYC are required for fiat payouts
Invalid institution codeUnrecognized institutionCodeUse the institution lookup endpoint to get valid codes
Unsupported country/methodCountry or method not in the supported listCheck the supported destinations table above
Insufficient balanceNot enough BTC in your Neutron walletDeposit BTC via Lightning or on-chain before initiating the payout