curl --request POST \
--url https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"amount": "150.00",
"currency": "GBP",
"reference": "Invoice 1024",
"beneficiaryId": "ben_4b8e1c9d",
"purpose": "PP001",
"chargeBearer": "SHA"
}
'import requests
url = "https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments"
payload = {
"amount": "150.00",
"currency": "GBP",
"reference": "Invoice 1024",
"beneficiaryId": "ben_4b8e1c9d",
"purpose": "PP001",
"chargeBearer": "SHA"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: '150.00',
currency: 'GBP',
reference: 'Invoice 1024',
beneficiaryId: 'ben_4b8e1c9d',
purpose: 'PP001',
chargeBearer: 'SHA'
})
};
fetch('https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => '150.00',
'currency' => 'GBP',
'reference' => 'Invoice 1024',
'beneficiaryId' => 'ben_4b8e1c9d',
'purpose' => 'PP001',
'chargeBearer' => 'SHA'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments"
payload := strings.NewReader("{\n \"amount\": \"150.00\",\n \"currency\": \"GBP\",\n \"reference\": \"Invoice 1024\",\n \"beneficiaryId\": \"ben_4b8e1c9d\",\n \"purpose\": \"PP001\",\n \"chargeBearer\": \"SHA\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"150.00\",\n \"currency\": \"GBP\",\n \"reference\": \"Invoice 1024\",\n \"beneficiaryId\": \"ben_4b8e1c9d\",\n \"purpose\": \"PP001\",\n \"chargeBearer\": \"SHA\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"150.00\",\n \"currency\": \"GBP\",\n \"reference\": \"Invoice 1024\",\n \"beneficiaryId\": \"ben_4b8e1c9d\",\n \"purpose\": \"PP001\",\n \"chargeBearer\": \"SHA\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"bankTransfer": {
"status": "success",
"requestId": "p_111222333"
}
}
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "IDEMPOTENT_REQUEST_IN_PROGRESS",
"message": "A request with this Idempotency-Key is already in progress"
}Create a payment
Initiates a domestic or single payment from the given account. Provide either a saved beneficiaryId or a cryptoQuote.
curl --request POST \
--url https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"amount": "150.00",
"currency": "GBP",
"reference": "Invoice 1024",
"beneficiaryId": "ben_4b8e1c9d",
"purpose": "PP001",
"chargeBearer": "SHA"
}
'import requests
url = "https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments"
payload = {
"amount": "150.00",
"currency": "GBP",
"reference": "Invoice 1024",
"beneficiaryId": "ben_4b8e1c9d",
"purpose": "PP001",
"chargeBearer": "SHA"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: '150.00',
currency: 'GBP',
reference: 'Invoice 1024',
beneficiaryId: 'ben_4b8e1c9d',
purpose: 'PP001',
chargeBearer: 'SHA'
})
};
fetch('https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => '150.00',
'currency' => 'GBP',
'reference' => 'Invoice 1024',
'beneficiaryId' => 'ben_4b8e1c9d',
'purpose' => 'PP001',
'chargeBearer' => 'SHA'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments"
payload := strings.NewReader("{\n \"amount\": \"150.00\",\n \"currency\": \"GBP\",\n \"reference\": \"Invoice 1024\",\n \"beneficiaryId\": \"ben_4b8e1c9d\",\n \"purpose\": \"PP001\",\n \"chargeBearer\": \"SHA\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"150.00\",\n \"currency\": \"GBP\",\n \"reference\": \"Invoice 1024\",\n \"beneficiaryId\": \"ben_4b8e1c9d\",\n \"purpose\": \"PP001\",\n \"chargeBearer\": \"SHA\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.next.orenda.finance/v1/customers/{customerId}/accounts/{accountId}/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"150.00\",\n \"currency\": \"GBP\",\n \"reference\": \"Invoice 1024\",\n \"beneficiaryId\": \"ben_4b8e1c9d\",\n \"purpose\": \"PP001\",\n \"chargeBearer\": \"SHA\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"bankTransfer": {
"status": "success",
"requestId": "p_111222333"
}
}
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "<string>",
"message": "<string>"
}{
"success": false,
"code": "IDEMPOTENT_REQUEST_IN_PROGRESS",
"message": "A request with this Idempotency-Key is already in progress"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Optional. Makes the request retry-safe: a retry with the same key resolves to the same resource instead of creating a duplicate. Must be a UUID, and is scoped to the authenticated customer. Preferred over any idempotencyKey body field.
Path Parameters
Customer identifier.
Account identifier. The account determines which optional features and limits apply.
Body
Decimal string, max 2 dp.
^\d+(\.\d{1,2})?$"150.00"
Purpose code.
1"PP001"
ISO 4217. Defaults to the account currency if omitted.
3Statement reference. The field allows up to 140 characters, but some programs accept fewer (as low as 35). Stay within your program's limit.
140Saved beneficiary. Required unless cryptoQuote is supplied.
SHA, OUR, BEN Specific source virtual IBAN. For domestic GBP must start with GB.
Future date (UTC) to schedule the payment.
Repeat interval for a recurring scheduled payment. Omit (or send NEVER) for a one-off. MONTHLY uses the day from scheduledDate.
NEVER, DAILY, WEEKLY, FORTNIGHTLY, MONTHLY Admin-only.
Provide instead of beneficiaryId for crypto-funded payments.
Optional. Idempotency key for retry-safety (parity with batch payments). The Idempotency-Key header is preferred and overrides this field. Reusing a key with different amount/accountId/beneficiaryId returns 400; a key whose payment is still being claimed returns 409.