Pay by Bank

Your Payment Page

Use Your Payment Page to build your own Pay by Bank payment flow.

The integration mode for Pay by Bank is Redirect. There is a full-page redirect in the browser to a page where the user selects their bank.

Before you start

When using Redirect mode:

  • A returnUrl must be specified for all transactions.
  • The billing address countryCode is required and must be GBR.
  • The payment is placed in a PENDING state after processing and moved to SUCCESS once the transfer is confirmed.
  • The UK Faster Payments scheme allows up to two hours for the transfer to complete.
  • Pay by Bank transactions cannot be deferred and the payment method cannot be saved for reuse.
  • Refunds are supported, including multiple partial refunds up to the original payment amount.

Create a payment

Creating a Pay by Bank payment
EndpointDefinition
POST /acceptor/rest/transactions/{instId}/payment
Request body
{
  "transaction" : {
    "currency" : "GBP",
    "amount" : 10,
    "description" : "Sample Transaction",
    "merchantRef" : "obDemo",
    "commerceType" : "ECOM"
  },
  "paymentMethod" : {
    "openbanking" : {
        "mode" : "REDIRECT",
        "returnUrl" : "http://example.com/return"
    },
    "billingAddress" : {
      "line1" : "Flat 1",
      "line2" : "House",
      "line3" : "A Street",
      "city" : "London",
      "postcode" : "AA1 2BB",
      "countryCode" : "GBR"
    }
  }
}
cURL
curl -X POST "{targetEnvironmentPath}/acceptor/rest/transactions/{instId}/payment" \
  -u "{apiUser}:{apiPassword}" \
  -H "Content-Type: application/json" \
  -d '{
  "transaction" : {
    "currency" : "GBP",
    "amount" : 10,
    "description" : "Sample Transaction",
    "merchantRef" : "obDemo",
    "commerceType" : "ECOM"
  },
  "paymentMethod" : {
    "openbanking" : {
        "mode" : "REDIRECT",
        "returnUrl" : "http://example.com/return"
    },
    "billingAddress" : {
      "line1" : "Flat 1",
      "line2" : "House",
      "line3" : "A Street",
      "city" : "London",
      "postcode" : "AA1 2BB",
      "countryCode" : "GBR"
    }
  }
}'
Response
HTTP/1.1 201
{
  "processing" : {
    "model" : "MANAGE",
    "authResponse" : {
      "acquirerName" : "Tink",
      "gatewayReference" : "e947439bd10e4975a2720f552570bc54"
    },
    "decision" : {
      "decisionResult" : "PROCEED",
      "decisionSource" : "RULE",
      "requestedType" : "PAYMENT",
      "decidedType" : "PAYMENT",
      "rulesTriggered" : [ ],
      "decisionReason" : "NO_RULES_TRIGGERED"
    },
    "route" : "TINK"
  },
  "clientRedirect" : {
    "type" : "REDIRECT",
    "url" : "https://link.tink.com/1.0/pay?client_id=602537b0176d4a6ab0b734d124efe019&redirect_uri=https%3A%2F%2Fs.mite.pay360.com%3A12490%2Fa%2Fredirect%3FshortCode%3Dg3rZ6Nksg6A&market=GB&locale=en_GB&payment_request_id=8cf0cb77ae8f46518967c1f83950989a&session=450427beb71b4a8ebefc2a4595442e6bbd83540896d54d12a0cd56f626824797",
    "frame" : "TOP"
  },
  "paymentMethod" : {
    "openbanking" : {
      "remittanceReference" : "Hz6Ca85E",
      "mode" : "REDIRECT"
    },
    "billingAddress" : {
      "line1" : "Flat 1",
      "line2" : "House",
      "line3" : "A Street",
      "city" : "London",
      "postcode" : "AA1 2BB",
      "country" : "United Kingdom",
      "countryCode" : "GBR"
    },
    "paymentClass" : "OPENBANKING"
  },
  "customFields" : {
    "fieldState" : [ ]
  },
  "transaction" : {
    "transactionId" : "11476791330",
    "merchantRef" : "obDemo",
    "merchantDescription" : "Sample Transaction",
    "status" : "PENDING",
    "stage" : "AUTHORISATION",
    "type" : "PAYMENT",
    "amount" : 10,
    "consumerSpend" : 0,
    "currency" : "GBP",
    "transactionTime" : "2025-11-18T09:17:46.597Z",
    "receivedTime" : "2025-11-18T09:17:46.597Z"
  },
  "outcome" : {
    "status" : "SUCCESS",
    "reasonCode" : "U110",
    "reasonMessage" : "Suspended for completion of authorisation"
  },
  "trace" : "T0e4JqGEsiOPdo1ujcDrmDw"
}
Notes:
  • The payment is suspended rather than authorised: the outcome is U110, and the response carries a clientRedirect whose url is where the customer selects their bank and authorises the transfer. Send them there — a full-page redirect, as clientRedirect.frame says.

