UPI Testing
Save your workspace key — shown once.

JMWX-5SPG-4PDW-S9TC

Why it matters
It is the only way to reach these profiles and results from another device. The lab stores a hash of it, so nobody here can recover it for you.

Test registry

JSON

166 planned slots, of which 147 can ever run from a browser. Planned slots are catalogue entries, not supported payment APIs.

Version 1.0.0, released 2026-10-13. Method IDs are permanent and never reused.

How 166 was arrived at
108
9 payment apps × the 12 parameter profiles
4
Google Pay alternative launch mechanisms
2
PhonePe alternative launch mechanisms
2
Paytm alternative launch mechanisms
16
Generic UPI: 12 profiles + 4 dispatch variants
16
QR and decoding scenarios
12
Android native harness
6
iOS native

Parameter profiles

P01 Standard merchant intent

pa + pn + tr + am + cu

What it isolates
The control. Every other profile is this one plus something, so a failure here is a failure of the destination or the app, never of an optional field.

P02 With transaction note

P01 + tn

What it isolates
Whether a note is displayed, truncated, stripped or rejected. Note length limits differ sharply between apps.

P03 With merchant category code

P01 + mc

What it isolates
THE most important comparison in the catalogue. Several apps switch from a person-to-person flow to a merchant flow when mc appears — changing limits, fees and whether the amount can be edited. P01 against P03 on the same app, same destination, same minute is the controlled experiment that shows it.

P04 Category code and note

P01 + mc + tn

What it isolates
Whether the note survives the merchant flow. Some apps that show a note in a P2P flow drop it in a merchant one.

P05 Transaction reference URL

P01 + url

What it isolates
Whether the app surfaces an invoice link, ignores it, or refuses the whole intent because of it.

P06 Category code and reference URL

P01 + mc + url

What it isolates
The combination a real invoice-with-QR produces. Isolates interactions between the merchant flow and the invoice link.

P07 Minimum amount

P01 + mam

What it isolates
mam constrains an amount the payer may edit. Beside a fixed am it is contradictory, and WHICH ONE each app honours is the finding. The lab warns about the contradiction and sends it anyway — that is the experiment.

P08 Category code and minimum amount

P01 + mc + mam

What it isolates
Whether the merchant flow changes how mam is treated.

P09 Documented initiation metadata needs identifiers

P01 + mode + orgid (+ sign when supplied)

What it isolates
How an app treats a payload that declares an initiation mode and a signing organisation. Only meaningful with real values.

P10 Bank-issued merchant identifiers needs identifiers

P01 + mid + msid + mtid

What it isolates
Whether an acquirer-issued merchant triple changes the receiving experience.

P11 Imported exact QR needs import

The imported QR payload, byte-for-byte

What it isolates
The ground truth. Your bank's own placard, unmodified, against each app — the baseline every edited copy is compared to.

P12 Imported exact payment URI needs import

The imported URI, byte-for-byte

What it isolates
The same ground truth for an intent you were given as a link rather than a QR.

All methods

Google Pay 16

GP-001 Google Pay / Standard merchant intent

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
app targeted
Profile
P01
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. The control. Every other profile is this one plus something, so a failure here is a failure of the destination or the app, never of an optional field.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.

GP-002 Google Pay / With transaction note

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
app targeted
Profile
P02
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether a note is displayed, truncated, stripped or rejected. Note length limits differ sharply between apps.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.

GP-003 Google Pay / With merchant category code

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
app targeted
Profile
P03
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. THE most important comparison in the catalogue. Several apps switch from a person-to-person flow to a merchant flow when mc appears — changing limits, fees and whether the amount can be edited. P01 against P03 on the same app, same destination, same minute is the controlled experiment that shows it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.

GP-004 Google Pay / Category code and note

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
app targeted
Profile
P04
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether the note survives the merchant flow. Some apps that show a note in a P2P flow drop it in a merchant one.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.

GP-005 Google Pay / Transaction reference URL

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
app targeted
Profile
P05
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether the app surfaces an invoice link, ignores it, or refuses the whole intent because of it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.

GP-006 Google Pay / Category code and reference URL

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
app targeted
Profile
P06
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. The combination a real invoice-with-QR produces. Isolates interactions between the merchant flow and the invoice link.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.

GP-007 Google Pay / Minimum amount

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
app targeted
Profile
P07
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. mam constrains an amount the payer may edit. Beside a fixed am it is contradictory, and WHICH ONE each app honours is the finding. The lab warns about the contradiction and sends it anyway — that is the experiment.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.

GP-008 Google Pay / Category code and minimum amount

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
app targeted
Profile
P08
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether the merchant flow changes how mam is treated.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.

GP-009 Google Pay / Documented initiation metadata

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
app targeted
Profile
P09
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. How an app treats a payload that declares an initiation mode and a signing organisation. Only meaningful with real values.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.

GP-010 Google Pay / Bank-issued merchant identifiers

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
app targeted
Profile
P10
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether an acquirer-issued merchant triple changes the receiving experience.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.

GP-011 Google Pay / Imported exact QR

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
exact replay
Profile
P11
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. The ground truth. Your bank's own placard, unmodified, against each app — the baseline every edited copy is compared to.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

GP-012 Google Pay / Imported exact payment URI

Platform
any
Scheme
intent:// (Android) · tez://upi/pay (iOS)
Mechanism
exact replay
Profile
P12
Docs
Google Pay for India developer documentation — UPI deep link / Tez scheme.
Expected and limitations
Google Pay opens on its payment confirmation screen showing the payee and ₹2.00. The same ground truth for an intent you were given as a link rather than a QR.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

