curl --request PUT \
--url https://api.hevn.finance/dapi/v1/client/kyb \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Hevn-Account: <x-hevn-account>' \
--data '{}'import requests
url = "https://api.hevn.finance/dapi/v1/client/kyb"
payload = {}
headers = {
"X-Hevn-Account": "<x-hevn-account>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'X-Hevn-Account': '<x-hevn-account>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({})
};
fetch('https://api.hevn.finance/dapi/v1/client/kyb', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"ready": true,
"missing": [
"<string>"
],
"people": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "<string>"
}
]
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Provide applicant information
Save information for the business applicant and its related individual applicants in the entity graph. This updates an editable verification submission; it does not send anything for review. People are addressed by a stable key chosen by the caller, so retrying the same body updates the same entities. Omitting people leaves the roster unchanged; sending people: [] removes only caller-managed people. ready: false is a successful draft write and missing names every outstanding field or document.
curl --request PUT \
--url https://api.hevn.finance/dapi/v1/client/kyb \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Hevn-Account: <x-hevn-account>' \
--data '{}'import requests
url = "https://api.hevn.finance/dapi/v1/client/kyb"
payload = {}
headers = {
"X-Hevn-Account": "<x-hevn-account>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'X-Hevn-Account': '<x-hevn-account>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({})
};
fetch('https://api.hevn.finance/dapi/v1/client/kyb', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"ready": true,
"missing": [
"<string>"
],
"people": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "<string>"
}
]
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Authorizations
Platform access token from POST /auth/token, carrying the platform audience and the developer_key_id of the registration that minted it. It acts as your own account; name a client you created with X-Hevn-Account: cl_…. Every request re-checks that the registration is still active and that the caller's source IP is inside its allowlist. A token is valid only against the server that issued it, so sandbox tokens are refused in production and production tokens in the sandbox.
Headers
Your own key for this write, ^[A-Za-z0-9._:-]{1,128}$. A retry with the same key replays the first answer; the same key with a different request is refused.
"po-inv-2026-114"
The selected client account, as a cl_… id.
"cl_9f2c1ab84d7e4f1fa3c65b0e7d9a2c41"
Body
Business-applicant fields to merge into the editable verification submission.
Show child attributes
Show child attributes
Related individual applicants; omit to retain the current roster.
Show child attributes
Show child attributes
Business-level documents previously uploaded through POST /dapi/v1/documents.
Show child attributes
Show child attributes
Was this page helpful?