> ## Documentation Index
> Fetch the complete documentation index at: https://developers.epayclub.com/llms.txt
> Use this file to discover all available pages before exploring further.

# iDEAL

> Collect payments from customers using iDEAL, the Netherlands’ leading bank redirect payment method.

Accept payments from customers using iDEAL, the most widely used online payment method in the Netherlands. Customers authorise the charge directly through their own bank's environment — no card details required.

<Info>
  This payment method only supports one-time (non-recurring) payments. It is available for EUR transactions to customers with a Dutch bank account.
</Info>

## Payment flow

Several steps occur between collecting the customer's billing details and completing the charge.

<Info>
  We'll proceed assuming you've already set up a customer order. If you need to create one, you'll find the steps [here](/orders/create-orders).
</Info>

After creating the order, follow these steps to complete the iDEAL charge.

1. [Collect](#ideal-customer-information) the customer's billing information.
2. [Encrypt](/api-basics/encryption) sensitive data within your request.
3. Redirect the customer to their bank's iDEAL authorisation page.
4. Confirm the payment and inform the customer of its outcome.

### iDEAL Customer Information

Present the customer with a form to gather their billing details. These are required to initiate the transaction:

| Customer information | Parameter                     | Example       | Required |
| :------------------- | :---------------------------- | :------------ | :------- |
| Street               | `card.billingAddress.street`  | Damrak 1      | Yes      |
| City                 | `card.billingAddress.city`    | Amsterdam     | Yes      |
| State                | `card.billingAddress.state`   | North Holland | Yes      |
| Country              | `card.billingAddress.country` | NL            | Yes      |
| Zip code             | `card.billingAddress.zipCode` | 1012 LG       | Yes      |

Combine the billing data, order reference, and `paymentoption`. Encrypt the request before sending it to the pay order [endpoint](/api-reference/orders/pay).

<CodeGroup>
  ```json Example (Unencrypted) theme={null}
  {
      "reference": "12345678",
      "paymentoption": "IDEAL",
      "card": {
          "billingAddress": {
              "street": "Damrak 1",
              "city": "Amsterdam",
              "state": "North Holland",
              "country": "NL",
              "zipCode": "1012 LG"
          }
      }
  }
  ```

  ```json Example (Encrypted) theme={null}
  {
    "data": "B9pQJ1HoxybgfjNnEro+26w7lQZ6jriF3AFiUeGH2Ggacn6cF0srUlqiHEXeEncJcMw6ThDobjuS+AsmvhNfvGPGMddjbt5rcK2JrUnUI4cHk0XebJKoNnjEqivcyq0UKEMdYOLd6mYZtvKu5FMlpz0Lo0aMY49pnYvUGLSsCf/wOhlPx9PHgQDXptT+WBJcO3lzeD8O0S4IVSWPCWPLi7GhGlqhZpheEi1FHq39TCHk12hL3sqkkIktZIkkQVAe8AkwZGhy/CMJZrTzU6IXZr2ulT7mJenZljSk66m0pARcUqwMw/+5PEPECDo8SX3IkX2hmym02pGuWZeHE9ONWcaW7h8UIroQ/+kThz/RtP/UMiK3596cij66JcW+RcXKPiqNKysskcnaOlQFIFuhEiAczimLgd320RrQzehaw1C33UGsCzAG1p2EnDthjTF63BZtEhVlu9kN7qtFCz9AvojZeaZFKOxpJJ0usfwl9Hq5oAa56AFt/3IIsvqrAktTOyMgQ/jGQ6uhRYpA6UAH0CcYyv7L99hgVtRTXAxA/rpCtY7aTR9Pjxb5Lt1IV0Q1V8fWxAv0yY+ss07qeiSIsccsdJiN4LaMx3RvmDlu54XF68w51L34hOCDj/NBoPVUZrSaCJK2GPJ6CjOHI8q2/U2TkU+y+a80XCAC/rgqGhw="
  }
  ```
</CodeGroup>

Upon receiving your request, we will return a successful response containing a redirect URL for the customer's bank iDEAL authorisation page.

```json 200 OK [expandable] theme={null}
{
    "data": {
        "paymentDetail": {
            "redirectUrl": "https://engine.ig375.com/payment/de257bee24f34813875a301577749493",
            "recipientAccount": null,
            "paymentReference": "CP512981C4-588C-4DC6-B6E3-911F47F25354"
        },
        "bankTransferDetails": null,
        "orderPayment": {
            "orderId": 3320,
            "orderPaymentReference": "PGW-PAYREF-31B02C6780DB4EC8932C67896C6E66C3",
            "currency": "EUR",
            "statusId": 2,
            "orderPaymentResponseCode": "02",
            "orderPaymentResponseMessage": "pending-authentication",
            "orderPaymentInstrument": null,
            "remarks": "Order payment initiated",
            "totalAmount": 100.00,
            "fee": 0.00
        }
    },
    "status": "success",
    "statusCode": "02",
    "message": "pending-authentication"
}
```

### Authorising the Payment

Redirect the customer to the `paymentDetail.redirectUrl`. This takes them to their own bank's iDEAL environment, where they select their bank (if not already implied by the redirect), log in, and confirm the payment amount.

The customer approves or cancels the payment directly within their banking app or online banking session, then is redirected back to complete the checkout flow.

Once the customer responds, EPayClub is notified of the outcome. You will receive a webhook containing the final transaction status regardless of whether the payment was approved or declined.

### Verifying the Payment

<Info>
  [Read](/orders/verify-orders) the transaction verification section to learn how to verify your iDEAL transactions.
</Info>

## Testing your integration

<Warning>
  Kindly [contact](mailto:support@epayclub.com) the support team to enable iDEAL testing on your account.
</Warning>

<Warning>
  iDEAL does not have a dedicated sandbox environment. All test transactions are processed against the live iDEAL network using live test credentials provided by the support team — use small amounts when testing.
</Warning>

Follow these guidelines to successfully test your iDEAL integration:

1. Use a EUR order currency — iDEAL is only available for EUR transactions.
2. Provide a complete billing address — `street`, `city`, `state`, `country`, and `zipCode` are all required; the charge will be rejected as invalid if any are missing.
3. Set `card.billingAddress.country` to `NL` in your pay order request.