GP-013 Google Pay / reached through the generic UPI chooser

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P03
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers every installed UPI app. Selecting Google Pay opens it on the payment screen. Compare against the app-targeted method with the same profile: if the targeted one fails and this one works, the problem is the intent, not the app.
  • The result depends on what the operator picked. Attribution is weaker than an app-targeted method, which is exactly why both exist.
  • On iOS a upi:// link only resolves if some installed app claims the scheme; many do not.

GP-014 Google Pay / documented tez:// scheme

Platform
any
Scheme
tez://upi/pay
Mechanism
app scheme
Profile
P01
Docs
Google Pay for India developer documentation — the tez:// UPI deep link.
Expected and limitations
Google Pay opens directly, without a chooser. This is the ONLY app-specific scheme in the catalogue whose vendor published it for third-party use, which makes it the most trustworthy iOS method here.
  • Google has deprecated parts of the Tez-era surface over time; a failure may mean the scheme was withdrawn rather than that the parameters were wrong.

GP-015 Google Pay / gpay:// scheme

Platform
any
Scheme
gpay://upi/pay
Mechanism
app scheme
Profile
P01
Docs
Observed alongside the documented tez:// scheme; treated as observed rather than documented.
Expected and limitations
Behaves as GP-014. Run both: whether gpay:// and tez:// still resolve to the same place is worth knowing before depending on either.
  • Observed, not documented. May stop working without notice.

GP-016 Google Pay for Web (merchant integration)

Platform
any
Scheme
(none — JavaScript API)
Mechanism
vendor web
Profile
P10
Docs
Google Pay API for Web — requires a Google Pay merchant profile and a supported payment gateway.
Expected and limitations
A Google Pay sheet inside the page, with no app switch. This is a genuinely different integration from every other method here — it is listed so the catalogue is honest about what exists, not because the lab can run it today.
  • NOT IMPLEMENTED AND NOT RUNNABLE. It needs merchant onboarding the lab has no part in.
  • Counted in the planned 166 and excluded from the runnable count.
PhonePe 14

PH-001 PhonePe / Standard merchant intent

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
app targeted
Profile
P01
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. The control. Every other profile is this one plus something, so a failure here is a failure of the destination or the app, never of an optional field.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PH-002 PhonePe / With transaction note

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
app targeted
Profile
P02
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. Whether a note is displayed, truncated, stripped or rejected. Note length limits differ sharply between apps.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PH-003 PhonePe / With merchant category code

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
app targeted
Profile
P03
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. THE most important comparison in the catalogue. Several apps switch from a person-to-person flow to a merchant flow when mc appears — changing limits, fees and whether the amount can be edited. P01 against P03 on the same app, same destination, same minute is the controlled experiment that shows it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PH-004 PhonePe / Category code and note

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
app targeted
Profile
P04
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. Whether the note survives the merchant flow. Some apps that show a note in a P2P flow drop it in a merchant one.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PH-005 PhonePe / Transaction reference URL

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
app targeted
Profile
P05
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. Whether the app surfaces an invoice link, ignores it, or refuses the whole intent because of it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PH-006 PhonePe / Category code and reference URL

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
app targeted
Profile
P06
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. The combination a real invoice-with-QR produces. Isolates interactions between the merchant flow and the invoice link.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PH-007 PhonePe / Minimum amount

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
app targeted
Profile
P07
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. mam constrains an amount the payer may edit. Beside a fixed am it is contradictory, and WHICH ONE each app honours is the finding. The lab warns about the contradiction and sends it anyway — that is the experiment.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PH-008 PhonePe / Category code and minimum amount

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
app targeted
Profile
P08
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. Whether the merchant flow changes how mam is treated.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PH-009 PhonePe / Documented initiation metadata

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
app targeted
Profile
P09
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. How an app treats a payload that declares an initiation mode and a signing organisation. Only meaningful with real values.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PH-010 PhonePe / Bank-issued merchant identifiers

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
app targeted
Profile
P10
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. Whether an acquirer-issued merchant triple changes the receiving experience.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PH-011 PhonePe / Imported exact QR

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
exact replay
Profile
P11
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. The ground truth. Your bank's own placard, unmodified, against each app — the baseline every edited copy is compared to.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

PH-012 PhonePe / Imported exact payment URI

Platform
any
Scheme
intent:// (Android) · phonepe://pay (iOS)
Mechanism
exact replay
Profile
P12
Docs
No public third-party deep-link specification. PhonePe publishes a merchant SDK/PG integration instead.
Expected and limitations
PhonePe opens on its payment confirmation screen showing the payee and ₹2.00. The same ground truth for an intent you were given as a link rather than a QR.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

PH-013 PhonePe / reached through the generic UPI chooser

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P03
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers every installed UPI app. Selecting PhonePe opens it on the payment screen. Compare against the app-targeted method with the same profile: if the targeted one fails and this one works, the problem is the intent, not the app.
  • The result depends on what the operator picked. Attribution is weaker than an app-targeted method, which is exactly why both exist.
  • On iOS a upi:// link only resolves if some installed app claims the scheme; many do not.

PH-014 PhonePe / phonepe:// scheme

