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.
GET /v3/wallet or
GET /v3/wallet/{id} and check the
following wallet permission:
Open Banking flow
1. Get the list of available countries
CallGET /v1/wallet/{id}/deposit/bank/list/country
to retrieve the supported countries.
Example response:
countryId.
2. Calculate the deposit fee
CallPOST /v1/wallet/{id}/deposit/bank/fee
to validate the deposit and calculate its fee without creating a deposit
operation.
Example request:
The calculated fee is a quote. The final fee is fixed when the deposit
operation is created.
3. Start the deposit
CallPOST /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:
200 OK.
4. Redirect the customer
Open the returnedredirectUrl in the customer’s browser.
The customer will:
- select their bank;
- authenticate with the bank;
- review the payment details;
- authorise the payment.
If a URL is not comitted, the default Finsei return URL is used.
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.createv1.openBankingIntent.update
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:
PENDING_CREDITSETTLEDEXPIREDFAILED
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 earlierFAILED or EXPIRED status. When
Finsei receives a matching incoming payment:
- the incoming credit payment is created;
- the wallet is credited;
- the Open Banking operation changes to
SETTLED; - an updated webhook and WebSocket event are sent.
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: