Bulk payment API batch handling idempotency and status design banner

Bulk Payment API for UK Platforms: Batch Handling, Idempotency and Status Design

Can your platform send 500 supplier payments in one call and know, within seconds, which ten failed and why? A bulk payment API accepts many payment instructions in a single call and returns individual, per-payment status for each one, not one verdict for the whole batch.

In July 2026, UK Open Banking’s infrastructure processed 2.94 billion successful API calls, including 171.38 million payment initiation (PIS) calls specifically, with weighted API availability at 99.99%. As payment initiation scales, batch-level design starts to matter as much as single-payment reliability.

Key takeaways

  • A bulk payment API is judged on per-payment status, not batch-level status: one failure should never block the rest of the run.
  • Idempotency keys are not optional at bulk volume; without them, a retry risks paying someone twice.
  • UK Open Banking bulk payments carry their own atomicity rules, set by the receiving bank rather than by your integration.
  • Reconciliation depends on what the API returns, not on manual matching afterwards.

What Does a Bulk Payment API Actually Do?

A single-payment API and a bulk payment API share the same building blocks (authorise, confirm, report), but bulk changes what “report” has to mean. The table below is the fastest way to check whether a provider’s payment processing API is genuinely built for batches, or just wraps a single-payment endpoint in a loop.

Point of DistinctionSingle-payment APIBulk payment API
Request shapeOne payment per callMany payments per call
ResponseOne statusStatus returned per payment
Partial outcomesNot applicableSome succeed, some fail, same call
IdentifiersPayment ID onlyPayment ID plus batch ID
What to check in the docsn/aBatch limits, partial-success format, per-payment identifiers

If a provider’s payment processing API documentation is silent on that right-hand column, it’s a single-payment API with a bulk wrapper attached, not a genuine bulk payment API.

How Should Partial Failures Be Handled?

Bulk payment API partial failure response showing successful, failed and pending payment outcomes

This is the question most evaluations skip, and it’s the one that causes production incidents. A dependable payment API treats a batch as a set of independent outcomes, not one pass/fail result.

Atomic batches versus per-payment batches

Some providers treat a batch as one atomic unit: every payment succeeds, or the entire batch rolls back. Others treat each payment independently, so one failed payment doesn’t block the remaining 499. For most B2B use cases (supplier runs, payroll, refunds) per-payment handling is what you want. Full atomicity sounds safer on paper, but one bad account number can then hold up an entire payroll run.

UK Open Banking’s own atomicity behaviour

If this runs over UK Open Banking rails rather than card or file-based rails, the receiving bank, not your provider, often decides whether a submitted batch executes as a whole or per-payment, and some UK institutions require each payee to already be a recognised, trusted beneficiary before a bulk instruction will go through. This constraint is rarely covered in generic payment processing API guides, and it shapes how you design pre-submission validation.

What a partial-failure response needs

A response format that actually holds up under partial failure includes:

  • Successful, failed, and pending payments listed separately in the same response
  • A reason code on every failed payment: insufficient funds, invalid account, expired consent, duplicate reference
  • A payment-level ID alongside the batch-level ID, so one failure can be looked up directly without re-scanning the batch
  • No requirement to re-fetch or re-poll the whole batch just to find what went wrong

Without this, your support team ends up manually re-checking every failed line by hand.

Why Does Idempotency Matter More at Bulk Volume?

Idempotency keys matter for any payment API, but the stakes rise with volume. A retried single-payment request without an idempotency key risks one duplicate payment. A retried bulk request without one risks duplicating an entire batch.

The double-payment risk

Network timeouts happen. If your platform doesn’t know whether a submission actually reached the provider, the instinct is to retry. Without an idempotency key tied to that specific batch, a retry can submit the same 300 payments a second time.

Setting idempotency keys correctly

A dependable provider expects a unique idempotency key on every batch submission, stores it against the full request, and returns the original result, not a new payment, if the same key is submitted again. Test this before going live: submit the same batch twice with the same key and confirm only one set of payments is created.