Platform
any
Scheme
phonepe://pay
Mechanism
app scheme
Profile
P01
Docs
No public PhonePe specification for third-party deep links. The scheme is observed in the wild.
Expected and limitations
PhonePe opens directly if it registers the scheme. A failure here is the EXPECTED outcome if PhonePe does not expose it — and that negative is worth recording, because it is the answer to "can we deep-link PhonePe on iPhone".
  • UNDOCUMENTED. A working result must not be treated as a supported integration; PhonePe can remove it at any time.
  • PhonePe's supported path for merchants is their SDK / payment gateway, which is not a deep link and is out of scope for this lab.
Paytm 14

PT-001 Paytm / Standard merchant intent

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
app targeted
Profile
P01
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. The control. Every other profile is this one plus something, so a failure here is a failure of the destination or the app, never of an optional field.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PT-002 Paytm / With transaction note

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
app targeted
Profile
P02
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. Whether a note is displayed, truncated, stripped or rejected. Note length limits differ sharply between apps.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PT-003 Paytm / With merchant category code

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
app targeted
Profile
P03
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. THE most important comparison in the catalogue. Several apps switch from a person-to-person flow to a merchant flow when mc appears — changing limits, fees and whether the amount can be edited. P01 against P03 on the same app, same destination, same minute is the controlled experiment that shows it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PT-004 Paytm / Category code and note

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
app targeted
Profile
P04
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. Whether the note survives the merchant flow. Some apps that show a note in a P2P flow drop it in a merchant one.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PT-005 Paytm / Transaction reference URL

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
app targeted
Profile
P05
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. Whether the app surfaces an invoice link, ignores it, or refuses the whole intent because of it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PT-006 Paytm / Category code and reference URL

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
app targeted
Profile
P06
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. The combination a real invoice-with-QR produces. Isolates interactions between the merchant flow and the invoice link.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PT-007 Paytm / Minimum amount

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
app targeted
Profile
P07
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. mam constrains an amount the payer may edit. Beside a fixed am it is contradictory, and WHICH ONE each app honours is the finding. The lab warns about the contradiction and sends it anyway — that is the experiment.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PT-008 Paytm / Category code and minimum amount

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
app targeted
Profile
P08
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. Whether the merchant flow changes how mam is treated.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PT-009 Paytm / Documented initiation metadata

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
app targeted
Profile
P09
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. How an app treats a payload that declares an initiation mode and a signing organisation. Only meaningful with real values.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PT-010 Paytm / Bank-issued merchant identifiers

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
app targeted
Profile
P10
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. Whether an acquirer-issued merchant triple changes the receiving experience.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.

PT-011 Paytm / Imported exact QR

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
exact replay
Profile
P11
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. The ground truth. Your bank's own placard, unmodified, against each app — the baseline every edited copy is compared to.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

PT-012 Paytm / Imported exact payment URI

Platform
any
Scheme
intent:// (Android) · paytmmp://pay (iOS)
Mechanism
exact replay
Profile
P12
Docs
No public third-party deep-link specification. Paytm publishes a merchant payment gateway with issued credentials.
Expected and limitations
Paytm opens on its payment confirmation screen showing the payee and ₹2.00. The same ground truth for an intent you were given as a link rather than a QR.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • The iOS scheme used here is observed, not vendor-documented. A working result is evidence, not a supported integration.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

PT-013 Paytm / reached through the generic UPI chooser

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P03
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers every installed UPI app. Selecting Paytm opens it on the payment screen. Compare against the app-targeted method with the same profile: if the targeted one fails and this one works, the problem is the intent, not the app.
  • The result depends on what the operator picked. Attribution is weaker than an app-targeted method, which is exactly why both exist.
  • On iOS a upi:// link only resolves if some installed app claims the scheme; many do not.

PT-014 Paytm / paytmmp:// scheme

Platform
any
Scheme
paytmmp://pay
Mechanism
app scheme
Profile
P01
Docs
No public Paytm specification for third-party deep links. The scheme is observed in the wild.
Expected and limitations
Paytm opens directly if it registers the scheme.
  • UNDOCUMENTED. Paytm's supported merchant path is their payment gateway with an issued merchant ID — a different integration entirely, and one the lab deliberately does not pretend to implement.
BHIM 12

BH-001 BHIM / Standard merchant intent

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P01
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. The control. Every other profile is this one plus something, so a failure here is a failure of the destination or the app, never of an optional field.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

BH-002 BHIM / With transaction note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P02
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. Whether a note is displayed, truncated, stripped or rejected. Note length limits differ sharply between apps.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

BH-003 BHIM / With merchant category code

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P03
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. THE most important comparison in the catalogue. Several apps switch from a person-to-person flow to a merchant flow when mc appears — changing limits, fees and whether the amount can be edited. P01 against P03 on the same app, same destination, same minute is the controlled experiment that shows it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

BH-004 BHIM / Category code and note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P04
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. Whether the note survives the merchant flow. Some apps that show a note in a P2P flow drop it in a merchant one.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

BH-005 BHIM / Transaction reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P05
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. Whether the app surfaces an invoice link, ignores it, or refuses the whole intent because of it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

BH-006 BHIM / Category code and reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P06
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. The combination a real invoice-with-QR produces. Isolates interactions between the merchant flow and the invoice link.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

BH-007 BHIM / Minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P07
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. mam constrains an amount the payer may edit. Beside a fixed am it is contradictory, and WHICH ONE each app honours is the finding. The lab warns about the contradiction and sends it anyway — that is the experiment.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

BH-008 BHIM / Category code and minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P08
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. Whether the merchant flow changes how mam is treated.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

