Skip to content

About

A developer reference for UPI Intent & deep-link URI schemes, with exact examples for PhonePe, Paytm, MobiKwik, Airtel Payments and standard UPI.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

UPI Intent Banner

๐Ÿ’ณ UPI Intent

A developer-focused UPI Intent & Deep-Link reference for exploring app-specific payment intents across popular Indian UPI applications.

GitHub Stars GitHub Forks

Version 1.0.0 UPI Intent Deep Links Android Developer Reference


๐Ÿ’ณ About UPI Intent

UPI Intent is an independent developer reference project for exploring UPI payment deep links, app-specific URI schemes, and payment intent formats used by popular Indian UPI applications.

The project provides a centralized reference for developers who want to understand how UPI payment intents are structured and how application-specific payment flows can be invoked from supported environments.

Included UPI Applications

  • ๐Ÿ“ฑ PhonePe
  • ๐Ÿ’™ Paytm
  • ๐ŸŸฃ MobiKwik
  • ๐Ÿ”ด Airtel Payments
  • ๐Ÿ‡ฎ๐Ÿ‡ณ Standard UPI

The repository focuses on practical intent examples, URI formats, parameters, encoding, testing, and integration concepts.

โš ๏ธ Important: App-specific intent schemes may be undocumented, private, version-dependent, restricted, or changed without notice. This repository is intended for developer reference, testing, research, and educational purposes.


โœจ Key Features

๐Ÿ”— UPI Deep-Link Reference

Explore different URI schemes used to initiate UPI-related payment flows.

๐Ÿ“ฑ App-Specific Intents

Reference intent formats for:

  • PhonePe
  • Paytm
  • MobiKwik
  • Airtel Payments

๐Ÿ‡ฎ๐Ÿ‡ณ Standard UPI URI

Reference the commonly used:

upi://pay

payment URI.

๐Ÿ” Encoded Payload Examples

Understand intents containing:

  • Base64-encoded JSON
  • Base64-encoded UPI URI
  • URL query parameters

๐Ÿงช Testing Examples

Includes examples suitable for mobile, Android, browser, and ADB-based testing.

๐Ÿ“š Developer Documentation

Clear parameter references and implementation examples for developers.


๐Ÿ”— Exact UPI Intent Examples

The following intent strings are preserved exactly as provided.

No parameters, values, encoding, casing, or URI structure has been modified.


๐Ÿ“ฑ PhonePe

phonepe://native?data=eyJwMnBQYXltZW50Q2hlY2tvdXRQYXJhbXMiOnsiY2hlY2tvdXRUeXBlIjoiQ09MTEVDVCIsImluaXRpYWxBbW91bnQiOjEwMCwibm90ZSI6eyJ0eXBlIjoidGV4dCIsIm1lc3NhZ2UiOiJUWE4yMDI2MTAwNTE0Mzc1OERFNjdEMjE2In0sInN1cHBvcnRlZEluc3RydW1lbnRzIjotMX0sImNvbnRhY3QiOnsidHlwZSI6IkVYVEVSTkFMX01FUkNIQU5UIiwibmFtZSI6IkJsdWVPcmJpdCBEZXZzIiwidnBhIjoicGF5dG1xcjVtZWV2b0BwdHlzIn19&id=p2ppayment

Scheme

phonepe://native

Flow Identifier

id=p2ppayment

The provided intent contains a Base64-encoded data payload.


๐Ÿ’™ Paytm

paytmmp://cash_wallet?pa=paytmqr5meevo@ptys&pn=null&cu=INR&tn=TXN20261005143758DE67D216&am=1&featuretype=money_transfer

Scheme

paytmmp://cash_wallet

Parameters

Parameter Value
pa paytmqr5meevo@ptys
pn null
cu INR
tn TXN20261005143758DE67D216
am 1
featuretype money_transfer

๐ŸŸฃ MobiKwik

mobikwik://upi/verifyVpa?vpa=paytmqr5meevo@ptys&amount=1&note=TXN20261005143758DE67D216

Scheme

mobikwik://upi/verifyVpa

Parameters

Parameter Value
vpa paytmqr5meevo@ptys
amount 1
note TXN20261005143758DE67D216

๐Ÿ”ด Airtel Payments

myairtel://app/airtelpay?screenName=scan_pay&source=scan_device_native&journey=pay&qrString=dXBpOi8vcGF5P3BhPXBheXRtcXI1bWVldm9AcHR5cyZwbj1udWxsJmN1PUlOUiZ0bj1BVDJlYXNod2tsNG0mYW09MQ==

