KYC document uploads
Upload, confirm, list, download, and delete KYC documents through the DALP API and SDK.
KYC document uploads use a two-step file flow. Your integration first requests an upload URL for a draft KYC version, uploads the file to that URL, and then confirms the upload in DALP so the document is attached to the KYC version.
Use this flow when investors or operators need to attach passports, identity cards, proof-of-address files, or other supporting evidence to a KYC submission. The document record belongs to a KYC version, not directly to the user profile. Submit the version only after the required profile fields and documents are in place.
Supported document inputs
A document upload requires:
versionId: the KYC version that receives the documentdocumentType: one ofpassport,drivers_license,national_id,proof_of_address, orotherfileName: the original file name you want stored with the document recordfileSize: file size in bytes, up to 10 MiBmimeType: one ofapplication/pdf,image/jpeg,image/png, orimage/webp
If the latest KYC version is already submitted or under review, create a new draft version before requesting an upload URL.
Upload flow
The upload flow has three calls:
- Request an upload URL with
user.kyc.documents.getUploadUrl. - Upload the file bytes to the returned
uploadUrlusing the returned HTTP method. - Confirm the upload with
user.kyc.documents.confirmUploadand the returnedobjectKey.
Use the returned method and headers for the file upload. Some storage backends include provider-specific headers in the upload URL response.
const upload = await client.user.kyc.documents.getUploadUrl({
params: { versionId: "ver_123" },
body: {
documentType: "passport",
fileName: "passport.pdf",
fileSize: 204800,
mimeType: "application/pdf",
},
});
await fetch(upload.data.uploadUrl, {
method: upload.data.method,
headers: upload.data.headers,
body: passportBytes,
});
const document = await client.user.kyc.documents.confirmUpload({
params: { versionId: "ver_123" },
body: {
objectKey: upload.data.objectKey,
documentType: "passport",
fileName: "passport.pdf",
fileSize: 204800,
mimeType: "application/pdf",
},
});The confirmation call creates the DALP document record. Until confirmation succeeds, the uploaded object should not be treated as part of the KYC version.
List documents
Use user.kyc.documents.list to read documents attached to a KYC version.
Filters can narrow the result set, for example to one document type.
const documents = await client.user.kyc.documents.list({
params: { versionId: "ver_123" },
query: {
filters: [{ id: "documentType", operator: "eq", value: "passport" }],
},
});The response includes paginated document records and metadata, so integrations can build review screens without fetching every document at once.
Download a document
Use user.kyc.documents.getDownloadUrl with the KYC version and document ID.
DALP returns a download URL plus document metadata such as the file name and MIME
type.
const download = await client.user.kyc.documents.getDownloadUrl({
params: {
versionId: "ver_123",
documentId: document.data.id,
},
});Use the returned URL to retrieve the file. Do not persist the URL as a permanent file reference; request a fresh download URL when an operator needs to view or process the document.
Delete a document
Use user.kyc.documents.delete when an uploaded document was attached to the
wrong version, has the wrong type, or needs to be replaced before submission.
await client.user.kyc.documents.delete({
params: {
versionId: "ver_123",
documentId: document.data.id,
},
});Deleting a document removes the DALP document record from that KYC version. It does not approve, reject, or submit the KYC version.
CLI equivalents
The DALP CLI exposes the same flow for operator scripts:
kyc document-upload-urlkyc document-confirm-uploadkyc documentskyc document-download-urlkyc document-delete
Use the CLI commands for back-office scripts and the SDK calls for application integrations. Both paths follow the same model: request an upload URL, upload the file, confirm the object key, then manage the document record on the KYC version.