BH-009 BHIM / Documented initiation metadata

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P09
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. How an app treats a payload that declares an initiation mode and a signing organisation. Only meaningful with real values.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

BH-010 BHIM / Bank-issued merchant identifiers

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P10
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. Whether an acquirer-issued merchant triple changes the receiving experience.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

BH-011 BHIM / Imported exact QR

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P11
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. The ground truth. Your bank's own placard, unmodified, against each app — the baseline every edited copy is compared to.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

BH-012 BHIM / Imported exact payment URI

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P12
Docs
NPCI UPI Linking Specification — BHIM is the reference implementation of the generic upi:// handling.
Expected and limitations
BHIM opens on its payment confirmation screen showing the payee and ₹2.00. The same ground truth for an intent you were given as a link rather than a QR.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.
Amazon Pay 12

AZ-001 Amazon Pay / Standard merchant intent

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P01
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. The control. Every other profile is this one plus something, so a failure here is a failure of the destination or the app, never of an optional field.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

AZ-002 Amazon Pay / With transaction note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P02
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether a note is displayed, truncated, stripped or rejected. Note length limits differ sharply between apps.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

AZ-003 Amazon Pay / With merchant category code

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P03
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. THE most important comparison in the catalogue. Several apps switch from a person-to-person flow to a merchant flow when mc appears — changing limits, fees and whether the amount can be edited. P01 against P03 on the same app, same destination, same minute is the controlled experiment that shows it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

AZ-004 Amazon Pay / Category code and note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P04
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether the note survives the merchant flow. Some apps that show a note in a P2P flow drop it in a merchant one.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

AZ-005 Amazon Pay / Transaction reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P05
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether the app surfaces an invoice link, ignores it, or refuses the whole intent because of it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

AZ-006 Amazon Pay / Category code and reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P06
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. The combination a real invoice-with-QR produces. Isolates interactions between the merchant flow and the invoice link.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

AZ-007 Amazon Pay / Minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P07
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. mam constrains an amount the payer may edit. Beside a fixed am it is contradictory, and WHICH ONE each app honours is the finding. The lab warns about the contradiction and sends it anyway — that is the experiment.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

AZ-008 Amazon Pay / Category code and minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P08
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether the merchant flow changes how mam is treated.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

AZ-009 Amazon Pay / Documented initiation metadata

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P09
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. How an app treats a payload that declares an initiation mode and a signing organisation. Only meaningful with real values.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

AZ-010 Amazon Pay / Bank-issued merchant identifiers

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P10
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether an acquirer-issued merchant triple changes the receiving experience.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

AZ-011 Amazon Pay / Imported exact QR

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P11
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. The ground truth. Your bank's own placard, unmodified, against each app — the baseline every edited copy is compared to.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

AZ-012 Amazon Pay / Imported exact payment URI

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P12
Docs
No public UPI deep-link scheme. Amazon Pay UPI lives inside the Amazon shopping app.
Expected and limitations
Amazon Pay opens on its payment confirmation screen showing the payee and ₹2.00. The same ground truth for an intent you were given as a link rather than a QR.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.
WhatsApp Pay 12

WA-001 WhatsApp Pay / Standard merchant intent

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P01
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. The control. Every other profile is this one plus something, so a failure here is a failure of the destination or the app, never of an optional field.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

WA-002 WhatsApp Pay / With transaction note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P02
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether a note is displayed, truncated, stripped or rejected. Note length limits differ sharply between apps.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

WA-003 WhatsApp Pay / With merchant category code

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P03
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. THE most important comparison in the catalogue. Several apps switch from a person-to-person flow to a merchant flow when mc appears — changing limits, fees and whether the amount can be edited. P01 against P03 on the same app, same destination, same minute is the controlled experiment that shows it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

WA-004 WhatsApp Pay / Category code and note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P04
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether the note survives the merchant flow. Some apps that show a note in a P2P flow drop it in a merchant one.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

WA-005 WhatsApp Pay / Transaction reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P05
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether the app surfaces an invoice link, ignores it, or refuses the whole intent because of it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

WA-006 WhatsApp Pay / Category code and reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P06
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. The combination a real invoice-with-QR produces. Isolates interactions between the merchant flow and the invoice link.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

WA-007 WhatsApp Pay / Minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P07
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. mam constrains an amount the payer may edit. Beside a fixed am it is contradictory, and WHICH ONE each app honours is the finding. The lab warns about the contradiction and sends it anyway — that is the experiment.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

WA-008 WhatsApp Pay / Category code and minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P08
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether the merchant flow changes how mam is treated.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

WA-009 WhatsApp Pay / Documented initiation metadata

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P09
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. How an app treats a payload that declares an initiation mode and a signing organisation. Only meaningful with real values.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

WA-010 WhatsApp Pay / Bank-issued merchant identifiers

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P10
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. Whether an acquirer-issued merchant triple changes the receiving experience.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

WA-011 WhatsApp Pay / Imported exact QR

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P11
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. The ground truth. Your bank's own placard, unmodified, against each app — the baseline every edited copy is compared to.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

WA-012 WhatsApp Pay / Imported exact payment URI

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P12
Docs
No public UPI deep-link scheme. WhatsApp's own wa.me links are messaging links, not payment intents.
Expected and limitations
WhatsApp Pay opens on its payment confirmation screen showing the payee and ₹2.00. The same ground truth for an intent you were given as a link rather than a QR.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.
CRED 12

