List beneficial owners
The people recorded against the business for compliance: its ultimate beneficial owners, its directors, and the individual who acts for it towards the currency provider.
This is distinct from the entity’s owner, which is the person the Melio account belongs to. The two are usually the same human, but owner carries no address, tax identifier or ownership stake, so it cannot satisfy international onboarding on its own.
const options = {method: 'GET', headers: {'api-key': '<api-key>'}};
fetch('https://api.melio.com/v2/entities/{entityId}/beneficial-owners', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.melio.com/v2/entities/{entityId}/beneficial-owners"
headers = {"api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)curl --request GET \
--url https://api.melio.com/v2/entities/{entityId}/beneficial-owners \
--header 'api-key: <api-key>'HttpResponse<String> response = Unirest.get("https://api.melio.com/v2/entities/{entityId}/beneficial-owners")
.header("api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.melio.com/v2/entities/{entityId}/beneficial-owners")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api-key"] = '<api-key>'
response = http.request(request)
puts response.read_bodypackage main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.melio.com/v2/entities/{entityId}/beneficial-owners"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"data": [
{
"id": 123,
"firstName": "<string>",
"lastName": "<string>",
"dateOfBirth": "2023-12-25",
"address": {
"line1": "<string>",
"city": "<string>",
"postalCode": "<string>",
"countryCode": "<string>",
"line2": "<string>",
"state": "<string>"
},
"usResident": true,
"hasIdentityDocument": true,
"types": [
"ubo"
],
"ownershipPercentage": 123,
"jobTitle": "chief-executive-officer",
"taxInfo": {
"type": "ssn",
"identifierLast4": "<string>"
},
"internationalIdType": "passport",
"internationalId": "<string>",
"email": "<string>",
"phoneNumber": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "VALIDATION_ERROR",
"message": "<string>",
"details": {}
}
}Authorizations
Path Parameters
Response
The business's beneficial owners. Empty until any are recorded.
Hide child attributes
Hide child attributes
A counterparty address outside the US. Unlike Address, state is free-form (most countries have no state; send an empty string or omit it) and postalCode is not a US ZIP. countryCode is required and must not be US — a US-domiciled counterparty belongs on a domestic account type.
Hide child attributes
Hide child attributes
Street address. Must be a real street address, not a PO box.
Two-letter ISO 3166-1 alpha-2 country code.
^[A-Za-z]{2}$State, province or region. Optional — send an empty string where the country has none.
Whether a government ID is on file for this person. The document itself cannot be read back through this API.
The role a person holds in the business. ubo is an ultimate beneficial owner (someone with a material ownership stake), director is a control person, and fx-account-holder is the individual who acts for the business towards the currency provider. One person may hold several roles; exactly one person must be the fx-account-holder.
ubo, director, fx-account-holder Decimal share (0.25 = 25%)
chief-executive-officer, chief-financial-officer, managing-member, general-partner, president, vice-president, treasurer passport, driver-license, national-id Last four characters of the identifier on file
const options = {method: 'GET', headers: {'api-key': '<api-key>'}};
fetch('https://api.melio.com/v2/entities/{entityId}/beneficial-owners', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.melio.com/v2/entities/{entityId}/beneficial-owners"
headers = {"api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)curl --request GET \
--url https://api.melio.com/v2/entities/{entityId}/beneficial-owners \
--header 'api-key: <api-key>'HttpResponse<String> response = Unirest.get("https://api.melio.com/v2/entities/{entityId}/beneficial-owners")
.header("api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.melio.com/v2/entities/{entityId}/beneficial-owners")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api-key"] = '<api-key>'
response = http.request(request)
puts response.read_bodypackage main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.melio.com/v2/entities/{entityId}/beneficial-owners"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"data": [
{
"id": 123,
"firstName": "<string>",
"lastName": "<string>",
"dateOfBirth": "2023-12-25",
"address": {
"line1": "<string>",
"city": "<string>",
"postalCode": "<string>",
"countryCode": "<string>",
"line2": "<string>",
"state": "<string>"
},
"usResident": true,
"hasIdentityDocument": true,
"types": [
"ubo"
],
"ownershipPercentage": 123,
"jobTitle": "chief-executive-officer",
"taxInfo": {
"type": "ssn",
"identifierLast4": "<string>"
},
"internationalIdType": "passport",
"internationalId": "<string>",
"email": "<string>",
"phoneNumber": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "VALIDATION_ERROR",
"message": "<string>",
"details": {}
}
}