Skip to main content

Instant bank-to-bank transfers in India

You can use India'a Unified Payments Interface (UPI) to make instant bank-to-bank transfers via mobile apps using QR codes or UPI IDs without entering card details.

Currency: INR and USD
Minimum payment amount: 1 INR

To make a payment, complete the standard steps.

Mandatory parameters

Note that some parameters below are extra to those required for a standard payout. Please do not forget to get all the required sender data on your own.

NameTypeDescription
payment_detailsobjectPayment data
  typestringAlways: bank_account
  bank_accountobjectRecipient's account description
    `system_type1stringAlways: upi
    upiobjectAlways: {}
participant_detailsobjectParticipant details
  senderobjectSender details
    full_namestringSender's full name (3–50 characters)
    emailstringSender's email address (up to 64 characters before @, the total length must not exceed 100 characters)
    documentstringDocument (up to 30 characters)
    statestringSender's state (up to 10 characters)
    citystringSender's city (3–50 characters)
    streetstringSender's street (4–100 characters)
    buildingstringBuilding number
amount_detailsobjectPayment amount details
  amountintPayout amount in decimal format. To send 100 USD, write 10000
  currencystringISO 4217 currency code. Case insensitive. Options: inr, usd
metadataobjectAdditional information
  keystringMetadata
customerobjectUser details
  referencestringSender reference identifier

Request example

curl -X POST \
https://demo.smart-glocal.com/api/v1/session/start/payment \
-H 'content-type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3230",
"payment_details": {
"type": "bank_account",
"bank_account": {
"system_type": "upi",
"upi": {}
}
},
"participant_details": {
"sender": {
"full_name": "Ram Devi",
"email": "ramdevi@example.com",
"document": "HSECT4378A",
"state": "Goa",
"city": "Goa",
"street": "Maddo Vaddo",
"building": "1207"
}
},
"amount_details": {
"amount": 10000,
"currency": "INR"
},
"metadata": {
"key": "value"
},
"customer": {
"reference": "qwiqwi"
}
}'

Response example

curl -X POST \
https://partner.com \
-H 'content-type: application/json' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"status": "ok",
"session": {
"id": "ps_3230",
"status": "in_progress",
"created_at": "2026-01-11T02:03:00.000000Z",
"updated_at": "2026-01-11T02:03:00.000000Z",
"acquiring_payments": [{
"id": "pm_203",
"status": "in_progress",
"created_at": "2026-01-11T02:03:00.000000Z",
"customer": {
"reference": "qwiqwi"
},
"amount_details": {
"amount": 10000,
"currency": "inr"
},
"participant_details": {
"sender": {
"full_name": "Ram Devi",
"email": "ramdevi@example.com",
"document": "HSECT4378A",
"state": "Goa",
"city": "Goa",
"street": "Maddo Vaddo",
"building": "1207"
}
},
"payment_options": {
"return_url": "website.com"
}
}]
}
}'

Screen examples

After the action_required webhook is received, the user will be redirected to the bank's/payment system's app to confirm the payment. Below is an example of the app interface.

success