CR-001 CRED / Standard merchant intent

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P01
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. The control. Every other profile is this one plus something, so a failure here is a failure of the destination or the app, never of an optional field.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

CR-002 CRED / With transaction note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P02
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. Whether a note is displayed, truncated, stripped or rejected. Note length limits differ sharply between apps.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

CR-003 CRED / With merchant category code

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P03
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. THE most important comparison in the catalogue. Several apps switch from a person-to-person flow to a merchant flow when mc appears — changing limits, fees and whether the amount can be edited. P01 against P03 on the same app, same destination, same minute is the controlled experiment that shows it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

CR-004 CRED / Category code and note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P04
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. Whether the note survives the merchant flow. Some apps that show a note in a P2P flow drop it in a merchant one.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

CR-005 CRED / Transaction reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P05
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. Whether the app surfaces an invoice link, ignores it, or refuses the whole intent because of it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

CR-006 CRED / Category code and reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P06
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. The combination a real invoice-with-QR produces. Isolates interactions between the merchant flow and the invoice link.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

CR-007 CRED / Minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P07
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. mam constrains an amount the payer may edit. Beside a fixed am it is contradictory, and WHICH ONE each app honours is the finding. The lab warns about the contradiction and sends it anyway — that is the experiment.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

CR-008 CRED / Category code and minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P08
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. Whether the merchant flow changes how mam is treated.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

CR-009 CRED / Documented initiation metadata

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P09
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. How an app treats a payload that declares an initiation mode and a signing organisation. Only meaningful with real values.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

CR-010 CRED / Bank-issued merchant identifiers

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P10
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. Whether an acquirer-issued merchant triple changes the receiving experience.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

CR-011 CRED / Imported exact QR

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P11
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. The ground truth. Your bank's own placard, unmodified, against each app — the baseline every edited copy is compared to.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

CR-012 CRED / Imported exact payment URI

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P12
Docs
No public UPI deep-link specification.
Expected and limitations
CRED opens on its payment confirmation screen showing the payee and ₹2.00. The same ground truth for an intent you were given as a link rather than a QR.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.
Navi 12

NV-001 Navi / Standard merchant intent

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P01
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. The control. Every other profile is this one plus something, so a failure here is a failure of the destination or the app, never of an optional field.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

NV-002 Navi / With transaction note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P02
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. Whether a note is displayed, truncated, stripped or rejected. Note length limits differ sharply between apps.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

NV-003 Navi / With merchant category code

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P03
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. THE most important comparison in the catalogue. Several apps switch from a person-to-person flow to a merchant flow when mc appears — changing limits, fees and whether the amount can be edited. P01 against P03 on the same app, same destination, same minute is the controlled experiment that shows it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

NV-004 Navi / Category code and note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P04
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. Whether the note survives the merchant flow. Some apps that show a note in a P2P flow drop it in a merchant one.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

NV-005 Navi / Transaction reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P05
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. Whether the app surfaces an invoice link, ignores it, or refuses the whole intent because of it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

NV-006 Navi / Category code and reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P06
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. The combination a real invoice-with-QR produces. Isolates interactions between the merchant flow and the invoice link.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

NV-007 Navi / Minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P07
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. mam constrains an amount the payer may edit. Beside a fixed am it is contradictory, and WHICH ONE each app honours is the finding. The lab warns about the contradiction and sends it anyway — that is the experiment.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

NV-008 Navi / Category code and minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P08
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. Whether the merchant flow changes how mam is treated.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

NV-009 Navi / Documented initiation metadata

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P09
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. How an app treats a payload that declares an initiation mode and a signing organisation. Only meaningful with real values.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

NV-010 Navi / Bank-issued merchant identifiers

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P10
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. Whether an acquirer-issued merchant triple changes the receiving experience.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

NV-011 Navi / Imported exact QR

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P11
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. The ground truth. Your bank's own placard, unmodified, against each app — the baseline every edited copy is compared to.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

NV-012 Navi / Imported exact payment URI

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P12
Docs
No public UPI deep-link specification.
Expected and limitations
Navi opens on its payment confirmation screen showing the payee and ₹2.00. The same ground truth for an intent you were given as a link rather than a QR.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.
super.money 12

SM-001 super.money / Standard merchant intent

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P01
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. The control. Every other profile is this one plus something, so a failure here is a failure of the destination or the app, never of an optional field.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

SM-002 super.money / With transaction note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P02
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. Whether a note is displayed, truncated, stripped or rejected. Note length limits differ sharply between apps.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

SM-003 super.money / With merchant category code

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P03
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. THE most important comparison in the catalogue. Several apps switch from a person-to-person flow to a merchant flow when mc appears — changing limits, fees and whether the amount can be edited. P01 against P03 on the same app, same destination, same minute is the controlled experiment that shows it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

SM-004 super.money / Category code and note

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P04
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. Whether the note survives the merchant flow. Some apps that show a note in a P2P flow drop it in a merchant one.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

SM-005 super.money / Transaction reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P05
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. Whether the app surfaces an invoice link, ignores it, or refuses the whole intent because of it.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

SM-006 super.money / Category code and reference URL

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P06
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. The combination a real invoice-with-QR produces. Isolates interactions between the merchant flow and the invoice link.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

SM-007 super.money / Minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P07
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. mam constrains an amount the payer may edit. Beside a fixed am it is contradictory, and WHICH ONE each app honours is the finding. The lab warns about the contradiction and sends it anyway — that is the experiment.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

