Payer actions

Some payins need the payer to do something: finish the payment on the payment page, pass 3DS, confirm in the banking app. Such a payin is in status requires_action, and next_action says what to do.

"status": "requires_action",
"next_action": {
  "type": "redirect",
  "redirect": { "url": "https://pay-in.mrcr.io/order/0b6f4e2a-7c1d-4e8b-9a3f-5d2c8e1b4a70" },
  "expires_at": "2026-09-29T09:30:00Z"
}

The object

Field Set Meaning
type always What the payer has to do — see Types
redirect.url when type is redirect The payment page
expires_at when the provider gives a deadline When the provider stops waiting for the payer; after it the payin ends failed

next_action is null in every other status.

Types

type What you do The step ends when
redirect Send the payer to redirect.url — see Redirect The payer finishes on the page
await_confirmation Tell the payer to confirm the payment where their bank asks — in the banking app or another channel. There is nothing to open — see Await confirmation The payer confirms or rejects with the bank

New types can be added without a new version. An unknown type — stop and ask the person you work for; do not guess (R13).

By method

Method Types When
Card redirect Always. In the create response
Google Pay redirect The card asks for 3DS. By the payin.requires_action webhook
BLIK await_confirmation or redirect, set for the shop Always: the payer confirms every BLIK payment. In the create response or by the payin.requires_action webhook

The payment page

redirect.url is the Mercuryo payment page of the payin. The payer finishes the step there. When return_urls are set, the page then sends the payer to them — see the method page for when.

Where it comes from

next_action is in the create response (card, BLIK), in the payin.requires_action webhook (Google Pay, BLIK) and in GET /v2/transactions/{transaction_id}. Keep the latest you received with the order; your frontend reads it from your server.

Redirect

  • Open redirect.url as a full page or in a new browser window.
  • Coming back is not a result. Even on return_urls.success, show "processing" and wait for the final status from the webhook or GET /v2/transactions/{transaction_id} (R8).

Await confirmation

The payer confirms the payment outside your page and outside Mercuryo: in the banking app or another channel of their bank, like a second factor.

  • Show the payer a message: confirm the payment where your bank asks, for example in the banking app.
  • Keep your page open until the webhook with the final status comes.
  • A rejection ends the payin failed with canceled_by_payer.

After the step

The payin goes to a final status — completed, or failed with provider_declined or canceled_by_payer. The webhook comes for the final status.

In the sandbox

How to force each payer step outcome — Sandbox.

Next: Idempotency