Batch payments are an optional capability, enabled per program. If your program doesn’t
have it, the endpoints aren’t available to you. See Program
capabilities. Every call uses the user’s bearer token.
The items
Each item is one payment. Send the destination fields your program uses:- UK programs use
accountNumber+sortCode. - EU programs use
iban+bic.
scheduledDate (YYYY/MM/DD) to send
an item on a future date.
The flow
- Verify —
POST .../batch-payments/verifywith the items. We validate each one and run a name check on the payee (Confirmation of Payee for UK, Verification of Payee for EU). You get arequestIdand abatchId— the latter identifies the draft this creates, which is what lets someone else pay it later. - Check status — poll until validation finishes. The result marks each item valid or invalid, with errors.
- Initiate —
POST .../batch-payments/submitwithaction: "initiate"and thebatchIdto get thetotalAmount,currency, and anscaChallenge. - Submit — same endpoint with
action: "submit", the challenge, aconfirmationobject (passkey, 2FA code, or PIN on supported programs), and thebatchIdfrom step 1 to pay that draft. - Track — fetch the batch to watch each item move through
QUEUED→SUCCESSorFAILED.
Why initiate and submit share one endpoint
The authentication challenge has to round-trip through the user:initiate issues it, the
user authenticates against the amount and payee they can see, then submit presents it back.
Both steps are the same privilege — authorising a payment — so they sit on the same endpoint
and the action field says which step you’re on.
/verify rejects initiate, passkey-challenge and submit with 403, and /submit
rejects verify with 403. On /verify the action field is optional, since the route
only serves one.
The split routes require a verified batch. batchId is mandatory on initiate and
submit there, so the pay route cannot be used without going through verify first. The
unsuffixed routes keep the older contract, where it is optional.
Using the older single endpoint
The original endpoint still works and still accepts all four actions:action: "verify", "initiate", "passkey-challenge" or "submit" against it. The
request and response bodies are identical to the split routes — only the URL and the
permission differ. It remains supported for existing integrations; new integrations should
use the split routes.
Status
A batch reports an overallstatus: CREATED, FUNDING_PENDING, FUNDED, PROCESSING,
QUEUED, and the failure states FUNDING_FAILED and PARTIALLY_FAILED. Individual items
are QUEUED, SUCCESS, or FAILED.