JSR — Journey without redirection
Lina's initiation APIs for JSR (Journey without redirection / redirectless) are designed to shorten integration time so you can offer a modern payment experience on Open Finance — including Instant Pix and Scheduled Pix after the payer completes a one-time enrollment at their bank.
Automatic Pix (automatic payments) will follow different routes; that flow will be documented separately.
Part 1 — Enrollment (link the device once)
Before any redirectless payment, the end user must complete an enrollment:
your app opens a bank redirect once, the user confirms the link at the
account holder, then your relying-party page receives OAuth-style
parameters in the URL fragment (#), not the query string.
- Obtain an access token (same OAuth pattern as the rest of Lina Pay).
- Call
GET /api/v1/open-integration/participants/registered(orGET /api/v1/sub-tenants/{subTenantId}/participants/most-usedfor a prioritized list) so the user can pick an institution. - Call
POST /api/v1/jsr/enrollmentswithorganisationId,authorisationServerId, nestedenrollmentdata,riskSignals, andredirectUri. The API returnsid(treat this as the enrollment identifier for later paths) andredirectUrlwhere the user completes consent at the bank. - After the bank finishes, the browser lands on your
redirectUrlwith a fragment such as#code=...&id_token=...&state=.... Parse the fragment and sendcode,state, andid_tokenascode,state, andidTokentoPOST /api/v1/jsr/enrollments/device/options(plustenantIdandplatform). - Use the returned FIDO2 registration options with
navigator.credentials.create()on the user's device. - POST the WebAuthn credential payload to
POST /api/v1/jsr/enrollments/<id>/device(see Register enrollment device). WhenstatusisAUTHORISED, enrollment is complete and you can offer redirectless payments for that link.
Part 2 — Redirectless payment (after enrollment)
Precondition: an enrollment exists with status AUTHORISED.
- The user selects which enrollment to pay with (
enrollmentId). Optionally callPOST /api/v1/pix/detailsfirst to resolve and display a Pix key or QR Code before building the payment payload. - Call
POST /api/v1/jsr/consentswithenrollmentIdand thepaymentpayload — the institution and FIDO relying-party context are already resolved from the enrollment, so they aren't sent again here. The response is 201 withid(the payment request id),consentId, and FIDO2 assertion options (fidoSignOptions). - Trigger
navigator.credentials.get()with those options (biometrics, PIN, security key, etc.) and collect the assertion. - Call
POST /api/v1/jsr/paymentswithenrollmentId,paymentRequestId(theidfrom step 2),riskSignals, andfidoAssertion(the WebAuthn assertion from step 3). Lina authorises and settles with the ASPSP. - In synchronous mode this call retries internally (up to 10 checks) before
responding, but the payment may still come back without a final status —
confirm with
GET /api/v1/payments/requests/{paymentRequestId}, or wait for the webhook. See Authorise payment for the full explanation of the synchronous window, webhook, and polling fallbacks. - Render success or failure from the payment request payload (
statussuch asPAGOor terminal error states).
After the payment: webhook, polling, and the settlement window
The synchronous POST /api/v1/jsr/payments call above tries to return a
final status directly, but it isn't guaranteed — see
How payment status settles
on the Authorise payment reference page for the full breakdown of the
synchronous retry window, the webhook, Lina's internal polling, and the
optional client-side polling endpoint
(Get payment from holder).
Payment status values
The status enums below come back on the POST /api/v1/jsr/payments response
and on GET /api/v1/payments/requests/{paymentRequestId}. The request-level
status describes the overall consent state, while the payment-level status
describes each payment inside the request.
Payment request status
| Status | Meaning |
|---|---|
PENDENTE | The consent has been created but the user has not authorized it yet. |
EM_PROCESSAMENTO | The consent is being processed by the account holder. |
CONSUMIDO | The consent was authorized and the payment(s) were submitted. This is the terminal happy-path status. |
EXPIRADO | The consent expired before the user authorized it. |
CANCELADO | The consent was cancelled before completion. |
ERRO_NA_DETENTORA | The account holder returned an error while processing the consent. |
ERRO | Generic error state during consent processing. |
Payment status
| Status | Meaning |
|---|---|
PENDENTE | The payment is scheduled but not settled yet (common for future-dated payments). |
EM_PROCESSAMENTO | The payment is being settled by the account holder. |
PAGO | The payment was settled successfully. This is the terminal happy-path status. |
REJEITADO | The account holder rejected the payment. |
EXPIRADO | The payment expired before settlement. |
CANCELADO | The payment was cancelled. |
ERRO_NA_DETENTORA | The account holder returned an error during settlement. |
ERRO | Generic error state during payment processing. |
PROGRAMADO | The payment is scheduled for a future settlement date. |
AGUARDANDO_VALOR | Waiting on the value to be resolved (for example, from a QR Code) before settlement can proceed. |
PRONTO_PARA_ENVIO | The payment is queued and ready to be sent to the account holder. |
EXCLUIDO | The payment was deleted before it was sent. |
Automatic payments
Automatic Pix uses additional routes and a different sequence diagram. That documentation will be added in a future iteration.