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
returnUrlmust be specified for all transactions. - The billing address
countryCodeis required and must beGBR. - The payment is placed in a
PENDINGstate after processing and moved toSUCCESSonce 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
POST /acceptor/rest/transactions/{instId}/payment{
"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 -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"
}
}
}'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"
}- 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
POST /acceptor/rest/transactions/{instId}/{transactionId}/resume{}curl -X POST "{targetEnvironmentPath}/acceptor/rest/transactions/{instId}/{transactionId}/resume" \
-u "{apiUser}:{apiPassword}" \
-H "Content-Type: application/json" \
-d '{}'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"
}- 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
U200with the transaction stillPENDING, as in the second response, and waiting is all you can do — once the transfer completes, a further resume is rejected withV107 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
GET /acceptor/rest/transactions/{instId}/{transactionId}curl -X GET "{targetEnvironmentPath}/acceptor/rest/transactions/{instId}/{transactionId}" \
-u "{apiUser}:{apiPassword}"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"
}
]
}- 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), thenS100— 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.