Beneficial Ownership Information
Using Veem's Beneficial Ownership endpoint you are able to add beneficial ownership info for an account you just created
This endpoint is used to add or get beneficial ownership information to a newly created Veem account.
POST https://sandbox-api.veem.com/veem/v1.2/beneficial-ownership
Headers
Three headers are required to use this endpoint.
Required Headers
Name
Type
Required
Description
Authorization
stringYes
Bearer token (OAuth 2.0) This header holds the bearer token required to use Veem's public API, and belongs to the owner account. Failure to use a valid bearer token will result in a 404 (Not Found) status code in the response. An example of a valid header value is as follows:
Bearer c047594b-082c-4da1-be89-08fe3770f4b3See Get Access Token section to generate your Bearer token
X-Request-Id
stringYes
This is a unique string that identifies the current API request, and should follow the UUID format. Reusing this header without changing the value will result in a 409 (Conflict) status code in the response. An example X-request-id is as follows:
48855846-628d-4177-b071-80332a116f0a
Content-Type
stringYes
The content type of the request. Must be
application/json
Effective April 15th, 2026: Beneficial Ownership Information payloads support a new optional field,
documentIds, to link account documents to each owner.
What's New: documentIds
documentIdsdocumentIds is an optional array of Long values available in both individualOwnerShip[] and businessOwnerShip[] objects.
This field is used to link uploaded documents to a specific beneficial owner for verification compliance and KYC/KYB processes.
You should use document IDs returned by the Account Document API response. For reference, see Account Document.
Request Payload
When adding beneficial ownership information to an account using Veem's API, one must follow the format as shown in the following example:
{
"beneficialOwnerShip": {
"hasAttestation": true,
"individualOwnerShip": [
{
"firstName": "John",
"lastName": "Duenas",
"ownershipPercentage": 25,
"dateOfBirth": "12/31/1990",
"citizenshipIsoCountryCode": "US",
"addressLine1": "Address line 1",
"addressLine2": "Address line 2",
"addressCity": "San Francisco",
"addressState": "CA",
"addressPostalCode": "94111",
"addressIsoCountryCode": "US",
"phoneNumberType": "mobile",
"dialCode": "+1",
"phoneNumber": "4152306359",
"taxId": "121-31-2321",
"isControlPerson" : true,
"title" : "CEO of the company",
"documentIds": [10001, 10002]
}
],
"businessOwnerShip": [
{
"businessName": "Another business name",
"taxId": "33-1867308",
"ownershipPercentage": 25,
"addressLine1": "Address line 1",
"addressLine2": "Address line 2",
"addressCity": "San Francisco",
"addressState": "CA",
"addressPostalCode": "94111",
"addressIsoCountryCode": "US",
"documentIds": [20001]
}
]
},
"onBehalfAccountId": 412312 // se Partner Notes
}Note: When adding beneficial ownership information, you can add details for individual ownership, business ownership or both simultaneously, like in the above example
Request Parameters
The following table contains detailed information on the payload's parameters, such as the parameter name, whether it is mandatory or not, formatting (if applicable), and size of the parameter
Parameter | Mandatory? | Format | Size (in characters) |
|---|---|---|---|
hasAttestation | Yes | true/false | |
isControlPerson | Yes (for individualOwnership only) | true/false One control person must be present even if this person has 0% ownership | |
title | Yes (for individualOwnership, andonly if the account is a controlPerson) | 128 (Max) | |
firstName | Yes (for individualOwnership only) | 64 (Max) | |
lastName | Yes (for individualOwnership only) | 64 (Max) | |
dialCode | No | Country code (such as +1 for US or Canada, +31 for Netherlands etc. More info available below the table)
| 2-5 |
phoneNumber | No | 1234567654
| 12 (Max) |
businessName | Yes (for businessOwnership only) | 128 (Max) | |
taxId | Yes | For an individual's taxId, you can provide a Tax ID Number, National ID number, Drivers license number or Passport Number. | |
ownershipPercentage | Yes | Integer | 0-100 |
documentIds | No (optional for individualOwnership and businessOwnership) | Array of Long values (document IDs from Account Document API response) | N/A |
dateOfBirth | Yes (for individualOwnership only) | MM/DD/YYYY | |
citizenshipIsoCountryCode | Yes (for individualOwnership only) | ISO 3166-1 alpha-2 standard (eg. US, BE, BT etc) | 2 |
phoneNumberType | No (Will be ignored if dialCode and phoneNumber are not provided) | Mobile, Home or Business | |
addressLine1 | Yes | 64 (Max) | |
addressLine2 | No | 64 (Max) | |
addressCity | Yes | 2-64 | |
addressPostalCode | Yes | 2-10 | |
addressState | Yes | 2-64 | |
addressIsoCountryCode | Yes | ISO 3166-1 alpha-2 standard (eg. US, BE, BT etc) | 2 |
How documentIds Is Processed by Endpoint
documentIds Is Processed by Endpoint-
POST (
/veem/v1.2/beneficial-ownership):
IfdocumentIdsis provided and not empty for an owner, Veem creates the owner first, then links those document IDs to that owner.
IfdocumentIdsisnullor empty, document linking is skipped. -
PATCH (
/veem/v1.2/beneficial-ownership/{id}):
Veem compares the current owner's linked documents vs. the incomingdocumentIds.- IDs present in request but not currently linked are linked.
- IDs currently linked but missing from request are unlinked.
- If
documentIdsisnull, no document link/unlink changes are applied.
-
PUT (
/veem/v1.2/beneficial-ownership/{id}):
Uses the same compare-and-sync behavior as PATCH fordocumentIds.
IfdocumentIdsisnull, no document link/unlink changes are applied. -
GET (
/veem/v1.2/beneficial-ownership):
Returns the currentdocumentIdslinked to each owner in the response payload.
For extra information, you can find some resources here: ISO 3166-1 alpha-2 standard: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes Dial codes: https://en.wikipedia.org/wiki/List_of_country_calling_codes
Partner Notes:
- A partner account can be configured to make this API request on behalf of their customers. This requires internal configuration for the partner account by Veem. Once the internal configuration is enabled, the API request can be made using partner account bearer token.
onBehalfAccountIdis an optional parameter, this needs to be included on the request body in case of partner making an API request on behalf of their customer. This is the customer Veem account ID, e.g.453221.
Response Payload
Once a valid response has been sent, a response payload of this format should be expected:
{
"beneficialOwnerShip": {
"individualOwnerShip": [
{
“Id” : 1
"firstName": "John",
"lastName": "Duenas",
"ownershipPercentage": 25,
"documentIds": [10001, 10002],
…..
}
],
"businessOwnerShip": [
{
“Id” : 2,
"businessName": "Another business name",
"taxId": "33-1867308",
"ownershipPercentage": 25,
"documentIds": [20001],
…
}
]
}
}
Get Beneficial Ownership Information
If, instead of adding beneficial ownership information to a new account, one wants to fetch the beneficial ownership information of an existing account, one can use the following endpoint:
GET https://sandbox-api.veem.com/veem/v1.2/beneficial-ownership
Partner Notes:
- A partner account can be configured to make this API request on behalf of their customers. This requires internal configuration for the partner account by Veem. Once the internal configuration is enabled, the API request can be made using partner account bearer token.
One can expect to get the a response payload of the same type as the above response
Updated 8 days ago
