curl --request PUT \
--url https://api.platform.dakota.xyz/applications/{application_id}/associated-individuals/{individual_id} \
--header 'Content-Type: application/json' \
--header 'X-Application-Token: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"roles": [
"ubo",
"control_person"
],
"name": {
"first": "John",
"middle": "Michael",
"last": "Doe"
},
"title": "ceo",
"employment_status": "employed",
"ownership_percentage": 25.5,
"date_of_birth": "1985-06-15",
"ssn": "123-45-6789",
"nationalities": [
"US"
],
"address": {
"street1": "123 Main St",
"street2": "Apt 4B",
"street3": "Building C",
"city": "San Francisco",
"region": "California",
"postal_code": "94105",
"country": "US"
},
"email_address": "john.doe@acme.com",
"purpose_of_account": [
"investing",
"storage_of_funds_or_digital_assets"
],
"source_of_wealth": [
"employment",
"savings"
]
}
'const options = {
method: 'PUT',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'X-Application-Token': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
roles: ['ubo', 'control_person'],
name: {first: 'John', middle: 'Michael', last: 'Doe'},
title: 'ceo',
employment_status: 'employed',
ownership_percentage: 25.5,
date_of_birth: '1985-06-15',
ssn: '123-45-6789',
nationalities: ['US'],
address: {
street1: '123 Main St',
street2: 'Apt 4B',
street3: 'Building C',
city: 'San Francisco',
region: 'California',
postal_code: '94105',
country: 'US'
},
email_address: 'john.doe@acme.com',
purpose_of_account: ['investing', 'storage_of_funds_or_digital_assets'],
source_of_wealth: ['employment', 'savings']
})
};
fetch('https://api.platform.dakota.xyz/applications/{application_id}/associated-individuals/{individual_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/applications/{application_id}/associated-individuals/{individual_id}"
payload = {
"roles": ["ubo", "control_person"],
"name": {
"first": "John",
"middle": "Michael",
"last": "Doe"
},
"title": "ceo",
"employment_status": "employed",
"ownership_percentage": 25.5,
"date_of_birth": "1985-06-15",
"ssn": "123-45-6789",
"nationalities": ["US"],
"address": {
"street1": "123 Main St",
"street2": "Apt 4B",
"street3": "Building C",
"city": "San Francisco",
"region": "California",
"postal_code": "94105",
"country": "US"
},
"email_address": "john.doe@acme.com",
"purpose_of_account": ["investing", "storage_of_funds_or_digital_assets"],
"source_of_wealth": ["employment", "savings"]
}
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"X-Application-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/applications/{application_id}/associated-individuals/{individual_id}"
payload := strings.NewReader("{\n \"roles\": [\n \"ubo\",\n \"control_person\"\n ],\n \"name\": {\n \"first\": \"John\",\n \"middle\": \"Michael\",\n \"last\": \"Doe\"\n },\n \"title\": \"ceo\",\n \"employment_status\": \"employed\",\n \"ownership_percentage\": 25.5,\n \"date_of_birth\": \"1985-06-15\",\n \"ssn\": \"123-45-6789\",\n \"nationalities\": [\n \"US\"\n ],\n \"address\": {\n \"street1\": \"123 Main St\",\n \"street2\": \"Apt 4B\",\n \"street3\": \"Building C\",\n \"city\": \"San Francisco\",\n \"region\": \"California\",\n \"postal_code\": \"94105\",\n \"country\": \"US\"\n },\n \"email_address\": \"john.doe@acme.com\",\n \"purpose_of_account\": [\n \"investing\",\n \"storage_of_funds_or_digital_assets\"\n ],\n \"source_of_wealth\": [\n \"employment\",\n \"savings\"\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("X-Application-Token", "<api-key>")
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))
}{
"application_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"application_status": "pending",
"application_decision": "approved",
"individual": {
"id": "2hCjxJzUAW6JVRkZqaF9E0KpM3b",
"first_name": "John",
"last_name": "Doe",
"date_of_birth": "1985-06-15",
"nationalities": [
"US"
],
"address": {
"street1": "123 Main St",
"street2": "Apt 4B",
"street3": "Building C",
"city": "San Francisco",
"region": "California",
"postal_code": "94105",
"country": "US"
},
"email_address": "john.doe@example.com",
"phone_number": "+1-555-123-4567",
"employment_status": "employed",
"purpose_of_account": [
"investing",
"storage_of_funds_or_digital_assets"
],
"source_of_wealth": [
"employment",
"savings"
],
"decision": "approved",
"decision_reason": "All verification checks passed",
"decision_by": "admin@dakota.xyz",
"decision_at": 1705315800,
"sumsub_verification": {
"applicant_id": "2hCjxJzUAW6JVRkZqaF9E0KpM3b",
"provider_applicant_id": "65a1b2c3d4e5f6g7h8i9j0k1",
"entity_type": "individual",
"type": "individual",
"decision": "approved",
"decision_reason": "All verification checks passed",
"decision_by": "admin@dakota.xyz",
"decision_at": 1705315800,
"review": {
"review_id": "65a1b2c3d4e5f6g7h8i9j0k1",
"attempt_id": "65a1b2c3d4e5f6g7h8i9j0k2",
"attempt_cnt": 1,
"level_name": "basic-kyc-level",
"create_date": "2024-01-15T10:30:00Z",
"review_date": "2024-01-15T14:45:00Z",
"review_status": "completed",
"review_result": {
"review_answer": "GREEN",
"reject_labels": [
"DOCUMENT_TEMPLATE",
"FRAUDULENT_PATTERNS"
],
"reject_type": "FINAL",
"button_ids": [
"approve"
],
"moderation_comment": "All documents verified successfully",
"client_comment": "Approved for onboarding"
}
},
"risk_labels": {
"device": [
"EMULATOR",
"VPN"
],
"cross_check": [
"FAKE_ID",
"BLACKLIST"
],
"attempt_id": "65a1b2c3d4e5f6g7h8i9j0k2",
"created_at": "2024-01-15T10:30:00Z"
}
},
"roles": [
"ubo",
"control_person"
],
"ownership_percentage": 25.5,
"title": "CEO"
}
}{
"type": "https://docs.dakota.xyz/api-reference/errors#invalid-request",
"title": "Invalid request or validation errors",
"status": 400,
"detail": "Invalid request or validation errors",
"instance": "https://api.platform.dakota.xyz/applications/example-id/associated-individuals/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#authentication-error",
"title": "Unauthorized",
"status": 401,
"detail": "Unauthorized",
"instance": "https://api.platform.dakota.xyz/applications/example-id/associated-individuals/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Application not in pending state or forbidden",
"status": 403,
"detail": "Application not in pending state or forbidden",
"instance": "https://api.platform.dakota.xyz/applications/example-id/associated-individuals/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Application or individual not found",
"status": 404,
"detail": "Application or individual not found",
"instance": "https://api.platform.dakota.xyz/applications/example-id/associated-individuals/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}Update associated individual
Updates an associated individual’s information for a business application (UBO, control person, or applicant). Applicants may call this in ‘pending’, ‘request_for_information’ or ‘compliance_review’; Dakota admins may additionally call it in ‘admin_revision’.
curl --request PUT \
--url https://api.platform.dakota.xyz/applications/{application_id}/associated-individuals/{individual_id} \
--header 'Content-Type: application/json' \
--header 'X-Application-Token: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"roles": [
"ubo",
"control_person"
],
"name": {
"first": "John",
"middle": "Michael",
"last": "Doe"
},
"title": "ceo",
"employment_status": "employed",
"ownership_percentage": 25.5,
"date_of_birth": "1985-06-15",
"ssn": "123-45-6789",
"nationalities": [
"US"
],
"address": {
"street1": "123 Main St",
"street2": "Apt 4B",
"street3": "Building C",
"city": "San Francisco",
"region": "California",
"postal_code": "94105",
"country": "US"
},
"email_address": "john.doe@acme.com",
"purpose_of_account": [
"investing",
"storage_of_funds_or_digital_assets"
],
"source_of_wealth": [
"employment",
"savings"
]
}
'const options = {
method: 'PUT',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'X-Application-Token': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
roles: ['ubo', 'control_person'],
name: {first: 'John', middle: 'Michael', last: 'Doe'},
title: 'ceo',
employment_status: 'employed',
ownership_percentage: 25.5,
date_of_birth: '1985-06-15',
ssn: '123-45-6789',
nationalities: ['US'],
address: {
street1: '123 Main St',
street2: 'Apt 4B',
street3: 'Building C',
city: 'San Francisco',
region: 'California',
postal_code: '94105',
country: 'US'
},
email_address: 'john.doe@acme.com',
purpose_of_account: ['investing', 'storage_of_funds_or_digital_assets'],
source_of_wealth: ['employment', 'savings']
})
};
fetch('https://api.platform.dakota.xyz/applications/{application_id}/associated-individuals/{individual_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/applications/{application_id}/associated-individuals/{individual_id}"
payload = {
"roles": ["ubo", "control_person"],
"name": {
"first": "John",
"middle": "Michael",
"last": "Doe"
},
"title": "ceo",
"employment_status": "employed",
"ownership_percentage": 25.5,
"date_of_birth": "1985-06-15",
"ssn": "123-45-6789",
"nationalities": ["US"],
"address": {
"street1": "123 Main St",
"street2": "Apt 4B",
"street3": "Building C",
"city": "San Francisco",
"region": "California",
"postal_code": "94105",
"country": "US"
},
"email_address": "john.doe@acme.com",
"purpose_of_account": ["investing", "storage_of_funds_or_digital_assets"],
"source_of_wealth": ["employment", "savings"]
}
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"X-Application-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/applications/{application_id}/associated-individuals/{individual_id}"
payload := strings.NewReader("{\n \"roles\": [\n \"ubo\",\n \"control_person\"\n ],\n \"name\": {\n \"first\": \"John\",\n \"middle\": \"Michael\",\n \"last\": \"Doe\"\n },\n \"title\": \"ceo\",\n \"employment_status\": \"employed\",\n \"ownership_percentage\": 25.5,\n \"date_of_birth\": \"1985-06-15\",\n \"ssn\": \"123-45-6789\",\n \"nationalities\": [\n \"US\"\n ],\n \"address\": {\n \"street1\": \"123 Main St\",\n \"street2\": \"Apt 4B\",\n \"street3\": \"Building C\",\n \"city\": \"San Francisco\",\n \"region\": \"California\",\n \"postal_code\": \"94105\",\n \"country\": \"US\"\n },\n \"email_address\": \"john.doe@acme.com\",\n \"purpose_of_account\": [\n \"investing\",\n \"storage_of_funds_or_digital_assets\"\n ],\n \"source_of_wealth\": [\n \"employment\",\n \"savings\"\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("X-Application-Token", "<api-key>")
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))
}{
"application_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"application_status": "pending",
"application_decision": "approved",
"individual": {
"id": "2hCjxJzUAW6JVRkZqaF9E0KpM3b",
"first_name": "John",
"last_name": "Doe",
"date_of_birth": "1985-06-15",
"nationalities": [
"US"
],
"address": {
"street1": "123 Main St",
"street2": "Apt 4B",
"street3": "Building C",
"city": "San Francisco",
"region": "California",
"postal_code": "94105",
"country": "US"
},
"email_address": "john.doe@example.com",
"phone_number": "+1-555-123-4567",
"employment_status": "employed",
"purpose_of_account": [
"investing",
"storage_of_funds_or_digital_assets"
],
"source_of_wealth": [
"employment",
"savings"
],
"decision": "approved",
"decision_reason": "All verification checks passed",
"decision_by": "admin@dakota.xyz",
"decision_at": 1705315800,
"sumsub_verification": {
"applicant_id": "2hCjxJzUAW6JVRkZqaF9E0KpM3b",
"provider_applicant_id": "65a1b2c3d4e5f6g7h8i9j0k1",
"entity_type": "individual",
"type": "individual",
"decision": "approved",
"decision_reason": "All verification checks passed",
"decision_by": "admin@dakota.xyz",
"decision_at": 1705315800,
"review": {
"review_id": "65a1b2c3d4e5f6g7h8i9j0k1",
"attempt_id": "65a1b2c3d4e5f6g7h8i9j0k2",
"attempt_cnt": 1,
"level_name": "basic-kyc-level",
"create_date": "2024-01-15T10:30:00Z",
"review_date": "2024-01-15T14:45:00Z",
"review_status": "completed",
"review_result": {
"review_answer": "GREEN",
"reject_labels": [
"DOCUMENT_TEMPLATE",
"FRAUDULENT_PATTERNS"
],
"reject_type": "FINAL",
"button_ids": [
"approve"
],
"moderation_comment": "All documents verified successfully",
"client_comment": "Approved for onboarding"
}
},
"risk_labels": {
"device": [
"EMULATOR",
"VPN"
],
"cross_check": [
"FAKE_ID",
"BLACKLIST"
],
"attempt_id": "65a1b2c3d4e5f6g7h8i9j0k2",
"created_at": "2024-01-15T10:30:00Z"
}
},
"roles": [
"ubo",
"control_person"
],
"ownership_percentage": 25.5,
"title": "CEO"
}
}{
"type": "https://docs.dakota.xyz/api-reference/errors#invalid-request",
"title": "Invalid request or validation errors",
"status": 400,
"detail": "Invalid request or validation errors",
"instance": "https://api.platform.dakota.xyz/applications/example-id/associated-individuals/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#authentication-error",
"title": "Unauthorized",
"status": 401,
"detail": "Unauthorized",
"instance": "https://api.platform.dakota.xyz/applications/example-id/associated-individuals/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Application not in pending state or forbidden",
"status": 403,
"detail": "Application not in pending state or forbidden",
"instance": "https://api.platform.dakota.xyz/applications/example-id/associated-individuals/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Application or individual not found",
"status": 404,
"detail": "Application or individual not found",
"instance": "https://api.platform.dakota.xyz/applications/example-id/associated-individuals/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}Authorizations
Application-specific token for public URL access. Generated when a customer is created. Provides access to a single application without requiring an API key. Token is valid for 90 days and rate-limited to 250 requests per hour.
Headers
Unique key to ensure request idempotency. If the same key is used within a certain time window, the original response will be returned instead of executing the request again.
Path Parameters
KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
Body
An individual person (used for both business associated persons and standalone individual applications)
Role(s) of this person (individual cannot be combined with other types)
1ubo, control_person, applicant, individual ["ubo", "control_person"]
Full name of a person
Show child attributes
Show child attributes
Date of birth (ISO 8601 format, person must be at least 18 years old)
"1985-06-15"
ISO 3166-1 alpha-2 country codes for nationalities
12["US"]
Standardized physical address format used throughout the Dakota platform for user and entity addresses.
Show child attributes
Show child attributes
Email address (cannot use example or test domains)
"john.doe@acme.com"
Job title (required for UBO/control person, optional for applicant, invalid for individual)
ceo, coo, cfo, cto, cco, director, other_officer "ceo"
Employment status (required only when roles includes 'individual')
employed, self_employed, unemployed, student, retired "employed"
Ownership percentage (required for UBO role, optional for others, must be > 0 and <= 100)
0.01 <= x <= 10025.5
Social Security Number (required for US persons, format: XXX-XX-XXXX)
^\d{3}-\d{2}-\d{4}$"123-45-6789"
Intended purposes for the account (required when roles includes 'individual')
1investing, sending_and_receiving_payments, storage_of_funds_or_digital_assets, making_online_payments, trading_on_other_platforms [
"investing",
"storage_of_funds_or_digital_assets"
]
Sources of wealth (required when roles includes 'individual')
1investments, employment, court_settlement, lottery_winnings, retirement_income, savings, sale_of_assets, family_funds, gambling_winnings, gift, inheritance, insurance_claim, loan, redundancy_severance, benefits ["employment", "savings"]
Response
Associated individual updated successfully
Response containing associated individual entity data with application context
The application ID
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
Current status of the application
pending, submitted, under_review, request_for_information, admin_revision, approved, declined, completed, compliance_review "submitted"
Decision outcome (if any)
approved, declined, withdrawn The associated individual entity data
Show child attributes
Show child attributes
Was this page helpful?