Resume a payment

The customer comes back to the returnUrl you sent by a plain GET carrying no parameters, so keep hold of the transaction id yourself. Send a resume request for it to pick the transaction up again.

Resuming a Pay by Bank payment
EndpointDefinition
POST /acceptor/rest/transactions/{instId}/{transactionId}/resume
Request body
{}
cURL
curl -X POST "{targetEnvironmentPath}/acceptor/rest/transactions/{instId}/{transactionId}/resume" \
  -u "{apiUser}:{apiPassword}" \
  -H "Content-Type: application/json" \
  -d '{}'
Response
HTTP/1.1 201
{
  "processing": {
    "model": "MANAGE",
    "authResponse": {
      "acquirerName": "Tink",
      "gatewayReference": "e947439bd10e4975a2720f552570bc54",
      "status": "AUTHORISED"
    },
    "route": "TINK"
  },
  "paymentMethod": {
    "openbanking" : {
      "remittanceReference" : "Hz6Ca85E",
      "account": {
        "sortCode": "967443",
        "accountNumber": "****9434",
        "bankName": "uk-demobank-open-banking-redirect"
      },
      "mode" : "REDIRECT"
    },
    "billingAddress": {
      "line1": "Flat 1",
      "line2": "House",
      "line3": "A Street",
      "city": "London",
      "postcode": "AA1 2BB",
      "country": "United Kingdom",
      "countryCode": "GBR"
    },
    "paymentClass": "OPENBANKING"
  },
  "customFields": {
    "fieldState": []
  },
  "transaction" : {
    "transactionId" : "11476791330",
    "merchantRef" : "obDemo",
    "merchantDescription" : "Sample Transaction",
    "status" : "SUCCESS",
    "stage" : "COMPLETE",
    "type" : "PAYMENT",
    "amount" : 10.00,
    "consumerSpend" : 10.00,
    "currency" : "GBP",
    "transactionTime" : "2025-11-21T09:37:09.821Z",
    "receivedTime" : "2025-11-21T09:37:09.821Z"
  },
  "outcome" : {
    "status" : "SUCCESS",
    "reasonCode" : "S100",
    "reasonMessage" : "Authorised"
  },
  "trace": "Thu6BNmrt-OpuLQgV6UVBUw"
}
HTTP/1.1 201
{
  "processing": {
    "model": "MANAGE",
    "authResponse": {
      "acquirerName": "Tink",
      "gatewayReference": "e947439bd10e4975a2720f552570bc54",
      "status": "PROCESSING"
    },
    "route": "TINK"
  },
  "paymentMethod": {
    "openbanking" : {
      "remittanceReference" : "Hz6Ca85E",
      "account": {
        "sortCode": "967443",
        "accountNumber": "****9434",
        "bankName": "uk-demobank-open-banking-redirect"
      },
      "mode" : "REDIRECT"
    },
    "billingAddress": {
      "line1": "Flat 1",
      "line2": "House",
      "line3": "A Street",
      "city": "London",
      "postcode": "AA1 2BB",
      "country": "United Kingdom",
      "countryCode": "GBR"
    },
    "paymentClass": "OPENBANKING"
  },
  "customFields": {
    "fieldState": []
  },
  "transaction" : {
    "transactionId" : "11476791330",
    "merchantRef" : "obDemo",
    "merchantDescription" : "Sample Transaction",
    "status" : "PENDING",
    "stage" : "AUTHORISATION",
    "type" : "PAYMENT",
    "amount" : 10.00,
    "consumerSpend" : 0,
    "currency" : "GBP",
    "transactionTime" : "2025-11-21T09:37:09.821Z",
    "receivedTime" : "2025-11-21T09:37:09.821Z"
  },
  "outcome" : {
    "status" : "SUCCESS",
    "reasonCode" : "U200",
    "reasonMessage" : "Waiting for downstream authoriser to complete processing"
  },
  "trace": "T7IbfoefrgmunhonIVlYk0g"
}
Notes:
  • The customer returns to the returnUrl from the payment request by a plain GET, with no parameters: nothing about the transaction comes back with them, so keep hold of the transaction id yourself.
  • The bank transfer may still be settling when they get back. The resume then answers U200 with the transaction still PENDING, as in the second response, and waiting is all you can do — once the transfer completes, a further resume is rejected with V107 Cannot resume transaction [id] with status [SUCCESS], so take the final status from a notification or by retrieving the transaction.

