This document covers the QR+ system context, Paylink encoding formats and targeted experiences. The implementation of this specification is governed by the following API specifications:
The below diagram shows the relationships and interactions between the QR+ actors and systems:
The QR+ system coordinates multiple stakeholders to enrich data and initiate payments through existing payment rails. The key actors are:
| Actor | Description |
|---|---|
| Payer | A party that interacts with a Paylink with the intention of making payment. To achieve this, the Payer can present a Payer presented Paylink (PrP) or action a Payee presented Paylink (PeP). For example, presenting a phone based Paylink to a shop assistant (then acting as Presenter) or scanning a printed QR Paylink with a mobile device (then acting as Scanner). |
| Payee | A party that interacts with a Paylink with the intention of receiving payment. To achieve this, the Payee can action a Payer presented Paylink (PrP) or present a Payee presented Paylink (PeP). For example scanning a consumer presented paylink at a retail POS (then acting as Scanner), or presenting a electronic QR at a vending machine (then acting as Presenter). |
| Payer Service Provider (PrSP) | A registered organization that executes QR+ enrichment flows on behalf of a Payer. The PrSP can have Paylink Provider capabilities to create new Paylinks and/or Paylink Facilitator capabilities to process 3rd party Paylinks |
| Payee Service Provider (PeSP) | A registered organization that executes QR+ enrichment flows on behalf of a Payee. The PeSP can have Paylink Provider capabilities to create new Paylinks and/or Paylink Facilitator capabilities to process 3rd party Paylinks |
| Payment Rail Network | The QR+ Service Provider does pull- and push- payment initiation, but the payment itself is executed through a Payment Rail Network. The Payment Rail is responsible for the authorization, capture, reconciliation, and settlement of the payment. |
| SARB NPU | The South African Reserve Bank National Payment Utility manages QR+ regulations and infrastructure on behalf of the industry to assure a secure, equitable, and cost-effective network. |
A QR+ flow consists out of the following high-level steps:
NOTE: Payment Processing DOES NOT form part of QR+ Flow execution
The Paylink format is driven by the Encoding Format (how the Paylink attributes are encoded into the data payload) and the Presentment Format (how the encoded data is presented to the Scanner)
The following encoding formats are supported:
Design objectives:
The encoding consists of the following elements:
uri scheme: The URI scheme for QR+ paylinks are qr-plusanchorDomain: The naming authority of the URI. One value for all Paylinks and used as authority for registration of mobile deep-linking apps. The anchor domain is the domain where the QR+ Registry for this network is hosted.flowTypeIndicator: Indicator to the flow type. Unreserved URI character string defined by the Registry Service.spIndicator: Indicator to the registered Paylink Provider who can resolve this Paylink. This encoding-specific indicator is issued by SARB as part of the Service Provider registration process and published by the Registry Service.spIndicator to the relevant Service Provider API host is managed by the Paylink Registry.spIndicator 'xmpl': Reserved for example links. Never in active use.paylinkValue: A random string of at least 20 characters (RFC3986 'unreserved' characters; RegEx '^[A-Za-z0-9-._~]*$')Further requirements:
prp-connected).paylinkValue MUST comply to the PLV Random Number Generation requirementsDesign objectives:
The encoding consists of the following elements:
flowTypeIndicator (e.g. 2).spIndicator identifying the registered Paylink Provider, within the Flow Type context, who can resolve this Paylink (e.g. 48).spIndicator to Paylink Provider API host/url resolved by SARB NPU Paylink Registry.paymentLinkValue (e.g., 439574307).luhnDigit (https://en.wikipedia.org/wiki/Luhn_algorithm), calculated over preceding digits (e.g., 7).Further requirements:
paylinkValue MUST be generated in compliance of the PLV Random Number Generation requirementsDesign objectives:
The encoding consists of the following elements:
flowTypeIndicator (e.g. '2').spIndicator identifying the registered Paylink Provider who can resolve this Paylink (e.g. '3713').spIndicator to the relevant Service Provider API host is managed by the Paylink Registry.paylinkValue (e.g., '9436387216843892349').Further requirements:
paylinkValue MUST comply to the PLV Random Number Generation requirementsDesign objectives:
Below the Concise Data Definition Language (CDDL) specification of the Paylink in Concise Binary Object Representation (CBOR) format
paylink = [
bstr .cbor payload,
signature
]
payload = (
kid:bstr .size 16,
plv:bstr .size 12,
p:uint .size 2,
ts:time, ; 32bit uint seconds since 1970 - range to 2038
)
signature = bstr .size 64
The encoding consists of the following elements:
kid: The key Id of the cryptographic key used to sign the Paylink. The Paylink Provider must be able to correlate this value to the ECC pubic key and its owner for signature validation.plv: The Paylink Value of the Paylink (12 byte binary value).p: The Paylink Provider identifier UINT containing:spIndicator: Lowest 12 bits (spIndicator = p mod 4096). Values published by the Paylink Registry.flowTypeIndicator: Highest 4 bits (flowTypeIndicator = p div 4096). Values published by the Paylink Registry.ts: The unix timestamp in seconds since 1970-01-01T00:00:00.000Z when the Paylink was created.signature: The signature over the CBOR encoded payload block using ECDSA with P-256 curve (ES256)Further requirements:
prp-disconnected flow type).The following presentment formats are supported:
| Presentment Format | Description | Example |
|---|---|---|
| QR presentment | The Paylink is presented an ISO18004 QR code using 'H' (high) error correction. This is targeted at mobile phone use cases where the Paylink is scanned or presented by consumer devices and the Paylink does not need to be recognized or reproduced by humans. This presentment format MAY also be clickable on presentation devices that support deep linking to Paylink Facilitator Apps | |
| String presentment | The Paylink is presented as a string that requires actioning through human reproduction. String presentment of a Number Encoded Paylink must use a separation character (e.g. '-') to create a 'd{3}-d{4}-d{2}-d{4}' grouping to ease recognition and reproduction | |
| Barcode presentment | The Paylink is presented as a Code128 barcode. Targeted at use cases where scanning is done by legacy barcode readers. | |
| Web click presentment | The Paylink is presented as a web URI that is clickable on a presentation device that support deep linking to Paylink Facilitator Apps. |
NOTE: The 'Paylink' branding above will be updated following NPU branding discussions. At time of publication, the branding has not yet been finalized but some QR+ acceptance marking will be present.
The Paylink standard supports specific combinations of encoding and presentment strategies for specific experiences.
| QR presentment | String Presentment | Barcode Presentment | Web click Presentment | |
|---|---|---|---|---|
| URI encoded | PeP-1; PeP-2; PeP-3; PeP-4; PeP-6; PrP-1 | - | - | PeP-2; PeP-3; PeP-4; PeP-6; |
| Number encoded | - | PeP-1; PeP-4; PeP-6 | - | - |
| Extended Number encoded | - | - | PrP-1; | - |
| Signed CBOR encoded | PrP-2; | - | - | - |
The random number generator (RNG) used to generate all PLVs must comply with the requirements specified in NIST SP 800-90A and must use a deterministic random bit generator (DRBG) based on HMAC-SHA256, CTR-AES256, or SHA-256. The entropy source must be validated according to NIST SP 800-90B and provide at least 128 bits of entropy per seed. Implementation must be tested using the NIST Cryptographic Algorithm Validation Program (CAVP) or equivalent statistical test suites. Recognized test suites include (i) Diehard tests (https://en.wikipedia.org/wiki/Diehard_tests) (ii) NIST Statistical Test Suite (https://github.com/arcetri/sts) and (iii) the rngtest utility (https://man.docs.euro-linux.com/EL%209/rng-tools/rngtest.1.en.html)
The following QR+ flow types are supported:
| Flow Type | Description | Supported Encodings |
|---|---|---|
pep-general |
A Payee Presentment flow for general consumption in low risk applications. Paylinks generated for this flow type MAY have an infinite lifespan although lifespan SHOULD be limited unless required by the use case (e.g. printed, multi-use Paylinks). A quarantine period of 12 months must be observed for all terminated or expired Paylinks. | URI Encoding |
pep-shortcode |
A Payee Presentment flow targeted at use cases which require Paylink actioning through human reproduction. Paylinks generated for this flow type MUST have a lifespan of less than 30 minutes. A quarantine period of 1 month must be observed for all terminated Paylinks. | Number Encoding |
prp-connected |
A Payer Presentment flow for general use when the Payer App is connected and able to provide real time transaction approval. Paylinks generated for this flow MUST have a lifespan of less than 30 minutes. A quarantine period of 1 month must be observed for all terminated Paylinks. | URI Encoding; Extended Number Encoding |
prp-disconnected |
A Payer Presentment flow for use when the Payer App not connected and unable to provide real time transaction approval. PLVs generated and distributed MUST have a lifespan of less than 3 months and on-device generated Paylinks MUST have a lifespan of less than 30 minutes. PLVs generated for this flow MUST be single use (only used in one flow instance irrespective of whether it results in successful payment or now). A quarantine period of 12 months must be observed for all PLVs. | Signed CBOR encoding |
The QR+ standard targets the enablement of the following Payee Presentment experiences. This is not intended to be an exhaustive list of all use cases that can be realized, but rather serves as framework to understand and regulate the capabilities it presents.
This experience targets a Merchant (Payee) doing an on-screen presentment of a Paylink at a cash register. Once the Consumer (Payer) indicates their intent to pay using QR+, the cashier presents a single use Paylink linked to the current checkout session. The Consumer scans the Paylink with a mobile app. The Paylink may be presented, and link resolved, before the transaction details are available (check-in) or afterwards (immediate payment). When the transaction details are available, the PrSP does a Payment request and the PrSP prompts the Payer to approve the payment. After the payment is executed, both the Merchant (cashier) and the Consumer are notified of the successful payment.
| QR Presentment | Barcode Presentment | String Presentment | Web Click Presentment | |
|---|---|---|---|---|
| URI Encoded | ✓ | - | - | - |
| Number Encoded | - | - | ✓ | - |
| Extended Number Encoded | - | - | - | - |
| Signed CBOR Encoded | - | - | - | - |
This experience targets a Merchant (Payee) presenting a multi-use Paylink for payment in either physical proximity or online scenarios. One Paylink is used for multiple payments from different customers. The Merchant generates the Paylink and publishes it in either printed or static uri format. The Paylink metadata could include reusable transaction details, such as the amount at creation. At check-out, the Merchant presents the Paylink to the Consumer for payment. The Consumer actions the Paylink with a mobile app and may be prompted to augment transaction information (e.g., amount, payment reference) before approving the payment. After payment, the Payer is notified of the successful payment. An attempt must be made to notify the Payee of the payment but the Payee's availability to receive the notification is not essential.
| QR Presentment | Barcode Presentment | String Presentment | Web Click Presentment | |
|---|---|---|---|---|
| URI Encoded | ✓ | - | - | ✓ (variant 2) |
| Number Encoded | - | - | - | - |
| Extended Number Encoded | - | - | - | - |
| Signed CBOR Encoded | - | - | - | - |
This experience targets a Merchant (Payee) presenting a single context Paylink for payment by a Consumer. The single context can be linked to one transaction or to one customer. The proximity can vary: it may be nearby, such as in the case of a restaurant bill, or distant, such as with mail invoicing. When generating the invoice or bill, the Merchant creates a Paylink with metadata referencing payment allocation information. The Paylink is shared with the intended Payer in physical (printed) or electronic (url or pdf) format. Upon receipt of the Paylink, the Consumer actions the paylink and augments and approves the payment.
| QR Presentment | Barcode Presentment | String Presentment | Web Click Presentment | |
|---|---|---|---|---|
| URI Encoded | ✓ | - | - | ✓ |
| Number Encoded | - | - | - | - |
| Extended Number Encoded | - | - | - | - |
| Signed CBOR Encoded | - | - | - | - |
This experience targets an Online Merchant generating a single use Paylink for presentment on a website or mobile application for payment at checkout. The PeSP generates a single use Paylink with specific transaction metadata. The Consumer actions the Paylink by either using his camera on a QR code displayed on the PC screen or a button click. The Payer is presented with the transaction for confirmation and approves on the PrSP app.
| QR Presentment | Barcode Presentment | String Presentment | Web click Presentment | |
|---|---|---|---|---|
| URI Encoded | ✓ | - | - | ✓ |
| Number Encoded | - | - | ✓ | - |
| Extended Number Encoded | - | - | - | - |
| Signed CBOR Encoded | - | - | - | - |
This experience targets a person-to-person payment scenario where the Payer (Consumer) and the Payee (Consumer) use their respective mobile applications to facilitate a payment transaction via a Paylink. The process involves generating, scanning, and processing a Paylink to complete the payment.
| QR Presentment | Barcode Presentment | String Presentment | Web click Presentment | |
|---|---|---|---|---|
| URI Encoded | ✓ | - | - | ✓ |
| Number Encoded | - | - | ✓ (variant 1) | ✓ |
| Extended Number Encoded | - | - | - | - |
| Signed CBOR Encoded | - | - | - | - |
The QR+ standard targets the enablement of the following Payer Presentment experiences. This is not intended to be an exhaustive list of all use cases that can be realized, but rather serves as framework to understand and regulate the capabilities it presents.
This experience targets a Consumer (Payer) presenting a Paylink during checkout at a cash register. The Consumer presents the Paylink on their personal mobile device which has a live connection with their PrSP (is connected). The Paylink is actioned by the POS attendant during item scanning. After the Paylink is actioned, the Consumer is prompted on their mobile device to approve the payment. After approval is given, both the Merchant (cashier) and the Consumer are notified of the session outcome.
| QR Presentment | Barcode Presentment | String Presentment | Web click Presentment | |
|---|---|---|---|---|
| URI Encoded | - | - | - | - |
| Number Encoded | - | - | - | - |
| Extended Number Encoded | - | ✓ | - | - |
| Signed CBOR Encoded | - | - | - | - |
This experience targets a Consumer (Payer) presenting a Paylink during checkout at a cash register. The Consumer presents the Paylink on their personal mobile device which does NOT have a live connection with their PrSP at that time. The Consumer presents the Paylink as payment approval after till point total calculation and payment selection. The Paylink is actioned by the POS attendant at payment authorization only (not as check-in). The Consumer is NOT prompted on their mobile device, for transaction approval after the Paylink is actioned. The Merchant submits the Paylink and transaction details to the PeSP for processing. Both Consumer and Merchant is notified of flow outcome although the Consumer might only receive the notice once their connection has be reestablished.
| QR Presentment | Barcode Presentment | String Presentment | Web click Presentment | |
|---|---|---|---|---|
| URI Encoded | - | - | - | - |
| Number Encoded | - | - | - | - |
| Extended Number Encoded | - | - | - | - |
| Signed CBOR Encoded | ✓ | - | - | - |
| Term | Description |
|---|---|
| Acceptance Option | A payload specifying a payment rail supported by a Payee for payment. (Option Payload) |
| Anchor Domain | The common domain used for all Paylink web URIs, allowing deep linking through officially registered mobile applications. |
| Authorization Authority | An entity, managed on the QR+ Registry, which represents a Service Provider IdP that issues bearer tokens to authenticate API calls. A Service Provider manages Authorization Authorities according to their governance and security policies. |
| Extended Number Encoded Paylink | A 27-character alphanumeric Paylink format (ZA-FTI-SPII-PLV) optimized for Code128 barcode scanning with extended PLV namespace for medium lifespan experiences. |
| Facilitated Experience | The experience where the Scanner uses a Paylink Facilitator Application to start a QR+ Flow. |
| Flow | A Flow is the set of actions executed between a PrSP and PeSP as part of one QR+ session. |
| Flow Record | An audit trail record, created by both PrSP and PeSP, capturing all Service Provider Interactions exchanged as part of a unique Flow. |
| Flow Session | A time-bound session that tracks the lifecycle of a Flow with states OPEN, TERMINATED, or EXPIRED. A PrSP only process PeSP Requests while a Flow Session is OPEN. |
| Flow Tracker | A structured object within Service Provider Interactions containing Flow identifiers and Message Sequence Numbers to coordinate and track messages within a Flow. |
| Flow Type | A classification of QR+ Flows which govern use case requirements, Paylink lifespan constraints, supported encodings, and security requirements (e.g., pep-general, pep-shortcode, prp-connected, prp-disconnected). Service Providers are licensed for individual Flow Types. |
| Flow Type Indicator | An encoding-specific identifier that indicates which Flow Type is being used (e.g., 'general' representing the pep-general Flow Type in URI encoded Paylinks and '1' representing the prp-shortcode Flow TYpe in number encoded Paylinks). |
| Identity Request | A QR+ Request for Payer identity information initiated by the PeSP on behalf of the Payee. |
| Loyalty Request | A QR+ Request for Payer loyalty membership information initiated by the PeSP on behalf of the Payee. |
| Message Sequence Number | An incrementing counter maintained by each Service Provider to track the ordering and uniqueness of messages sent within a Flow. Used for audit, idempotency and replay detection. |
| Number Encoded Paylink | A 13-digit numeric Paylink format (FTI-SPII-PLV-Luhn) optimized for human reproduction via voice or manual keypad entry with built-in error detection. |
| Payee (actor) | A party who interacts with a Paylink with the intention of receiving payment. The Payee can be either a Scanner or a Presenter depending on the use case. |
| Payee Service Provider (PeSP) | A registered organization that executes QR+ enrichment flows on behalf of a Payee. The PeSP may deploy Paylink Provider and/or Paylink Facilitator functionality depending on its supported experiences. |
| Payer (actor) | A party who interacts with a Paylink with intention to pay. The Payer can be either a Scanner or a Presenter depending on the use case. |
| Payer Service Provider (PrSP) | A registered organization that executes QR+ enrichment flows on behalf of a Payer. The PrSP may deploy Paylink Provider and/or Paylink Facilitator functionality depending on its supported experiences. |
| Paylink | A structured identifier, encoded and presented in various formats, used by Payers and Payees to initiate a financial interaction. |
| Paylink actioning | The Scanner scanning the Paylink and submitting it to its Service Provider for processing. |
| Paylink Encoding Format | A Paylink Encoding Format is a specific way the Paylink attributes are encoded. For example, URI encoded format. |
| Paylink Facilitator (role) | A PrSP or PeSP organization registered to process Paylinks for Scanners. |
| Paylink generation | An exchange between the Presenter (Payee or Payer) and the Service Provider (PeSP or PrSP) to generate a new Paylink. |
| Paylink presentment | The Presenter presenting the Paylink to the Scanner for scanning. |
| Paylink Presentment Format | A Paylink presentment format specifies the technology used to present the Paylink for scanning. For example, QR code, Barcode and web click. |
| Paylink Provider (role) | A PrSP or PeSP registered to create Paylinks for Presenters. |
| Paylink Quarantine Period | The period, after a Paylink has been cancelled, during which the PLV must not be used for a new Paylink. |
| Paylink resolution | The Paylink Facilitator presenting the Paylink to the Paylink Provider to initiate a QR+ flow. |
| Paylink Value (PLV) | The cryptographically secure random identifier component within a Paylink that uniquely identifies a specific Paylink instance. |
| Payment Confirmation | A rail-specific payload passed by the PrSP to the PeSP confirming successful initiation of a Push Payment, without claiming settlement status. |
| Payment Conclusion | A rail-specific payload passed by the PeSP to the PrSP to provide its view on the outcome of a Payment Request. |
| Payment Delegation | A rail-specific payload passed by the PrSP to the PeSP containing Pull Payment credentials and transaction details, delegating payment initiation to the PeSP. |
| Payment Request | A QR+ Request for payment initiated by the PeSP on behalf of the Payee. |
| Presenter (role) | A Payer or Payee who presents a Paylink to a Scanner party to action. The Presenter interacts with her Service Provider to create the Paylink according to her requirements. |
| Pull Payment | A payment mechanism that is initiated by a PeSP. |
| Push Payment | A payment mechanism that is initiated by a PrSP. |
| QR+ Flow Orchestration | The process of coordinating actions between the PrSP, PeSP, Payer and Payee to achieve a successful transaction outcome. |
| QR+ Registry Service | A service operated by SARB NPU to enable service discovery of registered Service Providers and Services. |
| QR+ Service Provider | An organization registered to take part in QR+ flows on behalf of Payers and/or Payees. |
| Scanner (role) | A party who actions a Paylink by submitting it to their chosen Paylink Facilitator. |
| Service Provider Indicator | An encoding-specific identifier, assigned by SARB to a registered Service Provider, which allows all Service Providers to identify them as the creator of a Paylink. |
| Service Provider Interaction | A request and response exchange between a PrSP and a PeSP during a Flow, captured for audit trail, Flow analysis, and idempotency purposes. |
| Signed CBOR Encoded Paylink | A cryptographically signed Concise Binary Object Representation (CBOR) Paylink format using ECDSA signatures for high-security use cases requiring cryptographic attestation. |
| URI Encoded Paylink | A non-URL, RFC3986-compliant URI format for Paylinks (qr-plus://<anchor domain>/v1/<flowTypeIndicator>/<spIndicator>/<plv>) supporting deep linking and extended lifespans. |