POST
/
v1
/
beneficiaries
/
verify
Verify a payee's name
curl --request POST \
  --url https://api.next.orenda.finance/v1/beneficiaries/verify \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "beneficiary": {
    "name": "Ada Lovelace"
  },
  "account": {
    "type": "uk",
    "sortCode": "040506",
    "accountNumber": "87654321"
  }
}
'
import requests

url = "https://api.next.orenda.finance/v1/beneficiaries/verify"

payload = {
"beneficiary": { "name": "Ada Lovelace" },
"account": {
"type": "uk",
"sortCode": "040506",
"accountNumber": "87654321"
}
}
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({
beneficiary: {name: 'Ada Lovelace'},
account: {type: 'uk', sortCode: '040506', accountNumber: '87654321'}
})
};

fetch('https://api.next.orenda.finance/v1/beneficiaries/verify', 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/beneficiaries/verify",
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([
'beneficiary' => [
'name' => 'Ada Lovelace'
],
'account' => [
'type' => 'uk',
'sortCode' => '040506',
'accountNumber' => '87654321'
]
]),
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/beneficiaries/verify"

payload := strings.NewReader("{\n \"beneficiary\": {\n \"name\": \"Ada Lovelace\"\n },\n \"account\": {\n \"type\": \"uk\",\n \"sortCode\": \"040506\",\n \"accountNumber\": \"87654321\"\n }\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/beneficiaries/verify")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"beneficiary\": {\n \"name\": \"Ada Lovelace\"\n },\n \"account\": {\n \"type\": \"uk\",\n \"sortCode\": \"040506\",\n \"accountNumber\": \"87654321\"\n }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.next.orenda.finance/v1/beneficiaries/verify")

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 \"beneficiary\": {\n \"name\": \"Ada Lovelace\"\n },\n \"account\": {\n \"type\": \"uk\",\n \"sortCode\": \"040506\",\n \"accountNumber\": \"87654321\"\n }\n}"

response = http.request(request)
puts response.read_body
{
  "success": true,
  "data": {
    "match": true,
    "name": "Ada Lovelace",
    "reasonCode": "MTCH",
    "reasonCodeDescription": "Name matches the account holder."
  }
}
{
"success": false,
"code": "<string>",
"message": "<string>"
}
Before you save or pay someone, check that the name they gave you actually matches the account — this is Confirmation of Payee (UK) / Verification of Payee (EU). It helps catch typos and scams. Send the name to check and the account as a discriminated account object — { "type": "uk", "sortCode": …, "accountNumber": … } or { "type": "iban", "iban": … }. You get back whether it matched.

Reading the result

FieldMeaning
matchtrue for an exact or partial match, false otherwise.
nameThe matched name (may differ slightly from what you sent), or empty.
reasonCodeA scheme code — e.g. MTCH (match) or NMTC (no match).
reasonCodeDescriptionA readable explanation of the code.
A close-but-not-exact match still returns match: true with the real name in name — show it to the user so they can decide whether to continue.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
beneficiary
object
required
account
UK · object
required

The account to check. For UK use { type: "uk", sortCode, accountNumber }; for EU { type: "iban", iban }.

Response

Verification result

success
boolean
Example:

true

data
object