Get the final status

The resume does not always answer with a finished payment. The bank transfer settles after the customer returns, so a resume sent straight away is likely to report U200 with the transaction still PENDING — and once the transfer does complete, a further resume is rejected with V107 Cannot resume transaction [id] with status [SUCCESS]. Take the final status from a notification or by retrieving the transaction.

Retrieving a completed Pay by Bank payment
EndpointDefinition
GET /acceptor/rest/transactions/{instId}/{transactionId}
cURL
curl -X GET "{targetEnvironmentPath}/acceptor/rest/transactions/{instId}/{transactionId}" \
  -u "{apiUser}:{apiPassword}"
Response
HTTP/1.1 200
{
  "processing": {
    "model": "MANAGE",
    "authResponse": {
      "acquirerName": "Tink",
      "gatewayReference": "e947439bd10e4975a2720f552570bc54",
      "status": "AUTHORISED"
    },
    "route": "TINK"
  },
  "paymentMethod": {
    "openbanking": {
      "remittanceReference": "Hz6Ca85E",
      "account": {
        "sortCode": "967443",
        "accountNumber": "****9434",
        "bankName": "uk-demobank-open-banking-redirect"
      },
      "mode": "REDIRECT"
    },
    "billingAddress": {
      "line1": "Flat 1",
      "city": "London",
      "postcode": "AA1 2BB",
      "country": "United Kingdom",
      "countryCode": "GBR"
    },
    "paymentClass": "OPENBANKING"
  },
  "transaction": {
    "transactionId": "11476791330",
    "merchantRef": "obDemo",
    "merchantDescription": "Sample Transaction",
    "status": "SUCCESS",
    "stage": "COMPLETE",
    "type": "PAYMENT",
    "amount": 10.00,
    "consumerSpend": 10.00,
    "currency": "GBP",
    "transactionTime": "2025-11-21T09:37:09.821Z",
    "receivedTime": "2025-11-21T09:37:09.821Z"
  },
  "history": [
    {
      "transactionStatus": "PENDING",
      "reasonCode": "U110",
      "reasonMessage": "Suspended for completion of authorisation",
      "timeStamp": "2025-11-21T09:37:11.741Z"
    },
    {
      "transactionStatus": "PENDING",
      "reasonCode": "U200",
      "reasonMessage": "Waiting for downstream authoriser to complete processing",
      "timeStamp": "2025-11-21T09:42:09.228Z"
    },
    {
      "transactionStatus": "SUCCESS",
      "reasonCode": "S100",
      "reasonMessage": "Authorised",
      "timeStamp": "2025-11-21T09:43:08.961Z"
    }
  ],
  "followUpStatus": {},
  "link": [
    {
      "href": "https://api.mite.pay360.com/acceptor/rest/transactions/5315271/11476791330",
      "rel": "self"
    }
  ]
}
Notes:
  • Retrieval is how you get the final status of a payment the customer has authorised at their bank: the transfer settles after they come back, so the resume may still report U200.
  • history is the whole progression — suspended (U110), waiting for the transfer (U200), then S100 — and paymentMethod.openbanking.account is the account the customer paid from, which is only known once they have chosen it.

Remittance reference

When a Pay by Bank transaction appears on the customer’s bank statement, it includes an auto-generated identifier. This value is returned in the remittanceReference field in API responses.

Refund a payment

A Pay by Bank payment can be refunded once it has reached SUCCESS, in full or as multiple partial refunds up to the original amount. The request is the same one used for cards and wallets, so see Refund for it.

Best practices

Use notifications or poll for the transaction result to ensure you receive the final status. Notifications are one of the common features with Cards & Wallets; for more detail on them specifically, see Notifications.