List Associated Persons
curl --request GET \
--url https://api.hopnow.io/v1/accounts/{account_id}/associated-persons \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hopnow.io/v1/accounts/{account_id}/associated-persons"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hopnow.io/v1/accounts/{account_id}/associated-persons', 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.hopnow.io/v1/accounts/{account_id}/associated-persons",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hopnow.io/v1/accounts/{account_id}/associated-persons"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hopnow.io/v1/accounts/{account_id}/associated-persons")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hopnow.io/v1/accounts/{account_id}/associated-persons")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "<string>",
"object": "<string>",
"account_id": "<string>",
"role": "<string>",
"additional_roles": [
"<string>"
],
"is_signer": true,
"first_name": "<string>",
"last_name": "<string>",
"middle_name": "<string>",
"email": "<string>",
"phone_number": "<string>",
"date_of_birth": "<string>",
"country_code": "<string>",
"nationality": "<string>",
"birth_country_code": "<string>",
"tax_identification_number": "<string>",
"tax_residence_country_code": "<string>",
"position": "<string>",
"ownership_percentage": "<string>",
"ownership_type": "<string>",
"residential_address": {},
"created": "<string>",
"updated": "<string>",
"created_by": "<string>",
"updated_by": "<string>"
}
],
"page": 123,
"size": 123,
"total": 123,
"pages": 123
}Associated Persons
List Associated Persons
Retrieve the beneficial owners, directors and control persons on a business account
GET
/
v1
/
accounts
/
{account_id}
/
associated-persons
List Associated Persons
curl --request GET \
--url https://api.hopnow.io/v1/accounts/{account_id}/associated-persons \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hopnow.io/v1/accounts/{account_id}/associated-persons"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hopnow.io/v1/accounts/{account_id}/associated-persons', 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.hopnow.io/v1/accounts/{account_id}/associated-persons",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hopnow.io/v1/accounts/{account_id}/associated-persons"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hopnow.io/v1/accounts/{account_id}/associated-persons")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hopnow.io/v1/accounts/{account_id}/associated-persons")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "<string>",
"object": "<string>",
"account_id": "<string>",
"role": "<string>",
"additional_roles": [
"<string>"
],
"is_signer": true,
"first_name": "<string>",
"last_name": "<string>",
"middle_name": "<string>",
"email": "<string>",
"phone_number": "<string>",
"date_of_birth": "<string>",
"country_code": "<string>",
"nationality": "<string>",
"birth_country_code": "<string>",
"tax_identification_number": "<string>",
"tax_residence_country_code": "<string>",
"position": "<string>",
"ownership_percentage": "<string>",
"ownership_type": "<string>",
"residential_address": {},
"created": "<string>",
"updated": "<string>",
"created_by": "<string>",
"updated_by": "<string>"
}
],
"page": 123,
"size": 123,
"total": 123,
"pages": 123
}Lists the associated persons recorded on an account, newest first. An individual account has none, so the list is empty for one.
Requires an API key with
read access on the accounts scope.
Path Parameters
string
required
The account’s external ID (starts with
acct_)Query Parameters
integer
default:"1"
Page number (minimum 1)
integer
default:"10"
Items per page (1-100)
Response
array
Associated person objects, newest first
Show Associated Person Fields
Show Associated Person Fields
string
Associated person identifier (starts with
aap_), and the value to pass as signer_id when responding to agreements.string
Always returns
"associated_person"string
Parent account ID
string
ultimate_beneficial_owner, director, control_person or account_representativestring[]
Other roles the person holds. Empty when they hold only
roleboolean
Whether the person may be named as
signer_id on an agreement responsestring
First name
string
Last name
string
Middle name, or
nullstring
Contact email, or
nullstring
Contact phone in E.164, or
nullstring
ISO 8601 date, or
nullstring
Country of residence, alpha-2
string
Nationality, alpha-2, or
nullstring
Country of birth, alpha-2, or
nullstring
Tax identification number, or
nullstring
Country of tax residence, alpha-2, or
nullstring
Position at the business, or
nullstring
Ownership share as a percentage, or
nullstring
direct or indirect, or nullobject
Residential address, or
nullstring
ISO 8601 timestamp when created
string
ISO 8601 timestamp when last updated
string
ID of the API key that created the person (starts with
ak_)string
Actor that last updated the person, or
nullinteger
Current page number
integer
Items per page
integer
Total number of items
integer
Total number of pages
Response Example
{
"items": [
{
"id": "aap_3f8k1m5p9r2t6v4x7z0b3n5q",
"object": "associated_person",
"account_id": "acct_9f2a7c1e6a2b4f3c9b8d2e5a",
"role": "ultimate_beneficial_owner",
"additional_roles": ["control_person"],
"is_signer": true,
"first_name": "Maya",
"last_name": "Chen",
"middle_name": null,
"email": "maya@acme.example",
"phone_number": "+6581234567",
"date_of_birth": "1985-06-21",
"country_code": "SG",
"nationality": "SG",
"birth_country_code": "SG",
"tax_identification_number": "S1234567D",
"tax_residence_country_code": "SG",
"position": "Director",
"ownership_percentage": "60.00",
"ownership_type": "direct",
"residential_address": {
"address_line": "10 Marina Boulevard, #23-01",
"city": "Singapore",
"region": "Central Region",
"postal_code": "018983",
"country": "SG"
},
"created": "2026-09-16T03:14:01Z",
"updated": "2026-09-16T03:14:01Z",
"created_by": "ak_9a3yfd2ro3jeoqqalbx8jew1",
"updated_by": null
}
],
"page": 1,
"size": 10,
"total": 1,
"pages": 1
}