POST /quoteswithrailType=FIAT_FIATPOST /payoutswith the beneficiary details and optionalquoteId- Receive
payout.completedvia webhook
Kaito routes the fiat deposit to the recipient's crypto wallet via the Kaito network.
| Field | Required | Description |
|---|---|---|
amount | ✅ | Amount in source fiat currency |
sourceAccountId | ✅ | Kaito source account ID (e.g. Brazilian PIX source) |
subclientId | ✅ | The end-client receiving the stablecoin (USDC or USDT) |
senderWalletAddress | ✅ | Destination crypto wallet address |
senderWalletChain | ✅ | Blockchain (e.g. ethereum, polygon) |
senderWalletNetwork | optional | Network name if different from chain |
typeOrder | optional | "onramp" — inferred from sourceAccountId if omitted |
POST /quotes— Kaito prices the conversion and returnsexchange,receiverAmount(USDC or USDT), andkaitoFee.POST /payments— Confirm the quote. Kaito initiates the on-ramp and returns deposit instructions (e.g. QR code for PIX, bank details, etc.).- End-client deposits fiat via the returned instructions.
- Receive
payment.succeededvia webhook once Kaito confirms receipt and the stablecoin (USDC or USDT) is delivered.
{
"orderId": "ord_...",
"status": "pending",
"depositInstructions": {
"paymentRail": "pix",
"country": "BR",
"bankBeneficiaryName": "Kaito Technologies, Inc",
"brCode": "00020126640014br.gov.bcb.pix..."
},
"financials": {
"amount": 200.00,
"currency": "BRL",
"receiverAmount": 39.86,
"receiverCurrency": "USDC",
"exchange": 0.199279,
"kaitoFee": 2.21,
"userPays": 202.21
}
}Kaito routes stablecoins (USDC or USDT) from the sender's wallet to the beneficiary's bank account in local fiat. Settlement time may vary depending on the corridor and transaction type.
| Field | Required | Description |
|---|---|---|
amount | ✅ | Amount in stablecoin (USDC or USDT) to send |
targetAccountId | ✅ | ID of the beneficiary's bank account (pre-registered) |
subclientId | ✅ | The end-client sending the stablecoin (USDC or USDT) |
senderWalletAddress | ✅ | Sender's stablecoin wallet address (USDC or USDT) |
senderWalletChain | ✅ | Blockchain (e.g. ethereum, polygon) |
senderWalletId | optional | Internal wallet ID for managed wallets |
typeOrder | optional | "offramp" — inferred if no sourceAccountId |
The fields required depend on the destination rail:
ACH / Wire (Panama, USA): accountNumber, routingNumber, accountType, beneficiaryName, addressLine1, city, stateProvinceRegion, postalCode
PIX (Brazil): pixKey, beneficiaryName, bankName
SPEI (Mexico): speiClabe, speiInstitutionCode, beneficiaryName
ACH (Guatemala / Colombia): bankCode, bankAccount, beneficiaryFirstName, beneficiaryLastName, documentId, documentType, email
SWIFT (International): swiftCodeBic, swiftAccountNumberIban, swiftAccountHolderName, swiftBankName, beneficiaryCountry, beneficiaryCity
POST /quotes— Kaito prices the stablecoin → local fiat conversion and locks the rate for 15 minutes. Returnsexchange,receiverAmount,kaitoFee,userPays.POST /payouts— Confirm the quote. Kaito initiates the transfer via its network to the beneficiary's bank account.- Receive
payout.completedvia webhook once the transfer is confirmed.
{
"quoteId": "f678d309-...",
"status": "preview",
"expiresAt": "2026-05-18T19:51:00Z",
"exchange": 0.199279,
"baseAmount": { "value": 200.00, "currency": "USDC" }, // USDC or USDT
"receiverAmount": { "value": 39.86, "currency": "USD" },
"kaitoFee": { "value": 0.50, "currency": "USDC" },
"userPays": { "value": 200.50, "currency": "USDC" },
"corridor": "CRYPTO|PA"
}- (Optional)
POST /chain/estimate-fee POST /paymentswithrailType=CRYPTO_CRYPTO- (If you manage signing)
POST /chain/tx/broadcastwithsignedTx - Receive
payment.succeededvia webhook (or poll tx status)
POST /payment-linkson the Remittances API withIdempotency-Key(UUID v4),x-api-key, andx-signature- Persist
transactionIdandremittanceUrlreturned by the API - Share
remittanceUrlwith the sender channel (e.g. WhatsApp or SMS) - Handle retries with the same
Idempotency-Keyand generate a new key for each new intent