Skip to content

UPI

PZ Integration option

Payment flow

  1. Your customer selects UPI as a payment method.
  2. You request a wallet number from PaySage.io and show it to the customer.
  3. The customer makes a transfer on the given wallet.
  4. The customer copies the transaction ID from the receipt and enters it on your payment form.
  5. You create a payment through PaySage.io API and pass that transaction ID.
  6. Then, PaySage.io activates the payment and notify you when the transaction will be completed.

This integration option supports the following transaction types:


Wallet number request

Request

Send a GET request to https://api.paysage.io/beyag/pkm/upi/wallet/{currency}, where {currency} stands for the payment currency in the ISO-4217 format, for example USD.

Response

You will get a 200 response status code if your request was processed successfully, or not successfully.

Successful response example
{
  "wallet": "123456789",
  "status": "ok"
}
Error response example
{
  "status": "fail",
  "message": "An error has occurred while fetching a wallet. Try again later, please."
}

Payment

Request

Info

Confirm supported currencies and countries with your manager.

After your customer sent you the transaction ID, send a payment request with the following data:

object
object
A section of the payment method.
type
required
string
upi
account
conditionally required
string
A UPI account. Contact Tech Support Team for details.
object
A section of information about your customer.
first_name
conditionally required
string
The customer's first name. Contact Tech Support Team for details.
last_name
conditionally required
string
The customer's last name. Contact Tech Support Team for details.
email
string
The customer's email address.
object
A section of additional transaction data.
transaction_id
conditionally required
string
The transaction ID received from the customer. Contact Tech Support Team for details.
Response

The upi response section will have parameters copied from a request. Additionally, you'll get the form parameter to build a form where the customer should be redirected to finalize the payment.


Payout

Request

Info

A fraction of the amount is ignored. For example, if you pass amount = 123456, then the actual amount is 123400.

Send a payout request with the following data:

object
object
A section of the payout method.
type
required
string
imps_ib
channel
required
string
A unique identifier of the user making the payment.
account
required
string
The bank account number.
account_name
required
string
The name of the bank account holder.
bank_code
required
string
A unique ID assigned by the country's central bank, IFSC code.
Response

The imps_ib response section will have parameters copied from a request.

PF Integration Option

This integration option supports the payment transaction:


Payment

Payment flow

  1. Customer selects UPI as a payment method on the merchant's website and submits their VPA (Virtual Payment Address).
  2. Merchant sends the payment request to PaySage.io.
  3. PaySage.io returns the payment status to the merchant: pending or failed.
  4. Customer receives a payment confirmation request in their UPI application.
  5. Customer confirms the payment in their UPI application.
  6. PaySage.io sends a webhook notification with successful, failed or pending status.
Request

Send a payment request with the following additional parameters:

object
object
A section of the payment method.
type
required
string
upi
account
required
string
The customer's VPA/UPI account ID.
object
A section of the customer's details.
first_name
required
string
The customer's first name.
last_name
required
string
The customer's last name.
state
required
string (2)
The customer's billing state. Set as the 2 last symbols of the code in the ISO 3166-2 format.
city
required
string (100)
The customer's billing city.
zip
required
string
The post code of the customer's billing address.
address
required
string (100)
The customer's address.
phone
required
string (14)
The customer's phone number.
email
required
string
The customer's email address.
Request example
{
    "request": {
        "amount": 10042,
        "currency": "INR",
        "description": "description",
        "test": false,
            "customer": {
            "first_name": "John",
            "last_name": "Doe",
            "state": "KA",
            "city": "Bangalore",
            "zip": "560002",
            "address": "1st Street",
            "phone": "17777777777",
            "email": "user@example.com"
        },
        "method": {
            "type": "upi",
            "account": "1234"
        }
    }
}
Response

The upi response section will have the same parameters as in the request.

PF Integration Option (with QR)

Payment

Payment flow

  1. The customer selects UPI as a payment method on the merchant's website and submits their VPA (Virtual Payment Address).
  2. The merchant sends the payment request to PaySage.io.
  3. PaySage.io sends a response with 3 links:

    • to the QR-code;
    • to the deeplink;
    • to the page that displays both the QR and the deeplink.
  4. The merchant redirects the customer to one of the links in the response.

  5. The customer completes the payment in the UPI application.
  6. PaySage.io sends a webhook notification with the payment status to the merchant.
Request

Send a payment request with the following additional parameters:

object
return_url
required
string
The URL to which to return the customer once the transaction is completed.
object
type
required
string
upi_qr_deeplink
account
required
string
VPA/UPI ID of the customer.
required
object
A section of information about the customer.
first_name
required
string
The customer's first name.
last_name
required
string
The customer's last name.
state
required
string (2)
The customer's billing state. Set as the 2 last symbols of the code in the ISO 3166-2 format.
city
required
string (100)
The customer's billing city.
zip
required
string (6)
The post code of the customer's billing address.
address
required
string (100)
The customer's address.
phone
required
string (14)
The customer's phone number.
email
required
string
The customer's email address.
Request example
{
  "request": {
    "amount": 20000,
    "currency": "INR",
    "description": "description",
    "duplicate_check": false,
    "test": false,
    "expired_at": "2026-01-01T15:00:00+01:00",
    "tracking_id": "your_uniq_number",
    "ip": "127.0.0.1",
    "language": "en",
    "notification_url": "https://merchant.ltd/notification",
    "return_url": "https://merchant.ltd/return",
    "customer": {
      "first_name": "John",
      "last_name": "Doe",
      "middle_name": "Mid",
      "country": "IN",
      "state": "KA",
      "city": "Bangalore",
      "zip": "560002",
      "address": "1st Street",
      "phone": "17777777777",
      "device_id": "12312312321fff67",
      "email": "example@example.com"
    },
    "method": {
      "account": "BE11-EF898-251F-A949",
      "type": "upi_qr_deeplink"
    }
  }
}
Response

Redirect your customer to one of the following URLs:

  • additional_data.payment_method.qr_code – to display the QR-code;
  • additional_data.payment_method.deeplink – to redirect them to the UPI application;
  • form.action – to redirect them to the HTML page with both QR-code and a link to the UPI application displayed.
Response example
{
  "transaction": {
    "uid": "05482b9d-2ec9-4844-8763-55fc3195c9ef",
    "type": "payment",
    "status": "pending",
    "amount": 20000,
    "currency": "INR",
    "description": "description",
    "created_at": "2025-07-12T10:07:52Z",
    "updated_at": "2025-07-12T10:07:52Z",
    "method_type": "upi_qr_deeplink",
    "receipt_url": "https://backoffice.paysage.io/customer/transactions/05482b9d-2ec9-4844-8763-55fc3195c9ef/27b5379b2b6796c4d9ef9f2d850000190fac077da124f4d8b14e370b4a737c27?language=en",
    "payment": {
      "status": "pending",
      "gateway_id": 5374,
      "ref_id": "178648809",
      "message": "Transaction was initialized"
    },
    "upi_qr_deeplink": {
      "type": "upi_qr_deeplink",
      "account": "BE11-EF898-251F-A949"
    },
    "customer": {
      "zip": "560002",
      "city": "Bangalore",
      "email": "example@example.com",
      "phone": "17777777777",
      "state": "KA",
      "address": "1st Street",
      "country": "IN",
      "device_id": "12312312321fff67",
      "last_name": "Doe",
      "first_name": "John",
      "middle_name": "Mid",
      "ip": "127.0.0.1"
    },
    "manually_corrected_at": null,
    "version": 1,
    "message": "Transaction was initialized",
    "tracking_id": "your_uniq_number",
    "test": false,
    "language": "en",
    "expired_at": "2026-01-01T14:00:00Z",
    "billing_address": {
      "zip": "560002",
      "city": "Bangalore",
      "email": "example@example.com",
      "phone": "17777777777",
      "state": "KA",
      "address": "1st Street",
      "country": "IN",
      "device_id": "12312312321fff67",
      "last_name": "Doe",
      "first_name": "John",
      "middle_name": "Mid"
    },
    "additional_data": {
      "payment_method": {
        "type": "alternative",
        "qr_code": "data:image/png;base64,",
        "deeplink": "upi:/"
      }
    },    
    "gateway": {
      "iframe": false
    },
    "form": {
      "action": "https://api.paysage.io/beyag/transactions/redirect/05482b9d-2ec9-4844-8763-55fc3195c9ef",
      "method": "GET",
      "fields": []
    }
  }
}