At a glance
1. Onboard the customer
Create the customer
POST /cms/api/v1/customer/create
id as customer_id.Verify identity
Pick one method. With KYC sharing, you send data you already verified with
POST /kyc/add-kyc-data. With the KYC SDK, you redirect the user to a hosted link from POST /kyc/generate-link. Either way, wait for the CUSTOMER webhook with VERIFIED.Add the bank account
POST /cms/api/v1/bank/create
"bank_account_type": "UPI" and "identifiers": { "vpa": "priya@oksbi" }. Save the returned id as bank_id once the BANK webhook says VERIFIED.KYC documents
- Send
document_details.document_numberfor every Indian customer. - The PAN goes in
tax_number. It’s checked against the name and date of birth. - Your organization’s configuration can limit these documents. Check
GET /kyc/configuration/{customer_id}.
2. Payins (INR to stablecoins)
Create a quotation
POST /pis/api/v1/payin/quotation
deposit_instructions (account number, IFSC and account name) and expiry_time. For UPI, it also has a deep_link you can show as a UPI QR code.Collect the INR
The user pays the exact
sending_amount in one transfer, from a bank account in their own KYC name. Third-party payments and wrong amounts are refunded. Their bank gives them a 12-digit UTR.Initiate with the UTR
POST /pis/api/v1/payin/initiate
Credit on SUCCESS
The
PAYIN webhook moves to SUCCESS with the transaction_hash. Credit the user only then. See Payins for every status.3. Payouts (stablecoins to INR)
Create a quotation
POST /pos/api/v1/payout/quotation
UPI as payment_method for a UPI bank account. The response has the wallet_address to fund and expiry_time.Send the crypto
Send exactly
sending_amount of the quoted asset, on the quoted network, to wallet_address. Keep the transaction hash.Initiate the payout
POST /pos/api/v1/payout/initiate
Show the UTR
On
SUCCESS, the PAYOUT webhook carries the bank utr. Show it to the user as proof of payment. Paying from a balance instead? See Prefunded payouts.- Bank accounts are verified with a penny drop. The holder’s name must match the KYC name.
- NRE accounts are rejected (
ACCOUNT_TYPE_NRE).
4. Remittance (RDA)
Money sent to India from abroad can use a standard payout (step 3) or the dedicated remittance payout API, settled through a Rupee Drawing Arrangement (RDA).Onboard the beneficiary
Create the customer, then run the light beneficiary KYC with
POST /kyc/remittance-beneficiary-kyc.Add the bank account
POST /bank/create with ACCOUNT_DETAILS. UPI isn’t supported for remittance.Create the remitter
POST /kyc/remitter/create for the sender abroad. Reuse the remitter and beneficiary for every transfer between them.Quote and pay out
POST /remittance-payout/quotation, then POST /remittance-payout/initiate. Send remitter_id and is_self_transfer with the quotation, and remitter_id again when you initiate.5. Test in sandbox
Compliance
Indian AML rules can trigger Enhanced Due Diligence when a user reaches volume thresholds or asks for higher limits. For which documents to collect for each purpose, see EDD document requirements.Understanding UTR numbers
Formats by payment method, and where users find them.
UPI QR codes
Turn the quotation’s deep link into a scannable QR code.
EDD document requirements
The documents to collect for each declared purpose.
KYC SDK demo
The hosted KYC flow, screen by screen.