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

# Sandbox Bank Environments

> Test credentials, known quirks, and setup instructions for each bank's sandbox environment.

This page documents sandbox credentials and known behaviours for each bank supported by Kashimi. Use these details when testing payment flows in the sandbox environment.

<Info>
  Sandbox credentials are shared test accounts. Do not use real personal or financial information in any sandbox environment.
</Info>

<AccordionGroup>
  <Accordion title="Revolut">
    | Field        | Value            |
    | ------------ | ---------------- |
    | Mobile phone | `+44 7255581517` |
    | Passcode     | `0000`           |

    <Warning>
      Revolut's sandbox will **always reject the payment** after successful confirmation, due to insufficient funds in the test account. This is expected behaviour — use it only to test the authorisation flow.
    </Warning>
  </Accordion>

  <Accordion title="Coop">
    | Field         | Value     |
    | ------------- | --------- |
    | Customer name | PSU 1     |
    | User Name     | `obcoop1` |
    | Password      | `obcoop1` |

    <Info>
      There is also a `obcoop2` account, but this is the **receiver** account hardcoded in the demo page. Always use `obcoop1` as the payer.
    </Info>

    <Warning>
      Account `EE264204278608993910` (the first account shown on the list) has **no funds**. Select a different account when initiating a payment.
    </Warning>

    **Known issues**

    If you encounter login or flow issues, delete the site cookies or use an incognito window.
  </Accordion>

  <Accordion title="Swedbank">
    | Field     | Value         |
    | --------- | ------------- |
    | User Name | `1234567`     |
    | Password  | `11111111111` |

    <Info>
      Swedbank accepts **any 7-digit username** and **any 11-digit password** in sandbox. The values above are just one valid example.
    </Info>
  </Accordion>

  <Accordion title="SEB">
    | Field     | Value      |
    | --------- | ---------- |
    | User Name | `ibsUser1` |
    | Password  | `ibsUser1` |

    <Info>
      `ibsUser1`, `ibsUser2`, and `ibsUser3` are all available. The appropriate user may vary depending on which country's SEB instance you are testing.
    </Info>
  </Accordion>

  <Accordion title="SEB Sweden">
    | Field     | Value        |
    | --------- | ------------ |
    | User Name | `9311219639` |

    <Warning>
      The SCA redirect link in SEB Sweden's sandbox is **static** — the fill flow cannot be tested.

      SCA authorisation finalises automatically after **30 seconds**. The `scaRedirect` link will only appear if the authorisation is fetched within that window. After 30 seconds, the sandbox payment status changes to `RJCT`.
    </Warning>
  </Accordion>

  <Accordion title="Artea">
    No credentials required — simply **click and select** when prompted in the sandbox flow.
  </Accordion>

  <Accordion title="Luminor">
    | Field    | Value    |
    | -------- | -------- |
    | Username | `111111` |

    <Warning>
      Luminor's sandbox is **frequently broken** and may fail to log in or generate a valid URL. This is a known upstream issue with the bank's sandbox environment.
    </Warning>
  </Accordion>

  <Accordion title="Bunq">
    Bunq's sandbox requires additional setup before testing can begin.

    **Setup steps**

    1. Install the Android sandbox Bunq app: [Android Emulator setup](https://doc.bunq.com/#/android-emulator). You will need Android Studio or a physical Android device.
    2. Create a test user for the sandbox app: [Bunq API documentation — create sandbox user](https://developer.bunq.com/en/api/sandbox)
    3. Add money to your sandbox user account via the [Request Inquiry API](https://doc.bunq.com/#/request-inquiry/CREATE_RequestInquiry_for_User_MonetaryAccount). You can also request money from `sugardaddy@bunq.com` directly in the sandbox app (maximum €500 per request).

    <Info>
      Bunq's documentation site has a **cookie-related bug** — use an incognito window to view the full documentation.
    </Info>
  </Accordion>

  <Accordion title="Danskebank">
    | Field     | Value                  |
    | --------- | ---------------------- |
    | User Name | `81954753`             |
    | Password  | `86xUKSWPgHy2H2XBt8cv` |
  </Accordion>

  <Accordion title="Crosskey (S-Pankki, Ålandsbanken)">
    Credentials are stored in **1Password**.

    You can also reset test accounts under Sandboxes in the Crosskey developer portal:
    [crosskey.io — Sandbox management](https://crosskey.io/applications/team/8de80ad5-bc04-4b6e-91a0-4ba356b1c9fc/application/70c9681e-5f68-408f-9b50-16940451be48)
  </Accordion>

  <Accordion title="Redsys">
    | Field     | Value   |
    | --------- | ------- |
    | User Name | `user1` |
    | Password  | `1234`  |
  </Accordion>

  <Accordion title="Sparkassen">
    | Field     | Value     |
    | --------- | --------- |
    | User Name | `pushDec` |
    | Password  | `ok`      |
    | TAN       | `1111111` |

    **Browser certificate setup**

    To access the Sparkassen sandbox bank portal, the sandbox certificate must be installed in your browser:

    1. Generate a `.p12` certificate from your QWAC key and certificate:
       ```bash theme={null}
       openssl pkcs12 -export -inkey QWAC.key -in QWAC.pem -out QWAC.p12
       ```
    2. Import the generated `QWAC.p12` into your browser's private certificate store.
  </Accordion>

  <Accordion title="Deutsche Bank / Norisbank / Postbank">
    **PSU IDs by brand**

    | Bank          | PSU ID       | Notes                              |
    | ------------- | ------------ | ---------------------------------- |
    | Deutsche Bank | `6154033403` | Payment will be stuck in `PENDING` |
    | Norisbank     | TBC          | —                                  |
    | Postbank      | `33882000`   | Payment will end up `FAILED`       |

    <Info>
      You will be **redirected twice** during the flow (once for the AIS consent, once for the payment SCA). On both redirects, simply click **SCA OK** to proceed.
    </Info>

    <Warning>
      **Deutsche Bank**: Only one account is available per sandbox user. The bank pre-programmes it to simulate `ACTC` payment status — the payment will remain pending.

      **Postbank**: The sandbox requires different PSU IDs for the AIS consent request and the payment request, which cannot be simulated through the Kashimi demo page.
    </Warning>

    For additional test scenarios (e.g. `SCA NOK`), refer to the bank's test data file: `Test Data_6.0.xlsx`.
  </Accordion>

  <Accordion title="Volksbanken & Raiffeisenbanken">
    | PSU-ID          | Password | OTP      | IBAN                     |
    | --------------- | -------- | -------- | ------------------------ |
    | `VRK1234567890` | `ALL`    | `123456` | `DE39499999600000005111` |

    For the full list of test PSU-IDs and scenarios, refer to:

    * [Swagger UI — Volksbanken API](https://developer.vr-networld.de)
    * [Sandbox credentials ZIP](https://atruvia.de/uploads/files/sandbox-nextgen/TPP-Sandbox-Documentation.zip)
  </Accordion>

  <Accordion title="N26">
    N26's sandbox uses email addresses to simulate different payment outcomes. Refer to the [N26 sandbox documentation](https://doc.n26/psd2-tpp-docs) for full details.

    **SEPA Credit Transfer**

    | User email                                       | Use case                                   | Status flow                                      |
    | ------------------------------------------------ | ------------------------------------------ | ------------------------------------------------ |
    | `openbankingpsu@n26.com`                         | Payment is successful                      | `RCVD` → `ACCP` (2s) → `ACFC` (2s) → `ACSC` (2s) |
    | `test.account+account-selection-success@n26.com` | Payment successful after account selection | `RCVD` → `ACCP` (5s) → `ACFC` (5s) → `ACSC` (5s) |

    **Instant SEPA Credit Transfer**

    | User email                                               | Use case                                   | Status flow                                      |
    | -------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------ |
    | `openbankingpsu-instant@n26.com`                         | Payment is successful                      | `RCVD` → `ACCP` (2s) → `ACFC` (2s) → `ACCC` (2s) |
    | `test.account+account-selection-success-instant@n26.com` | Payment successful after account selection | `RCVD` → `ACCP` (5s) → `ACFC` (5s) → `ACCC` (5s) |

    **Failure scenarios (SEPA & Instant SEPA)**

    | User email                                       | Use case                                               | Status flow          |
    | ------------------------------------------------ | ------------------------------------------------------ | -------------------- |
    | `test.account+account-selection-expired@n26.com` | Payment fails after account selection expires          | `RCVD` → `RJCT` (5s) |
    | `test.account+user.rejects@n26.com`              | Payment fails — customer rejects certification         | `RCVD` → `RJCT` (2s) |
    | `test.account+payment.failed@n26.com`            | Payment fails — user not authorised from given account | `RCVD` → `RJCT`      |
    | `test.account+account.not.found@n26.com`         | Payment fails — provided account does not exist        | `RCVD` → `RJCT`      |
  </Accordion>

  <Accordion title="BPCE Group">
    | PSU-ID     | OTP SMS      |
    | ---------- | ------------ |
    | `99999999` | `0412345678` |

    Sandbox credentials reference: [BPCE API Store — Payment Initiation](https://apistore.groupebpce.com/api/payment-initiation-3?etablissement=94#tab-2-guide-1)
  </Accordion>

  <Accordion title="Handelsbanken">
    | Country | Sandbox User              | IBAN                       | BBAN        |
    | ------- | ------------------------- | -------------------------- | ----------- |
    | SE      | `SANDBOX-INDIVIDUAL-SE-1` | `SE3460000000000923450017` | `923450017` |
    | SE      | `SANDBOX-INDIVIDUAL-SE-2` | `SE4660000000000923462023` | `923462023` |

    <Info>
      The sandbox is mocked to `SANDBOX-INDIVIDUAL-SE-1`. When testing, use `SE4660000000000923462023` as the **receiver account**.
    </Info>

    Full account list: [Handelsbanken sandbox test data (PDF)](https://developer.handelsbanken.com/api/system/files/2025-03/sandbox%20test%20data%20accounts.pdf)
  </Accordion>
</AccordionGroup>
