curl --request POST \
--url https://api.next.orenda.finance/v1/customers/{customerId}/batch-payments/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"action": "initiate",
"batchId": "3f1c8f9e-1d2b-4a3c-9e5f-6a7b8c9d0e1f",
"payments": [
{
"payer": {
"account": {
"type": "uk",
"sortCode": "010203",
"accountNumber": "12345678"
}
},
"payee": {
"name": "Ada Lovelace",
"account": {
"type": "uk",
"sortCode": "040506",
"accountNumber": "87654321"
}
},
"reference": "Invoice 1024",
"amount": "150.00"
}
]
}
'{
"success": true,
"totalAmount": "350.00",
"currency": "GBP",
"scaChallenge": {
"hash": "9f86d0...",
"nonce": "b1946ac9",
"timestamp": "2026-06-05T10:00:00Z"
}
}Pay a batch (single customer)
Pay a verified batch. The SCA challenge round-trips through the caller’s authentication, so this is a multi-step exchange against this same route:
initiate— returnstotalAmount,currencyand anscaChallengefor the items you send.- (optional)
passkey-challenge— FIDO2 options, if the user authenticates with a passkey rather than TOTP or PIN. submit— send the same items back with aconfirmationcarrying the challenge. Returns thebatchId.
This route rejects verify with 403 — use the /batch-payments/verify route for that.
Access: this route is gated separately from the one that verifies a batch. The unsuffixed batch routes remain available and still accept every action, including submit.
A verified batch is required. batchId — the id returned by verify — is required on both initiate and submit here, so this route can only pay a batch that went through verification. It is checked for expiry and ownership and can only be paid once; a second submit of the same draft is rejected. passkey-challenge needs no batchId, as it touches no batch.
The unsuffixed batch routes keep the older contract, where batchId is optional and omitting it creates a new batch.
curl --request POST \
--url https://api.next.orenda.finance/v1/customers/{customerId}/batch-payments/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"action": "initiate",
"batchId": "3f1c8f9e-1d2b-4a3c-9e5f-6a7b8c9d0e1f",
"payments": [
{
"payer": {
"account": {
"type": "uk",
"sortCode": "010203",
"accountNumber": "12345678"
}
},
"payee": {
"name": "Ada Lovelace",
"account": {
"type": "uk",
"sortCode": "040506",
"accountNumber": "87654321"
}
},
"reference": "Invoice 1024",
"amount": "150.00"
}
]
}
'{
"success": true,
"totalAmount": "350.00",
"currency": "GBP",
"scaChallenge": {
"hash": "9f86d0...",
"nonce": "b1946ac9",
"timestamp": "2026-06-05T10:00:00Z"
}
}Authorizations
The caller's id_token from authentication — the ID token, not the access_token. The program and environment come from the token.
Path Parameters
The customer id.
Body
Required — initiate, passkey-challenge or submit. verify is rejected with 403; it belongs to the /batch-payments/verify route.
initiate, passkey-challenge, submit The payment items. Required for initiate and submit, and must be identical between them or SCA verification fails.
Show child attributes
Show child attributes
The strong-customer-authentication challenge from initiate. Pass it back on submit.
Show child attributes
Show child attributes
Step-up confirmation (for submit). Set method to passkey, totp, or pin and include that method's fields. pin is a program capability — see Program capabilities.
- Passkey
- 2FA code
- PIN
Show child attributes
Show child attributes
Optional UUID. Reuse the same key to make submit safe to retry — batch and item IDs are then derived deterministically, so a retry cannot double-pay.
Required. The draft returned by verify. This route only pays a batch that was verified first, so initiate and submit both need it. It is checked for expiry and ownership and cannot be paid twice.
Response
Result for the requested step — initiate → totalAmount/currency/scaChallenge; passkey-challenge → passkeySession/fido2options; submit → batchId/status/counts.
The response is of type object.