iDEAL

Learn how to accept iDEAL payments.


iDEAL is the most used online banking method in the Netherlands, supported by all the major Dutch consumer banks.

When paying with iDEAL, the shopper is redirected to their bank's website or app to complete the payment. For most iDEAL payments, you'll receive immediate confirmation of whether the payment was successful. For a small number of payments you will not receive an immediate confirmation, and will need to rely on a notification to confirm whether the payment was successful.

Payment Type Payment flow Recurring Refunds Partial Refunds Captures Partial Captures Chargebacks
Online Banking Redirect Yes Yes Yes No No No

You can accept iDEAL payments with:

Integrate with Checkout SDKs

Our Checkout SDKs support iDEAL payments without any additional configuration.

Integrate with API

In this section, we show the API integration steps for iDEAL.

Before you begin this section, make sure you read and understand our API Integration guide.

Step 1: Collect shopper details

When a shopper chooses to pay with iDEAL: 

  1. Present a list of available banks in your payments form: 

    The available banks are different for test and live payments.

    Test payments

    Bank name

    iDEAL Issuer

    Test Issuer

    1121

    Test Issuer 2

    1151

    Test Issuer 3

    1152

    Test Issuer 4

    1153

    Test Issuer 5

    1154

    Test Issuer 6

    1155

    Test Issuer 7

    1156

    Test Issuer 8

    1157

    Test Issuer 9

    1158

    Test Issuer 10

    1159

    Test Issuer Refused

    1160

    Test Issuer Pending

    1161

    Test Issuer Cancelled

    1162

    Live payments

    Bank name

    iDEAL Issuer

    ABN AMRO

    0031

    ASN Bank

    0761

    bunq

    0802

    Knab

    0801

    ING Bank

    0721

    Moneyou

    0803

    Rabobank

    0021

    Regiobank

    0771

    SNS Bank

    0751

    Triodos Bank

    0511

    Van Lanschot Bankiers

    0161

  2. Collect the shopper's bank.

Step 2:  Make a payment

  • Make a /payments API call, providing:
    • reference: Your unique reference for this payment.
    • amount.
    • paymentMethod.type: ideal.
    • paymentMethod.issuer: The shopper's bank. Specify this with the iDEAL Issuer value that corresponds to this bank.
    • returnUrl: The URL the shopper will be redirected back to after they complete the payment.
    {
       "merchantAccount":"YourMerchantAccount",
       "reference":"iDEAL test",
       "amount":{
          "currency":"EUR",
          "value":1000
       },
       "paymentMethod":{
          "type":"ideal",
          "issuer":"0721"
       },
       "returnUrl":"https://your-company.com/..."
    }

    This returns a /payments response containing:

    • resultCode of RedirectShopper.
    • redirect object containingurl.

    {
       "resultCode":"RedirectShopper",
       "details":[
          {
             "key":"returnUrlQueryString",
             "type":"text"
          }
       ],
       "paymentData":"abcxyz...",
       "redirect":{
          "method":"GET",
          "url":"https://test.adyen.com/hpp/redirectIdeal.shtml?brandCode=ideal&countryCode=NL..."
       }
    }

Step 3: Redirect shopper

To complete the iDEAL payment, the shopper will need to approve it on their bank's website or app.

  • Redirect the shopper to the URL specified at redirect.url.

    When the shopper has completed the payment they will be redirected back to your website or app using the returnUrl you specified earlier. This will be appended with a payload.

    https://your-company.com/?payload=sdfsdf...&type=complete&resultCode=authorised

    Do not use the resultCode you receive from the returnUrl to determine whether the payment was successful. Instead, verify the result on your server.

Step 4: Present payment result

  1. Submit the payload to the /payments/details endpoint to verify the result of the payment:

    {
      "details":{
        "payload":"sdfsdfsdf..."
      }
    }
  2. The response will contain a pspReference, which is our unique identifier for this payment, and a resultCode.

  3. Use the resultCode you received from the /payments/details endpoint to present the payment result to your shopper via your website or app.

iDEAL result codes

The resultCodes you can receive for iDEAL are:

  • Authorised: The payment was successful. You will receive the funds in 2-3 days.
  • Cancelled: The shopper cancelled the payment while on their bank's website or app. Ask the shopper whether they want to continue with the order, or request that they select a different payment method.
  • Refused: The payment was refused by the shopper's bank.
  • Pending: The shopper has completed the payment but the final result is not yet known. It may take minutes or hours for the iDEAL payments network to confirm this. Inform the shopper that you've received their order, and are waiting for the payment to be completed.

To find out more about result codes and how you can action them, see Result codes.

iDEAL notifications

If you're accepting iDEAL payments you will need to set up notifications to know whether some payments are successful. Once set up, we'll notify you of the result of iDEAL payments, including those:

  • With a Pending status.
  • Where the shopper failed to return to your website or app after completing the payment.

Successful payments

You'll know that an iDEAL payment has been successful when you receive a notification with:

  • eventCodeAUTHORISATION.
  • successtrue.

Recurring iDEAL payments

If you have a subscription or recurring business model we recommend creating a shopper token.

Although the iDEAL payments network does not support recurring payments, you can make recurring payments for an iDEAL shopper by tokenizing their payment details. When you create a shopper token from an iDEAL payment, we'll store the shopper's SEPA details with the token. You can use this token to make recurring payments using SEPA Direct Debit.

You can create a shopper token with either the SDK or API integrations, but to make recurring payments with the token you'll need to use the  /payments endpoint.

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 amount they will be charged will reduce the risk of chargebacks.

Create shopper token

Tokenize the shopper's payment details when you make the initial iDEAL payment. The steps for doing this depend on whether you integrated with our Checkout SDKs or our API integration.

Checkout SDKs

  1. When you call /paymentSession to create a payment session, additionally include:

    • shopperReference: Your unique ID for this shopper.

    • enableRecurringtrue.

  2. If the shopper's payment details were successfully tokenized, you'll receive a successful payment notification that includes a recurringDetailReference. This is the token you will need to make recurring payments for this shopper.

API integration

  1. When you call /payments to make a payment, additionally include:
    • shopperReference: Your unique ID for this shopper.
    • paymentMethod.storeDetailstrue.
  2. If the shopper's payment details were successfully tokenized, you'll receive a successful payment notification that includes a recurringDetailReference. This is the token you will need to make recurring payments for this shopper.

Make recurring payments

Any recurring payments for the iDEAL shopper are made as a SEPA Direct Debit payment.

  • Make a /payments request for a SEPA payment, and additionally include:
    • paymentMethod.type: sepadirectdebit.
    • recurringDetailReference: Token received back from the iDEAL payment.
    • shopperReference: The same shopper ID you used to create the shopper token.
    • shopperInteraction: ContAuth.
    {
       "amount":{
          "value":1000,
          "currency":"EUR"
       },
       "paymentMethod":{
          "type":"sepadirectdebit",
          "recurringDetailReference":"7219687191761347"
       },
       "reference":"Your Reference Here",
       "merchantAccount":"TestMerchant",
       "shopperReference":"yourShopperId_IOfW3k9G2PvXFu2j",
       "shopperInteraction":"ContAuth"
    }

    If the payment was successfully received the response will contain a Received resultCode and a pspReference, which is our unique identifier for this transaction. You can track whether the payment was successful using Notifications.

Failed redirects

Although rare, networking issues may prevent the shopper from returning to your server after they approved the payment. When a shopper fails to return to your website or app, we'll send you a notification to inform you of the payment result. It may be a few days before you receive this notification.

Testing iDEAL payments

Before accepting live iDEAL payments, test your integration by making payments using the following iDEAL issuers (paymentMethod.issuer). We recommend testing each iDEAL Payment Result:

Payment Result iDEAL Issuer
Authorised 1121, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159
Cancelled 1162
Pending 1161
Refused 1160

Check the status of iDEAL test payments in your Customer Area > Transactions > Payments.

See also