SM-008 super.money / Category code and minimum amount

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P08
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. Whether the merchant flow changes how mam is treated.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

SM-009 super.money / Documented initiation metadata

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P09
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. How an app treats a payload that declares an initiation mode and a signing organisation. Only meaningful with real values.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

SM-010 super.money / Bank-issued merchant identifiers

Platform
android
Scheme
intent:// (Android only)
Mechanism
app targeted
Profile
P10
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. Whether an acquirer-issued merchant triple changes the receiving experience.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.

SM-011 super.money / Imported exact QR

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P11
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. The ground truth. Your bank's own placard, unmodified, against each app — the baseline every edited copy is compared to.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.

SM-012 super.money / Imported exact payment URI

Platform
android
Scheme
intent:// (Android only)
Mechanism
exact replay
Profile
P12
Docs
No public UPI deep-link specification.
Expected and limitations
super.money opens on its payment confirmation screen showing the payee and ₹2.00. The same ground truth for an intent you were given as a link rather than a QR.
  • A browser cannot tell you whether an app is installed. "App did not open" and "app is not installed" look identical from here; AN-004 in the Android harness is what separates them.
  • Not runnable on iOS at all through this method.
  • Replays imported bytes. The parameters shown are whatever the original payload contained, not the lab's.
Generic UPI 16

GN-001 Generic UPI / Standard merchant intent

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P01
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. The control. Every other profile is this one plus something, so a failure here is a failure of the destination or the app, never of an optional field.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-002 Generic UPI / With transaction note

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P02
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. Whether a note is displayed, truncated, stripped or rejected. Note length limits differ sharply between apps.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-003 Generic UPI / With merchant category code

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P03
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. THE most important comparison in the catalogue. Several apps switch from a person-to-person flow to a merchant flow when mc appears — changing limits, fees and whether the amount can be edited. P01 against P03 on the same app, same destination, same minute is the controlled experiment that shows it.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-004 Generic UPI / Category code and note

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P04
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. Whether the note survives the merchant flow. Some apps that show a note in a P2P flow drop it in a merchant one.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-005 Generic UPI / Transaction reference URL

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P05
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. Whether the app surfaces an invoice link, ignores it, or refuses the whole intent because of it.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-006 Generic UPI / Category code and reference URL

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P06
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. The combination a real invoice-with-QR produces. Isolates interactions between the merchant flow and the invoice link.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-007 Generic UPI / Minimum amount

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P07
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. mam constrains an amount the payer may edit. Beside a fixed am it is contradictory, and WHICH ONE each app honours is the finding. The lab warns about the contradiction and sends it anyway — that is the experiment.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-008 Generic UPI / Category code and minimum amount

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P08
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. Whether the merchant flow changes how mam is treated.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-009 Generic UPI / Documented initiation metadata

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P09
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. How an app treats a payload that declares an initiation mode and a signing organisation. Only meaningful with real values.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-010 Generic UPI / Bank-issued merchant identifiers

Platform
any
Scheme
upi://pay
Mechanism
generic chooser
Profile
P10
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. Whether an acquirer-issued merchant triple changes the receiving experience.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-011 Generic UPI / Imported exact QR

Platform
any
Scheme
upi://pay
Mechanism
exact replay
Profile
P11
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. The ground truth. Your bank's own placard, unmodified, against each app — the baseline every edited copy is compared to.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-012 Generic UPI / Imported exact payment URI

Platform
any
Scheme
upi://pay
Mechanism
exact replay
Profile
P12
Docs
NPCI UPI Linking Specification — upi:// deep link.
Expected and limitations
The OS offers the installed UPI apps; the one you pick opens on its payment screen. The same ground truth for an intent you were given as a link rather than a QR.
  • This group is the ONLY one that is meaningfully runnable on an iPhone, and even there it depends on an installed app claiming the upi:// scheme.
  • Attribution is to whichever app the operator selected, which must be recorded with the result.

GN-013 Generic UPI / dispatch by anchor element click

Platform
any
Scheme
upi://pay
Mechanism
dispatch variant
Profile
P01
Docs
Browser behaviour, not a UPI specification. See each browser's external-protocol handling.
Expected and limitations
The baseline, and the only technique that counts as a genuine user gesture everywhere.
  • Holds the URI constant and changes only the dispatch, so a difference between GN-013 and this method is a BROWSER difference and never a UPI one.

GN-014 Generic UPI / dispatch by window.location assignment

Platform
any
Scheme
upi://pay
Mechanism
dispatch variant
Profile
P01
Docs
Browser behaviour, not a UPI specification. See each browser's external-protocol handling.
Expected and limitations
Some in-app browsers handle this differently from an anchor. Still inside a user gesture, so it should be allowed.
  • Holds the URI constant and changes only the dispatch, so a difference between GN-013 and this method is a BROWSER difference and never a UPI one.

GN-015 Generic UPI / dispatch by hidden iframe src

Platform
any
Scheme
upi://pay
Mechanism
dispatch variant
Profile
P01
Docs
Browser behaviour, not a UPI specification. See each browser's external-protocol handling.
Expected and limitations
A legacy technique. Modern browsers block custom-scheme navigation from a non-top-level frame, so FAILURE IS THE EXPECTED RESULT — this method exists to prove the block, because integrations still ship it.
  • Holds the URI constant and changes only the dispatch, so a difference between GN-013 and this method is a BROWSER difference and never a UPI one.

GN-016 Generic UPI / dispatch by form submission