Scheme

myairtel://app/airtelpay

Parameters

Parameter Value
screenName scan_pay
source scan_device_native
journey pay
qrString Base64-encoded UPI URI

๐Ÿ“š Intent Reference

Application Intent Scheme Type
๐Ÿ“ฑ PhonePe phonepe://native App-specific
๐Ÿ’™ Paytm paytmmp://cash_wallet App-specific
๐ŸŸฃ MobiKwik mobikwik://upi/verifyVpa App-specific
๐Ÿ”ด Airtel Payments myairtel://app/airtelpay App-specific
๐Ÿ‡ฎ๐Ÿ‡ณ Standard UPI upi://pay Standard

๐Ÿ‡ฎ๐Ÿ‡ณ Standard UPI Intent

The standard UPI payment URI generally uses:

upi://pay

A common structure is:

upi://pay?pa=<UPI_ID>&pn=<PAYEE_NAME>&am=<AMOUNT>&cu=INR&tn=<NOTE>

Example:

upi://pay?pa=merchant@upi&pn=Demo%20Merchant&am=100&cu=INR&tn=TXN123

๐Ÿงฉ Standard UPI Parameters

Parameter Description Example
pa Payee UPI ID merchant@upi
pn Payee name Demo Merchant
am Payment amount 100
cu Currency INR
tn Transaction note TXN123
tr Transaction/reference ID REF123
mc Merchant category code 0000
url Reference URL https://example.com

โš™๏ธ Generate Standard UPI Intent

A standard UPI intent can be generated dynamically:

const upiId = "merchant@upi";
const merchantName = "Demo Merchant";
const amount = "100";
const transactionId = "TXN123456";

const upiIntent =
  `upi://pay` +
  `?pa=${encodeURIComponent(upiId)}` +
  `&pn=${encodeURIComponent(merchantName)}` +
  `&am=${encodeURIComponent(amount)}` +
  `&cu=INR` +
  `&tn=${encodeURIComponent(transactionId)}`;

console.log(upiIntent);

Result:

upi://pay?pa=merchant@upi&pn=Demo%20Merchant&am=100&cu=INR&tn=TXN123456

๐ŸŒ Web Integration

A web application can attempt to launch a UPI intent using:

function openUPIPayment() {
  const upiUrl =
    "upi://pay" +
    "?pa=merchant@upi" +
    "&pn=Demo%20Merchant" +
    "&am=100" +
    "&cu=INR" +
    "&tn=TXN123";

  window.location.href = upiUrl;
}

Example:

<button onclick="openUPIPayment()">
  Pay with UPI
</button>

On compatible mobile devices, the operating system may open an installed UPI application capable of handling the URI.

Browser behavior depends on the device, browser, installed applications, and operating-system restrictions.


๐Ÿ“ฑ Android Integration

A standard UPI intent can be launched through Android's ACTION_VIEW:

Uri uri = Uri.parse(
    "upi://pay" +
    "?pa=merchant@upi" +
    "&pn=Demo%20Merchant" +
    "&am=100" +
    "&cu=INR" +
    "&tn=TXN123"
);

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

Android will attempt to resolve the URI using compatible applications installed on the device.


๐Ÿ” Base64 Payloads

Some application-specific intents use Base64-encoded data.

For example, a JSON payload can be encoded using:

const payload = {
  amount: 100,
  vpa: "merchant@upi",
  note: "TXN123"
};

const encoded = btoa(JSON.stringify(payload));

console.log(encoded);

The payload can be decoded using:

const decoded = JSON.parse(atob(encoded));

console.log(decoded);

โš ๏ธ Security Notice

Base64 is encoding, not encryption.

Do not use Base64 to protect:

  • API keys
  • Passwords
  • Access tokens
  • Private credentials
  • Encryption keys
  • Sensitive payment information

๐Ÿงช Testing UPI Intent

For Android development, a standard UPI URI can be tested using ADB:

adb shell am start -a android.intent.action.VIEW \
-d "upi://pay?pa=merchant@upi&pn=Demo%20Merchant&am=1&cu=INR&tn=TEST123"

App-specific URI schemes can also be tested on devices where the corresponding application is installed and supports the scheme.

Testing Checklist

  • Compatible Android device
  • UPI application installed
  • Valid UPI ID
  • Correct amount
  • Correct URL encoding
  • Unique transaction/reference ID
  • Intent opens successfully
  • Payment flow completes successfully
  • Payment independently verified

