GET /dapi/v1/client, then verify a business client with PUT /dapi/v1/client/kyb.
Both routes return the
cl_… id. Send it as X-Hevn-Account to read the client with GET /dapi/v1/client.
POST /dapi/v1/clients/link 200
POST /dapi/v1/clients has no wallet at HEVN, so it has no baseSmartWallet.
A linked individual has no KYB progress. Poll verifiedAt after they verify their identity. POST /dapi/v1/clients creates companies.
Which routes take X-Hevn-Account is covered in Acting as a client. For who signs a client’s payouts, see Who can spend.
Statuses
A linked client is usually
ready when you exchange the code. HEVN reviews a POST /dapi/v1/clients request unless your integrator agreement waives the review, so a created client can stay provisioning for longer. Until its account exists, routes that take the new id, other than GET /dapi/v1/client, return 404 account_not_found. GET /dapi/v1/client returns the client in each status, and an unknown id returns 404 client_not_found. poll_until is defined in HTTP client.
List clients
GET /dapi/v1/clients lists your clients: the accounts linked to you, the clients you created and the creation requests still open. Use it to recover a lost id. Filters are on List clients, and paging follows Pagination.
Update phone and address
PATCH /dapi/v1/client writes the phone and the postal address. The fields are on Update a client profile.
409 profile_locked with details.fields.
Phone numbers
A company’s virtual account requires a phone number. Either phone satisfies the check:company.phone in the KYB document, or the account phone written with PATCH /dapi/v1/client.
Write the document
A business client is verified from one KYB document that you write, submit for review and correct on request. Write it withPUT /dapi/v1/client/kyb until the response returns ready: true. Then call POST /dapi/v1/client/kyb/complete.
The KYB and document routes are client-scoped, so send X-Hevn-Account. The flow is the same for a linked business and for a created company. An individual client verifies in the sign-in window.
The document has the sections company, people[] and documents[]. Field types, enum values and slot names are on Provide applicant information.
1
Write the company
The example has the required fields.
company.legalName must be unique across HEVN. A US taxId in a format other than XX-XXXXXXX counts as missing.Also send the optional fields you hold, such as identityDocuments, operatingCountries, highRiskActivities, hasPep, isRegulated and the per-method volume split. Optional fields are not listed in missing[], but a reviewer often asks for them in an RFI.Response 200
ready: false means the write succeeded. Read each missing[] entry as described in Missing paths.2
Add the people
people[] lists the client’s owners, directors and signers. Give each person a stable key and at least one role: ownershipPercentage, hasControl, isDirector or isSigner.Response 200
people replaces the roster you created, so a person you omit is removed. "people": [] removes them all. For a holding company in the chain, see Complex ownership.3
Upload the files
Upload each file with Responses and limits are on Upload a document. File each returned An unknown slot returns
POST /dapi/v1/documents, base64-encoded in content, with the target slot in slot.id into a slot on the next PUT. Company files go in the top-level documents[] and a person’s files in that person’s documents[].422 document_type_unsupported with details.field. An uploadId of another client returns 404 document_not_found with details.uploadId.Required slots:A reviewer can request any other slot in an RFI.
4
Complete the submission
Call Replays and refusals are on Complete the verification submission.
POST /dapi/v1/client/kyb/complete with no body. It is the only call that starts a review.Response 201
Missing paths
Eachmissing[] entry is a path into the document. Set the value at that path and write again.
The index in
people[0] is the position in document.people[] of GET /dapi/v1/client/kyb. It can differ from the order you sent.
Complex ownership
The flat document describes one company held by people. Setcompany.hasIntermediateEntityOwnership to true when a holding company stands in the chain.
Write such a chain through HEVN’s entity-graph routes. They are outside this API and available on request.
A flat write leaves entities added through those routes in place. A write that would remove one returns 409 kyb_roster_conflict with details.entityIds.
Track the application
GET /dapi/v1/client/kyb returns readiness, the application if one is filed, and the stored document. Poll it as described in polling.
In the sandbox, set the status with
POST /dapi/v1/sandbox/kyb/status.
Answer an RFI
- Read
application.comment. - Correct the document with
PUT /dapi/v1/client/kyb. To replace a file, file a new upload into the same slot. To correct a person, send that person’skeyand the new value. - Call
POST /dapi/v1/client/kyb/completeagain.attemptNoincrements,kybStatusreturns topending, and the next review replacescomment.
comment names the file and the value. Upload a legible copy, or write the value onto the upload.
Fill a document’s fields by hand
CallPUT /dapi/v1/documents/{documentId}/content with the upload id from the document block of GET /dapi/v1/client/kyb. Company uploads are in documents[] and a person’s are in people[].documents[].