In this guide, we'll show you how to set up the request, receive the response, and handle the transaction status to give you access to Bank Payment.
At a high level, the majority of APMs work like this:
The diagram below illustrates the interaction between the customer, our API, and the merchant to use an alternative payment method.

Typical API Integration for Bank Payment
Prior to the initiate payment call, the merchant will need to get a list of banks that are available based on the country so that the country and currency details can be sent in the initiation request.
curl --location 'https://apis.sandbox.globalpay.com/ucp/transactions/banks?payment_method=bank_payment&country=PL¤cy=PLN&account_id=TRA_24bfc3d8513142c8be754003c7c17059' \
--header 'Accept: application/json' \
--header 'Accept-Encoding: gzip' \
--header 'X-GP-Version: 2021-03-22' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer R9xIGfQecxuEjek20eKZM1SM6xJm'{
"total_record_count": 18,
"current_page_size": 18,
"merchant_id": "MER_28c5fce9ebe0495bb1a5125be4fc8f7a",
"merchant_name": "UCP_Test_Automation_Merchant",
"account_id": "TRA_24bfc3d8513142c8be754003c7c17059",
"account_name": "GPECOM_PAYU_APM_Transaction_Processing",
"filter": {
"payment_method": "BANK_PAYMENT",
"account_id": "TRA_24bfc3d8513142c8be754003c7c17059",
"country": "PL",
"currency": "PLN"
},
"paging": {
"page_size": 18,
"page": 1,
"order": "ASC",
"order_by": "BANK_NAME"
},
"payment_method": {
"bank_transfer": {
"banks": [
{
"code": "pkobankpolskisa",
"name": "PKO BP",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Apkobankpolskisa.svg"
},
{
"code": "santander",
"name": "Santander",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Asantander.svg"
},
{
"code": "ing",
"name": "ING Bank Śląski",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Aing.svg"
},
{
"code": "bankpekaosa",
"name": "PEKAO SA",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Abankpekaosa.svg"
},
{
"code": "mbank",
"name": "mBank",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Ambank.svg"
},
{
"code": "alior",
"name": "Alior Bank",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Aalior.svg"
},
{
"code": "bnpparibas",
"name": "BNP Paribas",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Abnpparibas.svg"
},
{
"code": "millenium",
"name": "Millenium",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Amillenium.svg"
},
{
"code": "creditagricole",
"name": "Credit Agricole",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Acreditagricole.svg"
},
{
"code": "citi",
"name": "Citi Handlowy",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Aciti.svg"
},
{
"code": "inteligo",
"name": "Inteligo",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Ainteligo.svg"
},
{
"code": "bankispoldzielcze",
"name": "Banki Spółdzielcze",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Abankispoldzielcze.svg"
},
{
"code": "bosbank",
"name": "BOŚ Bank",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Abosbank.svg"
},
{
"code": "nestbank",
"name": "Nest Bank",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Anestbank.svg"
},
{
"code": "velobank",
"name": "VeloBank",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Avelobank.svg"
},
{
"code": "banknowysa",
"name": "Bank Nowy S.A.",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Abanknowysa.svg"
},
{
"code": "plusbank",
"name": "PLUS BANK",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Aplusbank.svg"
},
{
"code": "bankpocztowy",
"name": "Bank Pocztowy",
"logo_url": "https://developer.globalpay.com/gh-assets/apms%3Agpe-ob%3Apl%3Abankpocztowy.svg"
}
]
}
},
"action": {
"id": "ACT_bzBRveROe5iyQcC6ySV0540hZ3BJns",
"type": "BANK_LIST",
"time_created": "2025-05-22T14:22:19.689Z",
"result_code": "SUCCESS",
"app_id": "p2GgW0PntEUiUh4qXhJHPoDqj3G5GFGI",
"app_name": "UCP_Test_Automation_App"
}
}The first request is a Transaction Create. This is used to advise the payment method of the details of a new transaction and to retrieve the necessary information required to facilitate authentication.
In this example, we set up a Bank Payment transaction.
curl --location 'https://apis.sandbox.globalpay.com/ucp/transactions' \
--header 'Accept: application/json' \
--header 'Accept-Encoding: gzip' \
--header 'X-GP-Version: 2021-03-22' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 9SQAVQhUF75Q2i4eA9EUaQTgSExE' \
--data '{
"merchant_id": "",
"account_id": "TRA_24bfc3d8513142c8be754003c7c17059",
"channel": "CNP",
"capture_mode": "AUTO",
"type": "SALE",
"amount": "1000",
"currency": "PLN",
"country": "PL",
"reference": "59016331",
"payment_method": {
"name": "Jane",
"entry_mode": "ECOM",
"apm": {
"provider": "bank_payment"
},
"bank_transfer": {
"bank": {
"name": "mbank"
}
}
},
"payer": {
"country": "PL",
"email": ""
},
"notifications": {
"return_url": "https://webhook.site/d76a62ef-4bd1-4a96-b8e2-ef0ea00fd2d4",
"status_url": "https://webhook.site/d76a62ef-4bd1-4a96-b8e2-ef0ea00fd2d4",
"cancel_url": "https://webhook.site/d76a62ef-4bd1-4a96-b8e2-ef0ea00fd2d4"
}
}{
"id": "TRN_DN2r7jVy0PGO0qsrcsc95EnLt3l3Dj_59016331",
"time_created": "2025-04-22T15:42:23.145Z",
"type": "SALE",
"status": "INITIATED",
"channel": "CNP",
"capture_mode": "AUTO",
"amount": "1000",
"currency": "PLN",
"country": "PL",
"merchant_id": "MER_28c5fce9ebe0495bb1a5125be4fc8f7a",
"merchant_name": "UCP_Test_Automation_Merchant",
"account_id": "TRA_24bfc3d8513142c8be754003c7c17059",
"account_name": "GPECOM_PAYU_APM_Transaction_Processing",
"reference": "59016331",
"payment_method": {
"result": "01",
"message": "PENDING",
"entry_mode": "ECOM",
"provider_narrative": "",
"apm": {
"redirect_url": "https://test.apm.gpwebpay.com/payment-flow?pd=eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0..pLOUSEsCkXuu_ffy.WhzTv-wxmnjQKpcMm12IoWUNeSNcbmuu-xTGvlUKbaTtZg8-tGsAccTdJPpbC4MuHVrVJY61cPnXsgnhDKZ18gm6A-Dv34ULCI7kONcWFigVH9KPrWH8wD-3FpsyXPdhnnsEqRdXI0wJrBtfEVlMIb6EHsRVBndGMBsCBUDOXo4izYzeqKWaMRyUothTWvllRWwckE0E-bvc2bc5opZcR5w-wy_p37565rbwKWSzKT05KpZxHXBV2Duwik3NuNdzogAS7vnfGz6KeSMwlGTzdAEE6bPhCehCMGiUcsc1Eph7W04sDWuH59g2ul1GI4NakmjL9ZCI8ilKr2aXaLsciBggqX6fabIIUIkrYYbSKB5j70tZdHiv3EFMOtWAOeE_V90HoljpjV8pRS7HaRalqGbWFkkhSAKJj3GrAgbw20yxmgTXTyrqZFLH869nVD69Mogp_r082S1YpCUmUN7pJf5QlFiAKRPFFQq6uJ3XDDrb1jdj2efqHNb42Y85yhP02S8YxwHOkkTnisdTQKC6UXwOl-4GM48c8QWgaH3ZHMy2n8-8rOqH67dvQd7RjuABbh2E4Xxtp-IHRCICQoB4Qgkiqm9RcaTBR1nDhcKo-uN8TgthpuAEn3pY9TOhyeaAfX7Ln0ROx2GiIrMb5_O_YY9FKc--7FcfgIKsVGRAnKbKA26RwE85ZGqDxXTfxx10UpIueK0RL9gXYGHo22FLd5KkeMGyWDho2ZsYPkXYC76klZrgiVkdtfPc3oTC-eqfQ4OotdTcv49k1nDHKpq15x2rsY_ulEimIYS0b2SBs7LKgyipQzb3TYsdPVfpStZGtMVLmNuXh3QdEBSv-pVHPOALlDlgyA.nS2wOVSVxDTNLDDf1bK3Zw&lng=pl",
"provider": "bank_payment",
"provider_payer_name": "Jane",
"wait_notification": "",
"fund_status": "",
"optional_redirect": "",
"bank": {
"account_number": "",
"iban": "",
"identifier_code": "",
"name": "",
"code": ""
},
"mandate": {
"reference": ""
}
}
},
"platforms": [
{
"type": "ECOM",
"transaction_id": "",
"order_id": "TRN_DN2r7jVy0PGO0qsrcsc95EnLt3l3Dj_59016331",
"authcode": "",
"pasref": "17453365403079031"
}
],
"payer": {
"country": "PL",
"email": ""
},
"batch_id": "",
"action": {
"id": "ACT_DN2r7jVy0PGO0qsrcsc95EnLt3l3Dj",
"type": "INITIATE",
"time_created": "2025-04-22T15:42:23.145Z",
"result_code": "SUCCESS",
"app_id": "p2GgW0PntEUiUh4qXhJHPoDqj3G5GFGI",
"app_name": "UCP_Test_Automation_App"
}
}Following a successful initiation of the transaction, the next step is to redirect the customer to their bank to facilitate authentication and authorization. This can be achieved in a couple of ways. For example, you could use a simple JavaScript redirect as shown below, or an HTTP GET (302 redirect).
<\!DOCTYPE html\>
<html\>
<head\>
<title\>Sample APM Redirect\</title\>
<meta charset="UTF-8"\>
</head\>
<body\>
<script\>
window.location \= "https://www.paymentMethodUrl.com/pay";
</script\>
</body\>
</html\>Once the customer completes their transaction with the payment method, they are redirected to the Return URL of the initial request. The current status of the transaction will also be returned.
Your application might put the customer on hold for a few seconds while it checks to see if the Status URL was sent a final update. You can then redirect the customer to a final success or failure page.
The URL specified in the Status URL element in the initial request will receive the final status.
Depending on the payment method used, this can happen at the same time as the customer is redirected to your Return URL or within moments. It's also possible that the final status update might come days later.
When you receive the final status update, you may want to send the customer a status notification to indicate that the payment was finally accepted. At this point, you can begin the process of shipping the purchased items to the customer.
{
"id":"TRN_JOGrqvzOvbLy4V2n7cHsusYy8aainM",
"time_created":"2024-01-15T13:17:21.914Z",
"type":"SALE",
"status":"CAPTURED",
"channel":"CNP",
"capture_mode":"AUTO",
"amount":"1999",
"currency":"PLN",
"country":"PL",
"merchant_id":"MER_c4c0df11039c48a9b63701adeaa296c3",
"merchant_name":"Sandbox_merchant_2",
"account_id":"TRA_6716058969854a48b33347043ff8225f",
"account_name":"Transaction_Processing",
"reference":"APM-20200417",
"payment_method":{
"result":"00",
"message":"SUCCEEDED",
"entry_mode":"ECOM",
"apm":{
"provider":"bank_payment",
"wait_notification":"",
"fund_status":"NOT_EXPECTED",
"payment_description":"3K1TRAA",
"confirmed_accountholder":"Former Glory",
"account_number":"93722",
"iban":"DE25700251750322205970",
"bank_identifier_code":"HYVEDEMM643",
"bank_name":"HypoVereinsbank Penzberg",
"bank_address":"",
"optional_redirect":""
}
},
"batch_id":"",
"action":{
"id":"ACT_mkP7xm9u47kLgTwTKhYfQXRvfynwjP",
"type":"STATUS_NOTIFICATION",
"time_created":"2020-04-20T14:36:58.193Z",
"result_code":"SUCCESS",
"app_id":"jrYHwMdYRBDGmFwwAVmi5WufYzxuQIQj",
"app_name":"sample_app"
}