๐Ÿ” Payment Security

Opening a UPI intent does not mean that a payment has been completed.

The following are different states:

Intent Created
      โ†“
Intent Opened
      โ†“
Payment Screen Displayed
      โ†“
User Approves Payment
      โ†“
Bank / PSP Processing
      โ†“
Payment Result
      โ†“
Server-side Verification

Therefore:

Intent Opened โ‰  Payment Successful

A production payment system should independently verify the transaction before marking an order as paid.


๐Ÿ’ก Recommended Payment Flow

Create Order
     โ†“
Generate Transaction ID
     โ†“
Generate UPI Intent
     โ†“
Open UPI Application
     โ†“
Customer Completes Payment
     โ†“
Payment Processing
     โ†“
Verify Payment
     โ†“
Reconcile Transaction
     โ†“
Mark Order as PAID

The backend should remain the source of truth for payment status.


๐Ÿ›ก๏ธ Security Recommendations

For production implementations:

  • Generate transaction IDs server-side.
  • Never trust payment status supplied by the client.
  • Verify the expected amount on the backend.
  • Verify the destination UPI ID.
  • URL-encode dynamic parameters.
  • Prevent transaction/reference ID reuse.
  • Maintain payment logs.
  • Implement transaction reconciliation.
  • Handle cancelled payments.
  • Handle failed payments.
  • Handle pending transactions.
  • Keep API credentials on the server.
  • Never expose private credentials inside intent URLs.
  • Do not treat an opened intent as proof of payment.

๐Ÿ“ฆ Use Cases

UPI intents can be useful for:

  • ๐Ÿ›’ E-commerce checkout
  • ๐Ÿ“ฑ Mobile applications
  • ๐ŸŒ Web-based payment pages
  • ๐Ÿ’ณ Payment collection systems
  • ๐Ÿงพ Invoice payment links
  • ๐Ÿช Merchant applications
  • ๐Ÿค– Automated payment workflows
  • ๐Ÿ“Š Internal payment testing
  • ๐Ÿงช UPI interoperability research

๐Ÿš€ Roadmap

  • Standard UPI Intent
  • PhonePe Intent reference
  • Paytm Intent reference
  • MobiKwik Intent reference
  • Airtel Payments Intent reference
  • Intent parameter documentation
  • Exact intent examples
  • Base64 payload examples
  • JavaScript examples
  • Android examples
  • Web examples
  • ADB testing examples
  • UPI Intent Generator
  • UPI QR Generator
  • Web-based Intent Builder
  • Intent Validation Utility
  • UPI App Compatibility Matrix
  • Additional UPI Application References
  • Community-maintained Intent Database

๐Ÿค Contributing

Contributions are welcome.

If you discover a new UPI intent format, parameter, compatibility behavior, or application-specific URI, you can contribute it to the project.

Contribution Guidelines

  1. Fork the repository.
  2. Create a new branch.
  3. Add or update the relevant documentation.
  4. Include a reproducible example.
  5. Mention the application version and device where possible.
  6. Test the intent before submitting.
  7. Submit a Pull Request.

Example:

git clone https://github.com/AmitDas4321/UPI-Intent.git

cd UPI-Intent

git checkout -b add-new-intent

git add .

git commit -m "docs: add new UPI intent reference"

git push origin add-new-intent

โš ๏ธ Disclaimer

This repository is an independent developer reference project.

It is not affiliated with, endorsed by, or officially supported by:

  • PhonePe
  • Paytm
  • MobiKwik
  • Airtel Payments
  • NPCI
  • Any bank
  • Any UPI application
  • Any payment provider

Application-specific URI schemes may be:

  • Undocumented
  • Private
  • Version-dependent
  • Restricted
  • Changed without notice
  • Removed in future application updates

The exact intent examples in this repository are provided for reference, research, development, testing, and educational purposes.

For production payment integrations, developers should use the official documentation, APIs, SDKs, and supported integration methods provided by the respective payment provider.


๐Ÿ‘จโ€๐Ÿ’ป Author

Amit Das

Amit Das
Full Stack Developer

GitHub Portfolio


๐Ÿ“œ License

This project is licensed under the MIT License.


Built for developers exploring UPI Intent ๐Ÿš€
Made with โค๏ธ by Amit Das

About

A developer reference for UPI Intent & deep-link URI schemes, with exact examples for PhonePe, Paytm, MobiKwik, Airtel Payments and standard UPI.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors