Are you looking for test card numbers?

Would you like to contact support?

Payment-method icon

EPS for API only

Add EPS to an existing API-only integration.

Accept EPS payments using our APIs, and build your own payment form to have full control over the look and feel of your checkout page.

Before you begin

These instructions explain how to add EPS to your existing API-only integration. The API-only integration works the same way for all payment methods. If you haven't done this integration yet, refer to our API-only integration guide.

Before starting your EPS integration:

  1. Make sure that you have set up your back end implementation.
  2. Add EPS in your test Customer Area.

Build your payment form for EPS

To show EPS in your payment form, you need to:

  1. Show a list of available banks to your shopper.
  2. After the shopper selects a bank, pass the corresponding Issuer ID value to your server. You'll need this to make a payment.

The available banks for EPS are different in the test and live environment:

Bank name Issuer ID
Bank Austria e6819e7a-f663-414b-92ec-cf7c82d2f4e5
BAWAG P.S.K. AG ba7199cc-f057-42f2-9856-2378abf21638
Dolomitenbank d5d5b133-1c0d-4c08-b2be-3c9b116dc326
Erste Bank und Sparkassen 3fdc41fc-3d3d-4ee3-a1fe-cd79cfd58ea3
Easybank AG eff103e6-843d-48b7-a6e6-fbd88f511b11
HYPO Tirol Bank AG 6765e225-a0dc-4481-9666-e26303d4f221
Posojilnica Bank eGen 65ef4682-4944-499f-828f-5d74ad288376
Raiffeisen Bankengruppe Österreich ee9fc487-ebe0-486c-8101-17dce5141a67
Schoellerbank AG 1190c4d1-b37a-487e-9355-e0a067f54a9f
Sparda Bank Wien 8b0bfeea-fbb0-4337-b3a1-0e25c0f060fc
Volksbanken e2e97aaa-de4c-4e18-9431-d99790773433
Volkskreditbank AG 4a0a975b-0594-4b40-9068-39f77b3a91f9
Bank name Issuer ID
Austrian Anadi Bank AG 68db503b-ea48-4681-814b-10fc74064f68
Bank Austria bbd44f4d-609b-454e-8d5a-e0d1ac21f15a
bank99 AG f848c582-1b94-4e13-b58e-b3a2c68a3fba
Bankhaus Carl Spängler & Co.AG d5639c17-0207-4d49-8708-922181135ad1
BKS Bank AG 7217d822-470c-4768-b346-a440e8cb7096
BAWAG P.S.K. AG 64669764-e6fc-401c-8f3d-26e9169ba6ff
BTV VIER LÄNDER BANK a990a73b-3d6b-4d91-9b8a-856428089b34
Dolomitenbank b42dd796-8bda-4893-acc2-ddfae9c9cdb7
Erste Bank und Sparkassen 1d48e2f7-604c-4d1d-894e-170635d1a645
Easybank AG 54016d9d-31b0-4db3-9eaf-cf9fbc58ee81
HYPO-BANK BURGENLAND Aktiengesellschaft b3b1554f-c9ae-4396-a62f-baffb8a2de1c
Hypo Alpe-Adria-Bank International AG 958d1cf8-0d2d-4b21-b1f2-8383bb9f243f
HYPO NOE LB für Niederösterreich u. Wien 9c92d29b-a898-488e-836f-e93b911f9a94
HYPO Oberösterreich,Salzburg 89c79da1-1b75-41e2-9254-118f36231bbd
HYPO Tirol Bank AG 31659756-fb43-4094-afd5-82980ff48750
Hypo Vorarlberg Bank AG 880cc8c4-d723-49ab-8299-dc35eafc9385
Marchfelder Bank 242209e6-a81f-48bc-9041-a31306cb153f
Oberbank AG 744d26da-90c9-49eb-9a0b-9a7f1fa3a8d2
Österreichische Ärzte- und Apothekerbank 69a67a81-7518-463f-8527-3f1128af1f93
Posojilnica Bank eGen 65ef4682-4944-499f-828f-5d74ad288376
Raiffeisen Bankengruppe Österreich 09350598-7ba4-4afb-b706-843e49a64759
Schelhammer Capital Bank AG c522e299-479c-4134-849f-a6ef0399a6e0
Schoellerbank AG 3ed7da63-0924-424c-a822-2a0dfaaadce1
Sparda Bank Wien cc4a034e-f8a1-4ce4-a96b-1cd251af03b5
Volksbanken 479ff5d2-6f44-4921-9330-6bf6763806e9
Volkskreditbank AG 43b3af24-7969-4701-a7ce-1f9fc6eef834

We provide logos for EPS and the issuing banks, which you can use on your payment form. For more information, refer to Downloading logos.

You can also get the issuer list from the /paymentMethods response, as explained in the API-only integration guide.

In your /paymentMethods request, specify:

The list of issuing banks are included in the object with type: eps.

Make a payment

In your /payments request, specify:

  • paymentMethod.type: eps
  • paymentMethod.issuer: The EPS issuer value of the shopper's selected bank. For example, Dolomitenbank.
  • returnUrl: The URL where the shopper will be redirected back to after they complete the payment. This URL can have a maximum of 1024 characters.
curl https://checkout-test.adyen.com/v68/payments \
-H "x-API-key: YOUR_X-API-KEY" \
-H "content-type: application/json" \
-d '{
  "merchantAccount":"YOUR_MERCHANT_ACCOUNT",
  "reference":"YOUR_ORDER_NUMBER",
  "amount":{
    "currency":"EUR",
    "value":1000
  },
  "paymentMethod":{
    "type":"eps",
    "issuer":"d5d5b133-1c0d-4c08-b2be-3c9b116dc326"
  },
  "returnUrl":"https://your-company.com/checkout?shopperOrder=12xy.."
}'
# Set your X-API-KEY with the API key from the Customer Area.
adyen = Adyen::Client.new
adyen.api_key = "YOUR_X-API-KEY"
 
response = adyen.checkout.payments({
  :amount => {
    :currency => "EUR",
    :value => 1000
  },
  :reference => "YOUR_ORDER_NUMBER",
  :paymentMethod => {
    :type => "eps",
    :issuer => "d5d5b133-1c0d-4c08-b2be-3c9b116dc326"
  },
  :returnUrl => "https://your-company.com/checkout?shopperOrder=12xy..",
  :merchantAccount => "YOUR_MERCHANT_ACCOUNT"
})
// Set YOUR_X-API-KEY with the API key from the Customer Area.
// Change to Environment.LIVE and add the Live URL prefix when you're ready to accept live payments.
    Client client = new Client("YOUR_X-API-KEY", Environment.TEST);
    Checkout checkout = new Checkout(client);

    PaymentsRequest paymentsRequest = new PaymentsRequest();

    String merchantAccount = "YOUR_MERCHANT_ACCOUNT";
    paymentsRequest.setMerchantAccount(merchantAccount);

    Amount amount = new Amount();
    amount.setCurrency("EUR");
    amount.setValue(15000L);
    paymentsRequest.setAmount(amount);

    DefaultPaymentMethodDetails paymentMethodDetails = new DefaultPaymentMethodDetails();
    paymentMethodDetails.setIssuer("d5d5b133-1c0d-4c08-b2be-3c9b116dc326");
    paymentMethodDetails.setType("eps");
    paymentsRequest.setPaymentMethod(paymentMethodDetails);

    paymentsRequest.setReference("YOUR_ORDER_NUMBER");
    paymentsRequest.setReturnUrl("https://your-company.com/checkout?shopperOrder=12xy..");

    PaymentsResponse paymentsResponse = checkout.payments(paymentsRequest);
// Set your X-API-KEY with the API key from the Customer Area.
$client = new \Adyen\Client();
$client->setXApiKey("YOUR_X-API-KEY");
$service = new \Adyen\Service\Checkout($client);

$params = array(
  "amount" => array(
    "currency" => "EUR",
    "value" => 1000
  ),
  "reference" => "YOUR_ORDER_NUMBER",
  "paymentMethod" => array(
    "type" => "eps",
    "issuer" => "d5d5b133-1c0d-4c08-b2be-3c9b116dc326"
  ),
  "returnUrl" => "https://your-company.com/checkout?shopperOrder=12xy..",
  "merchantAccount" => "YOUR_MERCHANT_ACCOUNT"
);
$result = $service->payments($params);
#Set your X-API-KEY with the API key from the Customer Area.
adyen = Adyen.Adyen()
adyen.client.xapikey = 'YOUR_X-API-KEY'

result = adyen.checkout.payments({
   'amount': {
      'value': 1000,
      'currency': 'EUR'
   },
   'reference': 'YOUR_ORDER_NUMBER',
   'paymentMethod': {
      'type': 'eps',
      'issuer': 'd5d5b133-1c0d-4c08-b2be-3c9b116dc326'
   },
   'returnUrl': 'https://your-company.com/checkout?shopperOrder=12xy..',
   'merchantAccount': 'YOUR_MERCHANT_ACCOUNT'
})
// Set your X-API-KEY with the API key from the Customer Area.
var client = new Client ("YOUR_X-API-KEY", Environment.Test);
var checkout = new Checkout(client);

var amount = new Model.Checkout.Amount("EUR", 1000);
var details = new Model.Checkout.DefaultPaymentMethodDetails{
  Type = "eps",
  Issuer = "d5d5b133-1c0d-4c08-b2be-3c9b116dc326"
};
var paymentRequest = new Adyen.Model.Checkout.PaymentRequest
{
  Reference = "YOUR_ORDER_NUMBER",
  Amount = amount,
  ReturnUrl = @"https://your-company.com/checkout?shopperOrder=12xy..",
  MerchantAccount = "YOUR_MERCHANT_ACCOUNT",
  PaymentMethod = details
};

var paymentResponse = checkout.Payments(paymentsRequest);
// Set your X-API-KEY with the API key from the Customer Area.
const {Client, Config, CheckoutAPI} = require('@adyen/api-library');
const config = new Config();
// Set your X-API-KEY with the API key from the Customer Area.
config.apiKey = '[API_KEY]';
config.merchantAccount = '[YOUR_MERCHANT_ACCOUNT]';
const client = new Client({ config });
client.setEnvironment("TEST");
const checkout = new CheckoutAPI(client);
checkout.payments({
    amount: { currency: "EUR", value: 1000 },
    paymentMethod: {
        type: 'eps',
        issuer: 'd5d5b133-1c0d-4c08-b2be-3c9b116dc326'
    },
    reference: "YOUR_ORDER_NUMBER",
    merchantAccount: config.merchantAccount,
    returnUrl: "https://your-company.com/checkout?shopperOrder=12xy.."
}).then(res => res);

The /payments response contains an action object with the information needed to redirect the shopper.

/payments response
{
   "resultCode":"RedirectShopper",
   "action":{
      "paymentMethodType":"eps",
      "method":"GET",
      "url":"https://checkoutshopper-test.adyen.com/checkoutshopper/checkoutPaymentRedirect?redirectData=...",
      "type":"redirect"
   }
}

Handle the redirect

  1. To complete the payment, redirect the shopper to the action.url returned in the /payments response.
    When using the HTTP GET method:
    For security reasons, when displaying the redirect in the app, we recommend that you use SFSafariViewController for iOS or Chrome Custom Tabs for Android, instead of WebView objects. Also refer to the security best practices for WebView.
  2. After the shopper is redirected back to your website, check the payment result by making a POST /payments/details request, specifying:
    • details: Object that contains the URL-decoded redirectResult returned when the shopper was redirected back to your site.
    /payments/details request
    curl https://checkout-test.adyen.com/v67/payments/details \
    -H "x-API-key: YOUR_X-API-KEY" \
    -H "content-type: application/json" \
    -d '{
       "details": {
         "redirectResult": "eyJ0cmFuc1N0YXR1cyI6IlkifQ=="
     }
    }'

You receive a response containing:

  • resultCode: Use this to present the result to your shopper.
  • pspReference: Our unique identifier for the transaction.
    /payments/details response
    {
     "resultCode": "Authorised",
     "pspReference": "88154795347618C"
    }

Present the payment result

Use the resultCode that you received in the /payments/details response to present the payment result to your shopper.
The resultCode values you can receive for EPS are:

resultCode Description Action to take
Authorised The payment was successful. Inform the shopper that the payment has been successful.
You will receive the funds in 2 days.
Cancelled The shopper cancelled the payment while on their bank's website. Ask the shopper whether they want to continue with the order, or ask them to select a different payment method.
Error There was an error when the payment was being processed. Inform the shopper that there was an error processing their payment. The response contains a refusalReason, indicating the cause of the error.
Pending or
Received
The shopper has completed the payment but the final result is not yet known. It may take minutes or hours for the EPS payments network to confirm this. Inform the shopper that you've received their order, and are waiting for the payment to be completed.
You will receive the final result of the payment in an AUTHORISATION notification.
Refused The payment was refused by the shopper's bank. Ask the shopper to try the payment again using a different payment method.

If the shopper closed the browser and failed to return to your website, wait for notification webhooks to know the outcome of the payment:

eventCode success field Description Action to take
AUTHORISATION false The transaction failed. Cancel the order and inform the shopper that the payment failed.
AUTHORISATION true The shopper successfully completed the payment. Inform the shopper that the payment has been successful and proceed with the order.

Recurring payments

We support recurring transactions for EPS through SEPA Direct Debit. To make recurring payments, you need to:

  1. Create a shopper token.
  2. Use the token to make future payments for the shopper.

Create a token

We strongly recommend that you request explicit permission from the shopper if you intend to make recurring SEPA payments. Being transparent about the payment schedule and the charged amount reduces the risk of chargebacks.

To create a token, include in your /payments request:

  • storePaymentMethod: true
  • shopperReference: Your unique identifier for the shopper (minimum length three characters).

When the payment has been settled, you receive a notification webhook containing:

  • eventCode: RECURRING_CONTRACT
  • originalReference: The pspReference of the initial payment.
  • pspReference: This is the token that you need to make recurring payments for this shopper.
Make sure that your server is able to receive RECURRING_CONTRACT as part of your standard notifications. If you have not requested this additional configuration yet, contact our Support Team.

Make a payment with a token

To make a payment with the token, include in your /payments request:

  • paymentMethod.storedPaymentMethodId: The pspReference from the RECURRING_CONTRACT notification.
You can also get this value by using the /listRecurringDetails endpoint.
  • shopperReference: The unique shopper identifier that you specified when creating the token (minimum length three characters).
  • shopperInteractionContAuth.
  • recurringProcessingModel: Subscription or UnscheduledCardOnFile.

For more information about the shopperInteraction and recurringProcessingModel fields, refer to Recurring transaction types.

curl https://checkout-test.adyen.com/v68/payments \
-H "x-API-key: YOUR_X-API-KEY" \
-H "content-type: application/json" \
-d '{
       "amount":{
          "value":1000,
          "currency":"EUR"
       },
       "paymentMethod":{
          "type":"sepadirectdebit",
          "recurringDetailReference":"7219687191761347"
       },
       "reference":"YOUR_ORDER_NUMBER",
       "merchantAccount":"YOUR_MERCHANT_ACCOUNT",
       "shopperReference":"YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
       "shopperInteraction":"ContAuth",
       "recurringProcessingModel": "Subscription"
}'
# Set your X-API-KEY with the API key from the Customer Area.
adyen = Adyen::Client.new
adyen.api_key = "YOUR_X-API-KEY"
 
response = adyen.checkout.payments({
  :amount => {
    :currency => "EUR",
    :value => 1000
  },
  :reference => "YOUR_ORDER_NUMBER",
  :paymentMethod => {
    :type => "sepadirectdebit",
    :recurringDetailReference => "7219687191761347"
  },
  :returnUrl => "https://your-company.com/checkout?shopperOrder=12xy..",
  :shopperReference => "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
  :merchantAccount => "YOUR_MERCHANT_ACCOUNT",
  :shopperInteraction => "ContAuth",
  :recurringProcessingModel => "Subscription"
})
// Set YOUR_X-API-KEY with the API key from the Customer Area.
// Change to Environment.LIVE and add the Live URL prefix when you're ready to accept live payments.
Client client = new Client("YOUR_X-API-KEY", Environment.TEST);
Checkout checkout = new Checkout(client);

PaymentsRequest paymentsRequest = new PaymentsRequest();

String merchantAccount = "YOUR_MERCHANT_ACCOUNT";
paymentsRequest.setMerchantAccount(merchantAccount);

Amount amount = new Amount();
amount.setCurrency("EUR");
amount.setValue(15000L);
paymentsRequest.setAmount(amount);