Platform
any
Scheme
upi://pay
Mechanism
dispatch variant
Profile
P01
Docs
Browser behaviour, not a UPI specification. See each browser's external-protocol handling.
Expected and limitations
Blocked by the form-action content security policy on any site that sets one, including this lab. The lab therefore reports it as blocked-by-design and explains why, rather than quietly failing.
  • Holds the URI constant and changes only the dispatch, so a difference between GN-013 and this method is a BROWSER difference and never a UPI one.
QR and decoding 16

QR-001 Decode an uploaded QR image

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
Every field in the QR is listed, including any the lab has no definition for.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.

QR-002 Decode a QR inside a screenshot

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
The QR is located within a larger screenshot — surrounding app chrome, a status bar, cropped edges — and decoded.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.
  • A heavily compressed or small screenshot may not decode. That is a limit of the image, not of the payload.

QR-003 Decode through the device camera

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
A live camera scan produces the same decode as an upload.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.
  • Needs camera permission and a secure context (https). Will not work over plain http except on localhost.

QR-004 Decode pasted raw payload text

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
A payload typed or pasted as text decodes identically to the same payload scanned from an image.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.

QR-005 Decode a pasted complete payment URI

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
A full upi:// URI is parsed into its parameters with order, duplicates and encoding preserved.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.

QR-006 Decode an EMVCo / Bharat QR payload

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
A tag-length-value payload is decoded tag by tag, with the UPI merchant-account template located wherever it sits rather than assumed to be tag 26.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.
  • Card-network templates on a Bharat QR carry values the lab shows raw and does not interpret.

QR-007 Validate an EMVCo checksum

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
The CRC-16/CCITT-FALSE in tag 63 is recomputed and compared. A mismatch usually means transcription, not a bad placard.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.

QR-008 Preserve unknown parameters

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
A payload carrying a parameter the lab has never seen keeps it, in position, with its original encoding — and says so.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.

QR-009 Detect duplicate parameters

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
A payload with the same key twice is reported as such rather than silently collapsed.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.
  • Apps disagree about which duplicate wins; the lab reports the duplication and does not pick a winner.

QR-010 Percent-encoding fidelity

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
Rebuilding the payload from the parsed parts reproduces the original bytes exactly, or the lab tells you precisely where it would not.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.

QR-011 Signed-payload detection

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
A payload carrying sign/orgid is identified as signed, and every field whose edit would invalidate the signature is locked in the editable copy.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.
  • The lab cannot verify a signature — only the issuing PSP holds the key. It reports presence and the consequences of editing, never validity.

QR-012 Scan a lab-generated unsigned QR

Platform
any
Scheme
upi://pay (encoded in the QR)
Mechanism
qr scan
Profile
P03
Docs
NPCI UPI Linking Specification; ISO/IEC 18004.
Expected and limitations
The QR the lab generated from your parameters is scanned by a payment app, which opens on its payment screen.
  • A scan is a DIFFERENT CODE PATH inside a payment app from a deep link. An app that accepts a parameter by scan may reject it by intent, and vice versa — that difference is the entire reason this group exists.

QR-013 Scan an imported original QR replayed by the lab

Platform
any
Scheme
upi://pay (encoded in the QR)
Mechanism
qr scan
Profile
P03
Docs
NPCI UPI Linking Specification; ISO/IEC 18004.
Expected and limitations
The lab re-renders your imported payload byte-for-byte as a QR. Scanning it should be indistinguishable from scanning the original placard — if it is not, the difference is in the image, not the data.
  • A scan is a DIFFERENT CODE PATH inside a payment app from a deep link. An app that accepts a parameter by scan may reject it by intent, and vice versa — that difference is the entire reason this group exists.
  • Requires an imported payload.

QR-014 Compare original against regenerated payload

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
A byte-level diff between the imported payload and what the lab would generate from the same visible parameters. Any difference is shown character by character.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.

QR-015 Cross-device scan

Platform
any
Scheme
upi://pay (encoded in the QR)
Mechanism
qr scan
Profile
P03
Docs
NPCI UPI Linking Specification; ISO/IEC 18004.
Expected and limitations
The same generated QR scanned from a second phone, to separate "this app rejects this payload" from "this phone has a problem".
  • A scan is a DIFFERENT CODE PATH inside a payment app from a deep link. An app that accepts a parameter by scan may reject it by intent, and vice versa — that difference is the entire reason this group exists.
  • Needs two devices, each recorded separately in the results matrix.

QR-016 Report an undecodable or proprietary QR

Platform
any
Scheme
(none)
Mechanism
decode only
Profile
P11
Docs
EMVCo merchant QR specification; NPCI UPI Linking Specification; ISO/IEC 18004 (QR).
Expected and limitations
For a QR the lab cannot decode — a vendor format, an encrypted payload, an ordinary web link — it says exactly that, shows the raw contents, and explains the limitation. It does not guess.
  • Decode-only. No app opens and no money can move, so this method is safe to run as often as you like.
  • The lab will NOT fetch a web link found in a QR. Following an arbitrary URL that arrived in a QR is how a diagnostic tool becomes a phishing launcher.
Android native 12

AN-001 Implicit ACTION_VIEW with a upi:// URI

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
The system resolves the intent to whatever UPI apps are installed. Baseline for every other Android method.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.

AN-002 Explicit chooser via Intent.createChooser

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
A chooser appears listing the resolvers, titled by the harness. Distinguishes "no app handles this" from "the chooser was dismissed".
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.

