Skip to content

UPI Payments

Use this page to create payments via UPI using the common Payment API endpoint. Authentication and base URL follow the Payment API docs.

  • Base URL: https://api.paylander.com/api/v1/payment/
  • Endpoint: POST /v1/payment/

You can receive the mispaid status in this method! Please, pay your attention to the Mispaid instruction.

Supported Currencies

  • INR

Integration Models

UPI payments support two integration models:

  • Redirect flow: You pass only type and payer interaction happens in our hosted page.
  • Server to Server: You collect the customer data; send details in payment_method.

Redirect Flow

Use when payer interaction happens in our hosted page. Your backend only specifies the payment method type.

Common fields (see Payment API):

  • channel (UUID, required)
  • amount (object, required)
    • currency (ISO 4217, required)
    • value (string, required)
  • external_id (string, optional)
  • return_url (string, recommended)
  • payment_method (object, required)

payment_method (type: upi)

Required:

  • type"upi"

Example Request (Hosted)

json
{
  "channel": "a8262038-ee85-45c6-8789-08fe2fd2b933",
  "amount": { 
    "currency": "INR", 
    "value": "111.00" 
  },
  "payment_method": { 
    "type": "upi" 
  },
  "return_url": "https://your-company.com/success",
  "callback_url": "https://your-company.com/callback",
  "external_id": "YOUR_ORDER_NUMBER",
}

Example Response (Hosted)

json
{
  "status": "processing",
  "transaction_id": "269db9fa-440e-49a5-ab67-d30ecb75149e",
  "amount": { 
    "currency": "INR", 
    "value": "111.00" 
  },
  "redirect_url": "https://pay.paylander.com/upi/269db9fa-440e-49a5-ab67-d30ecb75149e/",
  "channel": "a8262038-ee85-45c6-8789-08fe2fd2b933",
  "payment_method": { 
    "type": "upi" 
  },
  "create_date": "2025-10-15T23:54:13.008007+00:00"
}

Notes:

  • For redirect flow, payer completes the flow in our hosted page. Use redirect_url.

Server-to-Server

Use when your backend collects payer details directly.

Common fields (see Payment API):

  • channel (UUID, required)
  • amount (object, required)
    • currency (ISO 4217, required)
    • value (string, required)
  • external_id (string, optional)
  • return_url (string, recommended)
  • payment_method (object, required)

payment_method (type: upi)

Supported fields for Server to Server:

  • type"upi"
  • email → Payer email
  • first_name → Payer first name
  • last_name → Payer last name
  • phone → Payer phone (E.164)

Example Request (Server to Server)

json
{
  "channel": "a8262038-ee85-45c6-8789-08fe2fd2b933",
  "amount": {
    "currency": "INR",
    "value": "111.00"
  },
  "payment_method": {
    "type": "upi",
    "phone": "919876543210",
    "first_name": "Rahul",
    "last_name": "Sharma",
    "email": "rahul.sharma@example.in"
  },
  "return_url": "https://example.com/success",
  "callback_url": "https://your-company.com/callback",
  "external_id": "YOUR_ORDER_NUMBER"
}

Example Response (Server to Server)

json
{
  "status": "processing",
  "transaction_id": "f4a3c2d1-8b7e-4f9a-9c1d-3e5f7a9b2c10",
  "amount": {
    "currency": "INR",
    "value": "111.00"
  },
  "redirect_url": "https://pay.paylander.com/upi/f4a3c2d1-8b7e-4f9a-9c1d-3e5f7a9b2c10/",
  "channel": "a8262038-ee85-45c6-8789-08fe2fd2b933",
  "payment_method": {
    "type": "upi",
    "phone": "919876543210",
    "first_name": "Rahul",
    "last_name": "Sharma",
    "email": "rahul.sharma@example.in",
    "upi_id": "rahul.sharma@icici",
    "upi_link": "upi://pay?pa=rahul.sharma@icici&pn=Rahul%20Sharma&am=111.00&cu=INR",
    "state": "waiting_for_utr"
  },
  "create_date": "2025-10-15T11:36:06.488572+00:00"
}

Confirm Flow (Server to Server)

When payment_method.state is waiting_for_utr, the client must call the confirm endpoint (/v1/payment/confirm/).

Confirm request body:

json
{
  "id": "58d3f0a2-4c84-40d9-9ebe-e3b1137a49c8",
  "utr": "1111"
}

Possible outcomes:

  • Waiting for provider approval: response remains processing and payment_method.state becomes waiting_for_provider.

Example (abbreviated, structure same as processing response):

json
{
  "status": "processing",
  "transaction_id": "58d3f0a2-4c84-40d9-9ebe-e3b1137a49c8",
  "payment_method": {
    "type": "upi",
    "email": "amit.verma@example.in",
    "first_name": "Amit",
    "last_name": "Verma",
    "phone": "919812345678",
    "upi_id": "amit.verma@oksbi",
    "upi_link": "upi://pay?pa=radj.ku@oksbi&pn=Amit%20Verma&am=111.00&cu=INR",
    "state": "waiting_for_provider"
  }
}
  • Confirmed: response returns completed without the payment_method object.
json
{
  "status": "completed",
  "transaction_id": "58d3f0a2-4c84-40d9-9ebe-e3b1137a49c8",
  "amount": {
    "currency": "INR",
    "value": "111.00"
  },
  "redirect_url": "https://pay.paylander.com/upi/58d3f0a2-4c84-40d9-9ebe-e3b1137a49c8/",
  "create_date": "2025-10-15T11:19:17.254731+00:00"
}

Notes for Server to Server:

  • The state field appears only in Server to Server responses and indicates next steps.
  • waiting_for_utr → collect UTR from the payer and call /v1/payment/confirm/.
  • waiting_for_provider → approval pending.