DefaultPaymentMethodDetails paymentMethodDetails = new DefaultPaymentMethodDetails();
paymentMethodDetails.setRecurringDetailReference("7219687191761347");
paymentMethodDetails.setType("sepadirectdebit");
paymentsRequest.setPaymentMethod(paymentMethodDetails);

paymentsRequest.setReference("YOUR_ORDER_NUMBER");
paymentsRequest.setReturnUrl("https://your-company.com/checkout?shopperOrder=12xy..");
paymentsRequest.setShopperInteraction("ContAuth");
paymentsRequest.setRecurringProcessingModel("Subscription");

PaymentsResponse paymentsResponse = checkout.payments(paymentsRequest);
// Set your X-API-KEY with the API key from the Customer Area.
$client = new \Adyen\Client();
$client->setXApiKey("YOUR_X-API-KEY");
$service = new \Adyen\Service\Checkout($client);

$params = array(
  "amount" => array(
    "currency" => "EUR",
    "value" => 1000
  ),
  "reference" => "YOUR_ORDER_NUMBER",
  "paymentMethod" => array(
    "type" => "sepadirectdebit",
    "recurringDetailReference" => "7219687191761347"
  ),
  "returnUrl" => "https://your-company.com/checkout?shopperOrder=12xy..",
  "shopperReference" => "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
  "recurringProcessingModel" => "Subscription",
  "shopperInteraction" => "ContAuth",
  "merchantAccount" => "YOUR_MERCHANT_ACCOUNT"
);
$result = $service->payments($params);
#Set your X-API-KEY with the API key from the Customer Area.
adyen = Adyen.Adyen()
adyen.client.xapikey = 'YOUR_X-API-KEY'

result = adyen.checkout.payments({
   'amount': {
      'value': 1000,
      'currency': 'EUR'
   },
   'reference': 'YOUR_ORDER_NUMBER',
   'paymentMethod': {
      'type': 'sepadirectdebit',
      'recurringDetailReference': '7219687191761347'
   },
   'returnUrl': 'https://your-company.com/checkout?shopperOrder=12xy..',
   'shopperReference': 'YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j'
   'merchantAccount': 'YOUR_MERCHANT_ACCOUNT',
   'shopperInteraction':'ContAuth',
   'recurringProcessingModel': 'Subscription'
})
// Set your X-API-KEY with the API key from the Customer Area.
var client = new Client ("YOUR_X-API-KEY", Environment.Test);
var checkout = new Checkout(client);

var amount = new Model.Checkout.Amount("EUR", 1000);
var details = new Model.Checkout.DefaultPaymentMethodDetails{
  Type = "sepadirectdebit",
  RecurringDetailReference = "7219687191761347"
};
var paymentsRequest = new Model.Checkout.PaymentRequest
{
  Reference = "YOUR_ORDER_NUMBER",
  Amount = amount,
  ReturnUrl = @"https://your-company.com/checkout?shopperOrder=12xy..",
  MerchantAccount = "YOUR_MERCHANT_ACCOUNT",
  ShopperReference = "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
  RecurringProcessingModel = "Subscription",
  ShopperInteraction = "ContAuth",
  PaymentMethod = details
};

var paymentResponse = checkout.Payments(paymentsRequest);
// Set your X-API-KEY with the API key from the Customer Area.
const {Client, Config, CheckoutAPI} = require('@adyen/api-library');
const config = new Config();
// Set your X-API-KEY with the API key from the Customer Area.
config.apiKey = '[API_KEY]';
config.merchantAccount = '[YOUR_MERCHANT_ACCOUNT]';
const client = new Client({ config });
client.setEnvironment("TEST");
const checkout = new CheckoutAPI(client);
checkout.payments({
    amount: { currency: "EUR", value: 1000 },
    paymentMethod: {
        type: 'sepadirectdebit',
        recurringDetailReference: "7219687191761347"
    },
    reference: "YOUR_ORDER_NUMBER",
    merchantAccount: config.merchantAccount,
    shopperReference: "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
    returnUrl: "https://your-company.com/checkout?shopperOrder=12xy..",
    shopperInteraction: "ContAuth",
    recurringProcessingModel: "Subscription"
}).then(res => res);

Test and go live

Check the status of EPS test payments in your Customer Area > Transactions > Payments.
Before you can accept live EPS payments, you need to submit a request for EPS in your live Customer Area.

See also