AN-003 Package-targeted explicit intent

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
One named app opens with no chooser. The native equivalent of the browser intent:// methods — run both to find out whether Chrome is the limiting factor.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.

AN-004 Enumerate UPI handlers with queryIntentActivities

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
A list of every installed app that claims upi://, with package names and versions. THE method that turns "the app did not open" into a real answer. It is also the only way to confirm the package names this catalogue uses for Navi and super.money.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.

AN-005 Observe the activity result

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
The response the payment app returns to the calling activity is captured verbatim. A browser never sees this. It is the single largest capability gap between the web lab and a native harness.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.

AN-006 Parse the UPI response string

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
txnId, responseCode, Status and txnRef are extracted from the returned string. An app-reported Status=SUCCESS is still only an app report, and the lab labels it as such — see the evidence ladder.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.

AN-007 Capture app version via PackageManager

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
The exact version of each installed payment app. Without this, a result recorded six months apart may be about two different apps.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.

AN-008 Android 11+ package visibility

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
Whether the harness can see payment apps at all under the <queries> restrictions. On Android 11 and later an app that does not declare <queries> gets an empty list, which looks exactly like "nothing is installed".
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.

AN-009 App-switch and return timing

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
How long the switch out and back takes, and whether the calling activity survives. A calling activity killed during the switch loses the result, which is a real integration failure mode.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.

AN-010 FLAG_ACTIVITY_NEW_TASK behaviour

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
Whether the payment app lands in a separate task and what that does to the return. Affects whether the activity result arrives at all.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.

AN-011 WebView versus Chrome Custom Tab dispatch

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
Whether a upi:// link fires from an embedded WebView, and whether it needs shouldOverrideUrlLoading. Explains a very common "it works in Chrome but not in our app" report.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.

AN-012 Signed intent handling (mode/orgid/sign)

Platform
android
Scheme
upi:// (via Android Intent)
Mechanism
native android
Profile
P03
Docs
Android Intent and PackageManager documentation; NPCI UPI Linking Specification.
Expected and limitations
How an app treats a genuinely signed payload versus an unsigned one. Needs a real signed payload from a PSP; the harness will not synthesise one.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • A browser cannot enumerate installed apps, read an activity result, or learn an app version. Claiming otherwise is the most common lie in this problem space.
iOS native 6

IO-001 canOpenURL for upi://

Platform
ios
Scheme
upi:// and app-specific schemes
Mechanism
native ios
Profile
P01
Docs
Apple UIApplication and Universal Links documentation.
Expected and limitations
Whether any installed app claims the upi:// scheme. Requires the scheme to be listed in LSApplicationQueriesSchemes; an undeclared scheme always answers false, which is indistinguishable from "not installed".
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • iOS restricts scheme queries far more tightly than Android; several questions that are answerable on Android are not answerable at all here.

IO-002 canOpenURL per app scheme

Platform
ios
Scheme
upi:// and app-specific schemes
Mechanism
native ios
Profile
P01
Docs
Apple UIApplication and Universal Links documentation.
Expected and limitations
Which of the app-specific schemes resolve on this device. iOS allows at most 50 declared query schemes, so a harness must choose which to ask about.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • iOS restricts scheme queries far more tightly than Android; several questions that are answerable on Android are not answerable at all here.

IO-003 UIApplication.open with upi://

Platform
ios
Scheme
upi:// and app-specific schemes
Mechanism
native ios
Profile
P01
Docs
Apple UIApplication and Universal Links documentation.
Expected and limitations
Whether iOS hands a upi:// URI to an app, and which one. iOS has no chooser: the first app that registered the scheme wins, and the user cannot pick. This is the deepest behavioural difference from Android.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • iOS restricts scheme queries far more tightly than Android; several questions that are answerable on Android are not answerable at all here.

IO-004 UIApplication.open with an app scheme

Platform
ios
Scheme
upi:// and app-specific schemes
Mechanism
native ios
Profile
P01
Docs
Apple UIApplication and Universal Links documentation.
Expected and limitations
Direct launch of a named app. The only reliable way to address a specific app on iOS.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • iOS restricts scheme queries far more tightly than Android; several questions that are answerable on Android are not answerable at all here.

IO-005 Universal Link handling

Platform
ios
Scheme
upi:// and app-specific schemes
Mechanism
native ios
Profile
P01
Docs
Apple UIApplication and Universal Links documentation.
Expected and limitations
Whether an https link registered by a payment app opens the app rather than Safari. Universal Links are the Apple-sanctioned path, and the only one that degrades gracefully when the app is absent.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • iOS restricts scheme queries far more tightly than Android; several questions that are answerable on Android are not answerable at all here.

IO-006 Return path after payment

Platform
ios
Scheme
upi:// and app-specific schemes
Mechanism
native ios
Profile
P01
Docs
Apple UIApplication and Universal Links documentation.
Expected and limitations
What, if anything, comes back to the calling app. DOCUMENTS A PLATFORM LIMITATION RATHER THAN TESTING A FEATURE: iOS has no activity-result equivalent, so there is no callback unless the payment app implements a return URL. Any iOS integration that assumes a result callback is built on something that does not exist.
  • NOT RUNNABLE FROM A BROWSER, AND THE HARNESS DOES NOT EXIST YET. Counted in the planned 166 and excluded from the runnable count.
  • iOS restricts scheme queries far more tightly than Android; several questions that are answerable on Android are not answerable at all here.