Tap on Pix (NFC)
Tap on Pix lets the initiating institution start a Pix payment after reading a proximity (NFC) payload from the payer’s device or tag. The institution forwards that payload as-is into JSR (redirectless): either complete enrollment once or reuse an AUTHORISED enrollment and run Part 2 — Redirectless payment.
Tap to Pix URI (BCB pattern)
The NFC payload uses a URI shaped like:
pix://<hostname>?qr=<uri-encoded-emv-qr-string>&sig=<signature>This is informational context — you don't need to take the URI apart yourself, but it helps to know what's inside it:
| Part | Meaning |
|---|---|
<hostname> | Domain identification for the party that published the QR Code. |
<uri-encoded-emv-qr-string> | Pix Copia e Cola content URI-encoded. The API decodes this parameter internally when you forward the full URL — no client-side decodeURIComponent() needed. |
<signature> | Optional, reserved for future use: signature of the decoded Copia e Cola using PS256, consistent with Open Finance practice. How the receiver obtains the public key for validation is not fixed in this documentation — follow institutional or regulator guidance when available. |
Normative reference (Android proximity specification): BCB — Especificações Pix aproximação (PDF).
Processing on the institution side
- Read the NFC record and obtain the
pix://…URI (and validate transport/security policies your product requires). - Forward that URI as-is as
payment.qrCodeon Create payment consent — no need to parseqr/sigor decode anything yourself; the API identifies the Tap to Pix shape and parses it internally. - If you adopt signature verification later, that's a check on your side against
sigbefore forwarding — until PS256 and public-key distribution are defined for your integration, treat it as optional metadata.
JSR journey after NFC
No AUTHORISED enrollment yet
Run Part 1 — Enrollment from JSR (Redirectless): registered participants, create enrollment, bank redirect, fragment handling, FIDO2 registration, register device — until Get enrollment shows AUTHORISED.
Enrollment already AUTHORISED
Follow Part 2 — Redirectless payment in JSR (Redirectless):
- Call
POST /api/v1/jsr/consents(Create payment consent) withenrollmentIdandpayment.qrCodeset to the fullpix://…URL exactly as received from the NFC read — sending only the decoded Copia e Cola also works, but it isn't required; the API parses the raw URL internally. There is noisNFCflag to send — the API resolves the flow purely frompayment.qrCodebeing present. - Complete
navigator.credentials.get()using the returnedfidoSignOptionsand collect the assertion. - Call
POST /api/v1/jsr/payments(Authorise payment) withenrollmentId, thepaymentRequestId(id) from step 1,riskSignals, and thefidoAssertionfrom step 2.
Prerequisites
- OAuth access token and sub-tenant setup — Get your credentials, Onboarding.
- Full JSR reference — JSR (Redirectless).
Next steps
- Create payment consent — include the raw NFC URL as
qrCodefor Tap on Pix. - Authorise payment — complete the payment with
enrollmentIdandpaymentRequestId.