cURL
curl --request GET \
--url https://api.lightspark.com/grid/2025-10-13/beneficial-owners \
--header 'Authorization: Basic <encoded-value>'import LightsparkGrid from '@lightsparkdev/grid';
const client = new LightsparkGrid({
username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted
password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted
});
// Automatically fetches more pages as needed.
for await (const beneficialOwner of client.beneficialOwners.list({ customerId: 'customerId' })) {
console.log(beneficialOwner.id);
}package com.lightspark.grid.example
import com.lightspark.grid.client.LightsparkGridClient
import com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient
import com.lightspark.grid.models.beneficialowners.BeneficialOwnerListPage
import com.lightspark.grid.models.beneficialowners.BeneficialOwnerListParams
fun main() {
val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()
val params: BeneficialOwnerListParams = BeneficialOwnerListParams.builder()
.customerId("customerId")
.build()
val page: BeneficialOwnerListPage = client.beneficialOwners().list(params)
}{
"data": [
{
"id": "BeneficialOwner:019542f5-b3e7-1d02-0000-000000000001",
"customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",
"roles": [
"UBO",
"DIRECTOR"
],
"ownershipPercentage": 51,
"personalInfo": {
"firstName": "Jane",
"lastName": "Smith",
"birthDate": "1978-06-15",
"nationality": "US",
"address": {
"line1": "123 Main Street",
"postalCode": "94105",
"country": "US",
"line2": "Apt 4B",
"city": "San Francisco",
"state": "CA"
},
"idType": "SSN",
"identifier": "123-45-6789",
"middleName": "Marie",
"email": "jane.smith@acmecorp.com",
"phoneNumber": "+14155550192",
"countryOfIssuance": "US"
},
"kycStatus": "APPROVED",
"createdAt": "2025-10-03T12:00:00Z",
"updatedAt": "2025-10-03T12:00:00Z"
}
],
"hasMore": true,
"nextCursor": "<string>",
"totalCount": 123
}{
"status": 400,
"message": "<string>",
"details": {
"errors": [
{
"field": "taxIdentifier",
"constraint": {
"format": "email",
"pattern": "^\\d{5}(-\\d{4})?$",
"enum": [
"SSN",
"ITIN",
"NON_US_TAX_ID"
],
"minLength": 1,
"maxLength": 500
},
"message": "Value is not one of the allowed enum members."
}
]
}
}{
"status": 401,
"message": "<string>",
"details": {}
}{
"status": 500,
"message": "<string>",
"details": {}
}KYC/KYB Verifications
List beneficial owners
Retrieve a list of beneficial owners for a business customer.
GET
/
beneficial-owners
cURL
curl --request GET \
--url https://api.lightspark.com/grid/2025-10-13/beneficial-owners \
--header 'Authorization: Basic <encoded-value>'import LightsparkGrid from '@lightsparkdev/grid';
const client = new LightsparkGrid({
username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted
password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted
});
// Automatically fetches more pages as needed.
for await (const beneficialOwner of client.beneficialOwners.list({ customerId: 'customerId' })) {
console.log(beneficialOwner.id);
}package com.lightspark.grid.example
import com.lightspark.grid.client.LightsparkGridClient
import com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient
import com.lightspark.grid.models.beneficialowners.BeneficialOwnerListPage
import com.lightspark.grid.models.beneficialowners.BeneficialOwnerListParams
fun main() {
val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()
val params: BeneficialOwnerListParams = BeneficialOwnerListParams.builder()
.customerId("customerId")
.build()
val page: BeneficialOwnerListPage = client.beneficialOwners().list(params)
}{
"data": [
{
"id": "BeneficialOwner:019542f5-b3e7-1d02-0000-000000000001",
"customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",
"roles": [
"UBO",
"DIRECTOR"
],
"ownershipPercentage": 51,
"personalInfo": {
"firstName": "Jane",
"lastName": "Smith",
"birthDate": "1978-06-15",
"nationality": "US",
"address": {
"line1": "123 Main Street",
"postalCode": "94105",
"country": "US",
"line2": "Apt 4B",
"city": "San Francisco",
"state": "CA"
},
"idType": "SSN",
"identifier": "123-45-6789",
"middleName": "Marie",
"email": "jane.smith@acmecorp.com",
"phoneNumber": "+14155550192",
"countryOfIssuance": "US"
},
"kycStatus": "APPROVED",
"createdAt": "2025-10-03T12:00:00Z",
"updatedAt": "2025-10-03T12:00:00Z"
}
],
"hasMore": true,
"nextCursor": "<string>",
"totalCount": 123
}{
"status": 400,
"message": "<string>",
"details": {
"errors": [
{
"field": "taxIdentifier",
"constraint": {
"format": "email",
"pattern": "^\\d{5}(-\\d{4})?$",
"enum": [
"SSN",
"ITIN",
"NON_US_TAX_ID"
],
"minLength": 1,
"maxLength": 500
},
"message": "Value is not one of the allowed enum members."
}
]
}
}{
"status": 401,
"message": "<string>",
"details": {}
}{
"status": 500,
"message": "<string>",
"details": {}
}Authorizations
API token authentication using format <api token id>:<api client secret>
Query Parameters
The business customer ID
Maximum number of results to return (default 20, max 100)
Required range:
1 <= x <= 100Cursor for pagination (returned from previous request)
Response
Successful operation
List of beneficial owners matching the filter criteria
Show child attributes
Show child attributes
Indicates if more results are available beyond this page
Cursor to retrieve the next page of results (only present if hasMore is true)
Total number of results matching the criteria
Was this page helpful?
⌘I