WIP External Response Codes

Wallet initiated payment response codes and external response codes.

Wallet Response Codes — ECR Integration Guide

What to read, and what to expect, in the merchant callback and the get wallet status response.

Where to read the transaction status/result

In both scenarios (Merchant callback AND Wallet status) , read the root responseCode — this is the outcome of the wallet transaction.

  • root responseCode — the transaction result (see codes below).
  • externalResponseCode — the underlying provider code (from Wallet Response codes).

Common responseCode values:

responseCodeMeaning
0Successful
1001Authorization declined
1003Capture failed
1005Authorization pending — not final yet, check again later
1006Declined
1012Insufficient funds
1016Invalid amount
2001Cancelled by consumer
2003Cancelled by merchant
10006No payment instruments found
40007Forbidden – inconsistent data
50000Internal error
📘

1005 (pending) — the transaction is still in progress; poll status or wait for the callback.


See complete list here: PSP Response codes​.


transactionDetails[] — per‑payment breakdown

Both Merchant callback and Wallet status include transactionDetails[], with one entry per payment leg. A single payment has one entry; a hybrid payment (paid with more than one instrument) has one entry per instrument.

  • Use it to see which instruments were used and information about each payment instrument.
  • The responseCode / externalResponseCode inside each entry are raw provider codes (from Wallet Response codes ) and are not the same values as the root responseCode. Do not interpret them with the table above — treat them as informational only. The transaction result is always the root responseCode.

The get status response has two separate places that look like reflecting the transaction status. Read the correct one:

FieldTells youUse it to…
responseInfo.responseCodeWhether the status request itself worked (0 = ok, 50000 = lookup failed)Decide whether the response is usable
root responseCodeThe transaction status/resultDecide the payment outcome
📘

responseInfo.responseCode = 0 only means "we successfully looked up the status". It does not mean the payment succeeded.


{
  "responseInfo": { "responseCode": "0" },   // lookup succeeded
  "responseCode": "2001",      // ← the transaction result (cancelled by consumer)
  "externalResponseCode": "68606",
  "pspReference": "...",
  "merchantReference": "...",
  "transactionDetails": [ ... ]      // informational per-sub-transaction breakdown
...

Sent from the PSP to the ECR when the transaction is complete (amount(s) authorized or rejected/failed).

  • The transaction status/result is the root responseCode (see table above).
  • There is no responseInfo — the callback describes the transaction only, so read the root responseCode directly.
{
  "responseCode": "2001",    // ← the transaction result (cancelled by consumer)
  "externalResponseCode": "68606",
  "pspReference": "...",
  "merchantReference": "...",
  "transactionDetails": [ ... ]      // informational per-sub-transaction breakdown
...

In short

  1. Transaction status/result = root responseCode. Always, in both responses.
  2. The merchant callback has no responseInfo; get status does — and there responseInfo only tells you if the request was served, not the payment outcome.
  3. transactionDetails[] are a per‑sub-transaction breakdown (one entry for single‑instrument, more for hybrid); its codes are not PSP codes.
  4. 1005 means pending — not final.

Did this page help you?