Skip to main content

Bulk/Batch payments

Bulk/Batch payments (sometimes called “file payments”) offer an opportunity to execute multiple payments with a single call to a bank API. Usually it is used by businesses to pay their invoices, suppliers, employees - all with a single authorization flow on the bank side.

There are a couple of specific things that are worth mentioning.

  1. First of all, all payments within a single bulk payment should have the same bank account as their sender. In our API this data is supplied via paymentData.debtor parameter.
  2. Every bank has its own time delay which should pass after the bulk payment initiation process for payments within the bulk payment actually execute. For HSBC it’s 3 days, for Lloyds and Revolut it’s 1 day, and all the remaining banks add newly created bulk payments to their queues and execute them according to their order. Based on the current load of the bank’s system times can vary for the latter case - ranging from immediate execution to holding back by days. If you are supplying parameter futurePaymentDate and it’s more than the default time delay for the bank then all payments within a bulk will be executed on your set date. Otherwise, they will be executed after their default time delays assuming you’ve got a successful response from our API.
  3. Unlike single domestic payments where payment statuses are constantly updating until they hit the “settled” phase, bulk payments can give back only “initiation completed” for the final phase of the flow. This means all single payments within a bulk passed initial validation on the bank side and are queued to be executed on their appropriate timelines. But the actual execution of separate payments should be checked via banking apps. On the other hand, if a single payment within a bulk doesn’t pass validation the entire bulk payment is rejected and corresponding status is returned.
  4. All banks have their own restrictions on bulk payments. This particularly relates to total amount of bulk payment, count of unique beneficiary accounts, min/max delays for futurePaymentDate parameter. Bank API specifics and restrictions can be found in the table below. If your calls won’t stay within these limits they will be rejected by the banks.
BankTotal Amount (GBP)Min/Max beneficiariesMin/Max delays (days)
Barclays50,0005/502/395
HSBC10,0001/253/45
Lloyds25,0001/252/?
Natwest20,0001/15not supported
RBS20,0001/15not supported
Ulster20,0001/15not supported
Revolut250,0001/1000no limits
SVB?1/1002/1826

General flow

In the more broad sense initiating bulk/batch payment via Fena API is similar to initiating single immediate payments. First, you are calling the POST /payment/file-payment-initiation-requests endpoint supplying all the needed information for us to construct and submit your intent to the bank. If your data passes validations on our side as well as on the bank's side we are replying with payment authorisation URI. You should redirect your end-user to this URI for them to authorise the payment on the bank’s side. At the end of the flow we will redirect your end-user either to the redirect URI you have supplied with the bulk payment initiation data (recommended way) or to the default URI of the customer you used to make the call. Resulting status of the call and few other necessary data will be attached to your redirect URI as a query string under the keys id, customerPaymentId and status.

API spec for bulk payment endpoints with all corresponding details can be found here

Webhooks

We will continue to track the statuses for all bulk payments where the initiation isn’t completed by the end of user flow and will send webhook events once their statuses are updated. The webhook URI is configured the same way as redirect URI - submitted on payment initiation request or configured upon registration with Fena. The payload will have following content:

{
type: ‘file-payment-initiation_update-status’,
status: // new detected status of bulk payment,
comment: ‘detected file payment status update’,
data: { … } // payment details
}

We are tracking all our bulk payments until they get successfully initiated or run into unrecoverable errors.

Critical: after receiving a webhook event for a bulk payment’s status update, always call our GET endpoint to double-check whether the webhook event originated from Fena. For UK banks it is GET payment/file-payment-initiation-requests/{paymentId}. If the webhook originated from us then this endpoint will return the same status as was stated in the webhook event. Otherwise status returned from GET request takes precedence.