curl --request PUT \
--url https://api.platform.dakota.xyz/applications/{application_id}/individual-details \
--header 'Content-Type: application/json' \
--header 'X-Application-Token: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"roles": [
"individual"
],
"name": {
"first": "John",
"middle": "Michael",
"last": "Doe"
},
"employment_status": "employed",
"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": "CA",
"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: ['individual'],
name: {first: 'John', middle: 'Michael', last: 'Doe'},
employment_status: 'employed',
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: 'CA',
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}/individual-details', 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}/individual-details"
payload = {
"roles": ["individual"],
"name": {
"first": "John",
"middle": "Michael",
"last": "Doe"
},
"employment_status": "employed",
"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": "CA",
"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}/individual-details"
payload := strings.NewReader("{\n \"roles\": [\n \"individual\"\n ],\n \"name\": {\n \"first\": \"John\",\n \"middle\": \"Michael\",\n \"last\": \"Doe\"\n },\n \"employment_status\": \"employed\",\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\": \"CA\",\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": "CA",
"postal_code": "94105",
"country": "US"
},
"email_address": "john.doe@acme.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"
}
}
}
}{
"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/individual-details",
"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/individual-details",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Invalid or expired token",
"status": 403,
"detail": "Invalid or expired token",
"instance": "https://api.platform.dakota.xyz/applications/example-id/individual-details",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Application not found",
"status": 404,
"detail": "Application not found",
"instance": "https://api.platform.dakota.xyz/applications/example-id/individual-details",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#conflict",
"title": "Application already submitted or completed (cannot modify)",
"status": 409,
"detail": "Application already submitted or completed (cannot modify)",
"instance": "https://api.platform.dakota.xyz/applications/example-id/individual-details",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}Update individual application details
Updates an individual application with personal information including name, date of birth, address, nationality, and identification details. This endpoint is idempotent and can only be called when the application status is āpendingā.
Fields that depend on roles. IndividualRequest is shared with the associated-individual
endpoints of a business application, so some of its fields are required for one role and refused
for another. They cannot be marked required in the schema; the rules are:
| Field | roles: [individual] (this endpoint) | ubo / control_person / applicant |
|---|---|---|
roles | must be exactly [individual] | any of these; individual cannot be combined with them |
employment_status | required | must be omitted, or the request is rejected with 400 |
title | must be omitted, or the request is rejected with 400 | required for ubo and control_person, optional for applicant |
purpose_of_account | required before the application can be submitted; this request succeeds without it | must be omitted; if stored, it blocks submission |
source_of_wealth | required before the application can be submitted; this request succeeds without it | must be omitted; if stored, it blocks submission |
ownership_percentage | not used; omit (this endpoint does not store it) | required for ubo, optional otherwise |
ssn is required for a US person (US nationality or a US address) and refused otherwise. On an
update, leaving it out keeps the SSN already on file when the request describes the same person
(same first name, last name and date of birth). For a US address, address.region must be a
two-letter state or territory code such as CA.
curl --request PUT \
--url https://api.platform.dakota.xyz/applications/{application_id}/individual-details \
--header 'Content-Type: application/json' \
--header 'X-Application-Token: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"roles": [
"individual"
],
"name": {
"first": "John",
"middle": "Michael",
"last": "Doe"
},
"employment_status": "employed",
"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": "CA",
"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: ['individual'],
name: {first: 'John', middle: 'Michael', last: 'Doe'},
employment_status: 'employed',
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: 'CA',
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}/individual-details', 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}/individual-details"
payload = {
"roles": ["individual"],
"name": {
"first": "John",
"middle": "Michael",
"last": "Doe"
},
"employment_status": "employed",
"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": "CA",
"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}/individual-details"
payload := strings.NewReader("{\n \"roles\": [\n \"individual\"\n ],\n \"name\": {\n \"first\": \"John\",\n \"middle\": \"Michael\",\n \"last\": \"Doe\"\n },\n \"employment_status\": \"employed\",\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\": \"CA\",\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": "CA",
"postal_code": "94105",
"country": "US"
},
"email_address": "john.doe@acme.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"
}
}
}
}{
"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/individual-details",
"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/individual-details",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Invalid or expired token",
"status": 403,
"detail": "Invalid or expired token",
"instance": "https://api.platform.dakota.xyz/applications/example-id/individual-details",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Application not found",
"status": 404,
"detail": "Application not found",
"instance": "https://api.platform.dakota.xyz/applications/example-id/individual-details",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#conflict",
"title": "Application already submitted or completed (cannot modify)",
"status": 409,
"detail": "Application already submitted or completed (cannot modify)",
"instance": "https://api.platform.dakota.xyz/applications/example-id/individual-details",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}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 (UUID) to ensure request idempotency on POST, PUT and PATCH requests.
A key is scoped to your client, the HTTP method and the path, and is remembered for 24 hours after a
successful (below 400) response. Repeating the same request (same JSON body, whatever the key order or
whitespace) with the same key within that window returns the original response with
X-Idempotent-Replayed: true instead of executing the request again. Using the same key on the same
endpoint with a different body returns 422 with problem type idempotency-key-reused; the request is
not executed. Error responses (4xx and 5xx) are not remembered, so a request refused for a fixable reason
can be corrected and retried under the same key. Request bodies that are not JSON (for example file
uploads) are not compared.
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"
Body
An individual person (used for both business associated persons and standalone individual applications).
Several fields are required for one role and refused for another, so they cannot be listed in
required. employment_status is required when roles is [individual] and rejected with
400 for any other role; purpose_of_account and source_of_wealth are needed for
[individual] before the application can be submitted. title is required for ubo and
control_person and rejected for individual. See
PUT /applications/{application_id}/individual-details for the full table.
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 when roles is [individual]. Must be omitted for every other
role (ubo, control_person, applicant): a request that sends it for those roles is
rejected with 400.
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). On an update, leave it out to keep the SSN already on file, for example one imported from a share token.
^\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
Individual application details updated successfully
Response containing individual entity data
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, closed "submitted"
The individual entity data
Show child attributes
Show child attributes
Decision outcome (if any)
approved, declined, withdrawn Was this page helpful?