How Should Webhooks Work for Bulk Runs?

Bulk payment API per-payment webhook events compared to a single batch-complete webhook

A single webhook firing “batch complete” isn’t enough information to safely update hundreds of individual records.

Per-payment events versus batch-complete events

Ordering, retries and delivery guarantees

Bulk runs generate a burst of events. Your provider should sign every webhook, retry failed deliveries, and let your endpoint deduplicate on event ID rather than assume once-only, in-order delivery.

What Recipient Validation Should Happen Before Execution?

The cheapest failure to prevent is the one caught before submission. Checking account details, sort codes and payee names up front, before funds are reserved, avoids discovering an invalid account halfway through a 500-payment run, and reduces exceptions later as batch size grows.

What Should Reconciliation Output Look Like?

UK late payments cost businesses almost £11 billion a year, with an estimated £26 billion owed to businesses at any given time (GOV.UK, late payment consultation response). Slow, manual reconciliation is part of that problem: finance teams want a report they can match against their ledger, not a batch acceptance message.

Every payment in the response should carry a reference your platform already recognises, an invoice ID, payroll run ID or supplier reference, alongside amount, status and timestamp.

A payment processing API that only returns opaque provider IDs pushes the matching work back onto your finance team, which defeats the purpose of automating the run in the first place.

Integrating a Bulk Payment API Into Your Platform

For most SaaS, accounting, payroll and marketplace platforms, a bulk payment API sits behind existing approval workflows rather than replacing them. Your platform still owns the “who gets paid, how much, when” decision; the API executes it and reports back.

Where Does Finexer Fit for Bulk Payment API Runs?

CapabilityDetail
Payment initiationMulti-recipient bulk runs submitted in a single API call
Status reportingPer-payment webhook status as each one completes
Failure handlingIsolated per payment, the rest of the run continues
ReconciliationReferences carried through to reconciliation output
AuthorisationFCA-authorised (FRN 925695) for AIS and PIS
PricingTransparent pricing (no hidden charges)

To be clear about the boundary: Finexer is a payment processing API, not an accounting or payroll system. It doesn’t decide who gets paid, calculate amounts, or make reconciliation decisions for you. It executes the run and reports status on every payment as it happens, the core job of any bulk payment API.

What is a bulk payment API?

It lets a platform submit many payment instructions in one call and receive per-payment status back, rather than a single result for the whole batch. It is built for volume, supplier runs, payroll, refunds, where checking each payment individually isn’t practical.

Is a bulk payment API the same as a payout API?

They overlap. A payout API typically covers sending money out to recipients, one-off or in bulk. This is specifically optimised for batch behaviour: partial failure handling, per-payment identifiers and batch-level idempotency, which matter less at single-payment volume.

Does it guarantee every payment in a batch succeeds together?

Not usually, and it shouldn’t. Most B2B use cases need per-payment handling, so one failed payment doesn’t block the rest of the run. Fully atomic batches (where the whole batch rolls back on any single failure) exist but are rarely what a payroll or supplier-payment workflow actually needs.

How does idempotency work at bulk volume?

Each batch submission carries a unique idempotency key. If the same key is submitted again, after a timeout or retry, the provider returns the original result instead of creating a new set of payments, preventing accidental duplicate runs.

Can a bulk payment API run over UK Open Banking rails?

Yes, but the receiving bank often controls whether a batch executes atomically or per-payment, and some banks require payees to already be recognised beneficiaries before a bulk instruction is accepted. This is worth checking directly with your provider rather than assuming card-style batch behaviour.

See how per-payment status and reconciliation references work for bulk payment runs on Finexer’s Open Banking infrastructure.

About the Author

Ravi Ranjan
Ravi Ranjan

Ravi Ranjan is Co founder & CEO of Finexer


Posted

in

, ,

by