Skip to main content
Open Banking allows a customer to add money to a Finsei wallet directly from their bank account.

Before you start

You need:
  • an active Open Banking feature;
  • a UUID identifying the payer;
  • an optional webhook subscription or WebSocket connection for receiving status updates.
Use GET /v3/wallet or GET /v3/wallet/{id} and check the following wallet permission:
Do not start an Open Banking deposit when permissions.canDepositFromOpenBanking is false.
Open Banking deposits are currently available only for eligible EUR wallets.

Open Banking flow

1. Get the list of available countries

Call GET /v1/wallet/{id}/deposit/bank/list/country to retrieve the supported countries. Example response:
Pass the selected country code as countryId.

2. Calculate the deposit fee

Call POST /v1/wallet/{id}/deposit/bank/fee to validate the deposit and calculate its fee without creating a deposit operation. Example request:
Example response:
The response fields have the following meanings:
The calculated fee is a quote. The final fee is fixed when the deposit operation is created.

3. Start the deposit

Call POST /v1/wallet/{id}/deposit/bank to create the deposit operation and obtain the bank authorisation URL. We recommend providing your own unique id. This allows you to correlate the request with webhook or WebSocket events even if the Open Banking operation cannot be started. Example request:
Successful response:
The successful response status is 200 OK.

4. Redirect the customer

Open the returned redirectUrl in the customer’s browser. The customer will:
  1. select their bank;
  2. authenticate with the bank;
  3. review the payment details;
  4. authorise the payment.
After completing the bank flow, the customer is redirected to one of the URLs provided in the deposit request: If a URL is not comitted, the default Finsei return URL is used.
A redirect to successUrl confirms only that the authorisation flow finished without a redirect error. It does not confirm that the wallet has been credited.

5. Track the deposit status

Use Finsei webhooks or WebSocket events to track the deposit after the customer has been redirected to their bank. The operation can have the following statuses: Use SETTLED as the confirmation that the wallet has been credited.

Webhook notifications

To receive server-to-server Open Banking status notifications, subscribe to the following events:
  • v1.openBankingIntent.create
  • v1.openBankingIntent.update
Configure the webhook using PATCH /v2/webhook. The list of events available for subscription can be obtained using GET /v2/webhook/event.

v1.openBankingIntent.create

This event is sent when the hosted bank page is ready and the operation changes to PENDING_USER_ACTION. Example payload:

v1.openBankingIntent.update

This event is sent when the deposit operation status changes. Example payload:
The event can contain one of the following statuses:
  • PENDING_CREDIT
  • SETTLED
  • EXPIRED
  • FAILED
The FAILED event is also sent when POST /v1/wallet/{id}/deposit/bank cannot start the deposit and returns:
If you provide id in the deposit request, the same value is returned in webhook and WebSocket events. This makes failed requests easier to correlate.

Late incoming payments

The actual incoming bank transfer is the source of truth for wallet crediting. A bank transfer can arrive after an earlier FAILED or EXPIRED status. When Finsei receives a matching incoming payment:
  1. the incoming credit payment is created;
  2. the wallet is credited;
  3. the Open Banking operation changes to SETTLED;
  4. an updated webhook and WebSocket event are sent.
Your integration must accept a later SETTLED event even if it previously received FAILED or EXPIRED.

Request validation

The deposit amount:
  • is required;
  • must have no more than two decimal places;
  • must be within the configured deposit limits.
payerId must be a valid UUID. countryId must be a supported ISO 3166-1 alpha-2 country code. Redirect URLs must use the http or https scheme. To validate a request without creating a deposit operation, call: POST /v1/wallet/{id}/deposit/bank?validate=1 Successful validation response:
Example response with validation errors:

Possible errors