Skip to main content

UPI payments in India

You can use India's Unified Payments Interface (UPI) to make payments via mobile apps using QR codes or UPI IDs without entering card details.

Currency: INR and USD
Minimum payment amount: 1 INR

Mandatory parameters​

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

NameTypeDescription
payment_detailsobjectPayment data
  typestringAlways: bank_account
  bank_accountobjectPayer's account description
    system_typestringAlways: 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)
    msisdnstringPhone number (up to 15 characters, without + )
    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
  amountintPayment amount in minor currency units. To pay 100 INR, write 10000
  currencystringISO 4217 currency code. Case insensitive. Options: inr, usd
payment_optionsobjectPayment options
  return_urlstringURL to redirect the payer back to after the payment
metadataobjectAdditional information
  keystringMetadata
customerobjectUser details
  referencestringPayer's identifier in your system

Making a one-time payment​

  1. Create a session using the session/create method.

    Alternatively, you can use the session/init/payment method. In this case, specify all the payment parameters right away and skip the next step.

  2. Send a session/start/payment request. Specify the following parameters:

    • bank_account in payment_details.type and upi in payment_details.bank_account.system_type
    • the payer's full_name, email, document and address details in participant_details.sender
    • the URL to redirect the payer back to after the payment in payment_options.return_url

    To make later recurring payments, send "recurrent": true in the payment_options object.

    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",
    "msisdn": "8826320796",
    "state": "Goa",
    "city": "Panaji",
    "street": "Maddo Vaddo",
    "building": "1207"
    }
    },
    "amount_details": {
    "amount": 10000,
    "currency": "inr"
    },
    "payment_options": {
    "return_url": "https://website.com",
    "recurrent": true
    },
    "metadata": {
    "key": "value"
    },
    "customer": {
    "reference": "qwiqwi"
    }
    }'
    Response example
    {
    "status": "ok",
    "session": {
    "id": "ps_3230",
    "status": "in_progress",
    "created_at": "2025-12-04T07:48:28.275964Z",
    "updated_at": "2025-12-04T07:48:28.296138Z",
    "acquiring_payments": [{
    "id": "pm_566184419",
    "status": "in_progress",
    "created_at": "2025-12-04T07:48:28.296138Z",
    "customer": {
    "reference": "qwiqwi"
    },
    "payment_details": {
    "type": "bank_account",
    "bank_account": {
    "system_type": "upi",
    "upi": {}
    }
    },
    "amount_details": {
    "amount": 10000,
    "currency": "inr"
    },
    "participant_details": {
    "sender": {
    "full_name": "Ram Devi",
    "email": "ramdevi@example.com",
    "document": "HSECT4378A",
    "msisdn": "8826320796",
    "state": "Goa",
    "city": "Panaji",
    "street": "Maddo Vaddo",
    "building": "1207"
    }
    },
    "payment_options": {
    "return_url": "https://website.com",
    "recurrent": true
    }
    }]
    }
    }
  3. Wait for a ready_to_confirm webhook. When you receive it, it means that Smart Glocal is ready to make the payment and is waiting for your confirmation.

    Webhook example
    curl -X POST \
    https://partner.com \
    -H 'content-type: application/json' \
    -H 'X-PARTNER-SIGN: signature' \
    -d '{
    "type": "ready_to_confirm",
    "session": {
    "id": "ps_3230",
    "status": "in_progress",
    "created_at": "2025-12-04T07:48:28.275964Z",
    "updated_at": "2025-12-04T07:48:28.310412Z",
    "next_action": "confirm",
    "acquiring_payments": [{
    "id": "pm_566184419",
    "status": "pending",
    "created_at": "2025-12-04T07:48:28.296138Z",
    "customer": {
    "reference": "qwiqwi"
    },
    "payment_details": {
    "type": "bank_account",
    "bank_account": {
    "system_type": "upi",
    "upi": {}
    }
    },
    "amount_details": {
    "amount": 10000,
    "currency": "inr"
    },
    "participant_details": {
    "sender": {
    "full_name": "Ram Devi",
    "email": "ramdevi@example.com",
    "document": "HSECT4378A",
    "msisdn": "8826320796",
    "state": "Goa",
    "city": "Panaji",
    "street": "Maddo Vaddo",
    "building": "1207"
    }
    },
    "payment_options": {
    "return_url": "https://website.com",
    "recurrent": true
    }
    }]
    }
    }'
  4. Send a session/confirm request to confirm the operation or a session/cancel request to cancel it.

    Request example
    curl -X POST \
    https://demo.smart-glocal.com/api/v1/session/confirm \
    -H 'content-type: application/json' \
    -H 'X-PARTNER-PROJECT: your_project_name' \
    -H 'X-PARTNER-SIGN: signature' \
    -d '{
    "session_id":"ps_3230"
    }'
  5. Wait for an action_required webhook. The customer_interaction.redirect.url parameter contains a link to the local payment method page.

    Webhook example
    curl -X POST \
    https://partner.com \
    -H 'content-type: application/json' \
    -H 'X-PARTNER-SIGN: signature' \
    -d '{
    "type": "action_required",
    "session": {
    "id": "ps_3230",
    "status": "in_progress",
    "created_at": "2025-12-04T07:48:28.275964Z",
    "updated_at": "2025-12-04T07:48:29.104377Z",
    "acquiring_payments": [{
    "id": "pm_566184419",
    "status": "pending",
    "created_at": "2025-12-04T07:48:28.296138Z",
    "customer": {
    "reference": "qwiqwi"
    },
    "payment_details": {
    "type": "bank_account",
    "bank_account": {
    "system_type": "upi",
    "upi": {}
    }
    },
    "amount_details": {
    "amount": 10000,
    "currency": "inr"
    },
    "participant_details": {
    "sender": {
    "full_name": "Ram Devi",
    "email": "ramdevi@example.com",
    "document": "HSECT4378A",
    "msisdn": "8826320796",
    "state": "Goa",
    "city": "Panaji",
    "street": "Maddo Vaddo",
    "building": "1207"
    }
    },
    "payment_options": {
    "return_url": "https://website.com",
    "recurrent": true
    },
    "customer_interaction": {
    "type": "redirect",
    "redirect": {
    "url": "https://payment-system.com/pay?id=566184419",
    "base_url": "https://payment-system.com/pay",
    "method": "GET",
    "qs": {
    "id": "566184419"
    }
    }
    }
    }],
    "actions": {
    "confirm": "2025-12-04T07:48:28.327146Z"
    }
    }
    }'

    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

  6. After the user makes the payment, you will receive a payment_finished webhook containing the payment result from Smart Glocal. The succeeded status indicates a successful payment.

    Webhook example
    curl -X POST \
    https://partner.com \
    -H 'content-type: application/json' \
    -H 'X-PARTNER-SIGN: signature' \
    -d '{
    "type": "payment_finished",
    "session": {
    "id": "ps_3230",
    "status": "accepted",
    "created_at": "2025-12-04T07:48:28.275964Z",
    "updated_at": "2025-12-04T07:49:43.022068Z",
    "acquiring_payments": [{
    "id": "pm_566184419",
    "status": "succeeded",
    "created_at": "2025-12-04T07:48:28.296138Z",
    "finished_at": "2025-12-04T07:49:43.002789Z",
    "customer": {
    "reference": "qwiqwi"
    },
    "payment_details": {
    "type": "bank_account",
    "bank_account": {
    "system_type": "upi",
    "upi": {}
    }
    },
    "amount_details": {
    "amount": 10000,
    "currency": "inr"
    },
    "participant_details": {
    "sender": {
    "full_name": "Ram Devi",
    "email": "ramdevi@example.com",
    "document": "HSECT4378A",
    "msisdn": "8826320796",
    "state": "Goa",
    "city": "Panaji",
    "street": "Maddo Vaddo",
    "building": "1207"
    }
    },
    "payment_options": {
    "return_url": "https://website.com",
    "recurrent": true
    },
    "recurrent": {
    "token": "6a6a29c4193a8e1049231e1497a3c5f180e120b20db81b39f53ec478029b53cf",
    "created_at": "2025-12-04T07:49:43.002789Z",
    "finished_at": "2035-12-04T07:49:43.002789Z",
    "is_active": true,
    "type": "recurrent_token"
    }
    }],
    "actions": {
    "confirm": "2025-12-04T07:48:28.327146Z"
    }
    }
    }'

Making a recurring MIT payment​

Once you made a one-time payment with "recurrent": true and received a recurring token in the recurrent object, you can make recurring payments.

To make a recurring payment, complete the steps above, but send the received token in the session/start/payment request instead of UPI details.

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": "recurrent",
"recurrent": {
"token": "6a6a29c4193a8e1049231e1497a3c5f180e120b20db81b39f53ec478029b53cf"
}
},
"amount_details": {
"amount": 10000,
"currency": "inr"
},
"customer": {
"reference": "qwiqwi"
}
}'