curl --request POST \
--url https://anzapi.onboardme.app/api/v1/id-verifications/send \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"entityKey": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"entityName": "<string>",
"entityEmail": "<string>",
"entityMobile": "<string>",
"includeAml": "<string>",
"mute": true,
"templateBillId": 123
}
'import requests
url = "https://anzapi.onboardme.app/api/v1/id-verifications/send"
payload = {
"entityKey": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"entityName": "<string>",
"entityEmail": "<string>",
"entityMobile": "<string>",
"includeAml": "<string>",
"mute": True,
"templateBillId": 123
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
entityKey: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
entityName: '<string>',
entityEmail: '<string>',
entityMobile: '<string>',
includeAml: '<string>',
mute: true,
templateBillId: 123
})
};
fetch('https://anzapi.onboardme.app/api/v1/id-verifications/send', 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://anzapi.onboardme.app/api/v1/id-verifications/send",
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([
'entityKey' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'entityName' => '<string>',
'entityEmail' => '<string>',
'entityMobile' => '<string>',
'includeAml' => '<string>',
'mute' => true,
'templateBillId' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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://anzapi.onboardme.app/api/v1/id-verifications/send"
payload := strings.NewReader("{\n \"entityKey\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"entityName\": \"<string>\",\n \"entityEmail\": \"<string>\",\n \"entityMobile\": \"<string>\",\n \"includeAml\": \"<string>\",\n \"mute\": true,\n \"templateBillId\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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://anzapi.onboardme.app/api/v1/id-verifications/send")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"entityKey\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"entityName\": \"<string>\",\n \"entityEmail\": \"<string>\",\n \"entityMobile\": \"<string>\",\n \"includeAml\": \"<string>\",\n \"mute\": true,\n \"templateBillId\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://anzapi.onboardme.app/api/v1/id-verifications/send")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"entityKey\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"entityName\": \"<string>\",\n \"entityEmail\": \"<string>\",\n \"entityMobile\": \"<string>\",\n \"includeAml\": \"<string>\",\n \"mute\": true,\n \"templateBillId\": 123\n}"
response = http.request(request)
puts response.read_body{
"verificationKey": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"wallet": {
"identityVerificationFromWallet": 123,
"amlOnWalletBecausePoolEmpty": 123,
"totalWalletRequired": 123
},
"aml": {
"requestsRequired": 123,
"fromSubscription": 123,
"purchasedFromWallet": 123,
"walletCharge": 123,
"subscriptionRemaining": 123,
"waived": true
},
"accessUrl": "<string>",
"emailSent": true,
"upfrontBill": {
"templateBillId": 123,
"name": "<string>",
"amountDue": 123,
"invoiceCount": 123
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}Send an identity verification
Starts an identity verification and sends the recipient an email with a link to complete it, unless mute is true — then no email is sent and you use accessUrl from the response instead.
Who to verify
entityKey— reference an existing client. You may overrideentityEmailorentityMobilefor this invitation only.- Omit
entityKeyand supplyentityName,entityEmail, and optionallyentityMobilefor someone not yet on file.
AML
- Omit
includeAmlfor identity verification only. - Set
includeAmlto"Basic"or"Extensive"to include AML screening.
Bill upfront
- Set
templateBillId(fromGET /api/v1/id-verifications/template-bills) to make the client pay before they can verify. RequiresentityKey. - The bill is raised from the template when the client opens the link, then paid by card or bank account through the practice’s payment provider (Pinch or Stripe must be connected).
- Only active, one-off template bills can be used. Invoices marked Bill now are billed; if none are marked, the first invoice is.
upfrontBillin the response gives the template name,amountDue(incl. tax) andinvoiceCount; null when no upfront bill was requested.
For a standalone AML check (no IDV invite), use POST /api/v1/id-verifications/aml-checks.
Cost (wallet in the response)
wallet.identityVerificationFromWallet— amount taken from the practice wallet for the identity check itself (after promotions).wallet.amlOnWalletBecausePoolEmpty— extra wallet charge for AML only when you included AML and the practice had no subscription requests left (then AML is billed like one purchased request). Otherwise 0 (AML used a pool request, no AML on the invite, or AML charges are waived).wallet.totalWalletRequired—identityVerificationFromWallet+amlOnWalletBecausePoolEmpty. If the wallet is short and auto-topup is enabled, the practice wallet is topped up first; otherwise the send fails with 400 when balance is below this total.
AML billing (aml in the response) — what was actually consumed; null when the invite has no AML.
aml.requestsRequired— AML requests needed (Basic = 1, Extensive = 2).aml.fromSubscription— requests taken from the practice’s subscription.aml.purchasedFromWallet/aml.walletCharge— requests beyond the subscription balance, billed at the add-request price.aml.subscriptionRemaining— subscription requests left after this send.aml.waived— true when AML charges are waived for the practice.
Write access is required (canWrite: true from GET /api/v1/auth/validate).
429 — rate limit exceeded.
curl --request POST \
--url https://anzapi.onboardme.app/api/v1/id-verifications/send \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"entityKey": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"entityName": "<string>",
"entityEmail": "<string>",
"entityMobile": "<string>",
"includeAml": "<string>",
"mute": true,
"templateBillId": 123
}
'import requests
url = "https://anzapi.onboardme.app/api/v1/id-verifications/send"
payload = {
"entityKey": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"entityName": "<string>",
"entityEmail": "<string>",
"entityMobile": "<string>",
"includeAml": "<string>",
"mute": True,
"templateBillId": 123
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
entityKey: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
entityName: '<string>',
entityEmail: '<string>',
entityMobile: '<string>',
includeAml: '<string>',
mute: true,
templateBillId: 123
})
};
fetch('https://anzapi.onboardme.app/api/v1/id-verifications/send', 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://anzapi.onboardme.app/api/v1/id-verifications/send",
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([
'entityKey' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'entityName' => '<string>',
'entityEmail' => '<string>',
'entityMobile' => '<string>',
'includeAml' => '<string>',
'mute' => true,
'templateBillId' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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://anzapi.onboardme.app/api/v1/id-verifications/send"
payload := strings.NewReader("{\n \"entityKey\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"entityName\": \"<string>\",\n \"entityEmail\": \"<string>\",\n \"entityMobile\": \"<string>\",\n \"includeAml\": \"<string>\",\n \"mute\": true,\n \"templateBillId\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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://anzapi.onboardme.app/api/v1/id-verifications/send")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"entityKey\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"entityName\": \"<string>\",\n \"entityEmail\": \"<string>\",\n \"entityMobile\": \"<string>\",\n \"includeAml\": \"<string>\",\n \"mute\": true,\n \"templateBillId\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://anzapi.onboardme.app/api/v1/id-verifications/send")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"entityKey\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"entityName\": \"<string>\",\n \"entityEmail\": \"<string>\",\n \"entityMobile\": \"<string>\",\n \"includeAml\": \"<string>\",\n \"mute\": true,\n \"templateBillId\": 123\n}"
response = http.request(request)
puts response.read_body{
"verificationKey": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"wallet": {
"identityVerificationFromWallet": 123,
"amlOnWalletBecausePoolEmpty": 123,
"totalWalletRequired": 123
},
"aml": {
"requestsRequired": 123,
"fromSubscription": 123,
"purchasedFromWallet": 123,
"walletCharge": 123,
"subscriptionRemaining": 123,
"waived": true
},
"accessUrl": "<string>",
"emailSent": true,
"upfrontBill": {
"templateBillId": 123,
"name": "<string>",
"amountDue": 123,
"invoiceCount": 123
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}Authorizations
Swagger / Postman only: Client ID as username, Client secret as password. In Postman, set this once on the collection (Authorization → Basic Auth) so all requests inherit. For production server-to-server code, prefer X-OM-Auth-ID and X-OM-Auth-Key headers.