Upload KYC File
Request a presigned URL and upload a KYC document.
KYC documents are uploaded in two steps:
- Request an upload URL from this endpoint.
PUTthe file directly to that URL.
This pattern keeps document bytes out of our API tier — your file goes straight to cloud storage. The presigned URL carries its own authorisation, so you never need cloud-storage credentials.
Body
fileNamestringbodyrequiredOriginal file name (max 128 chars), e.g. passport.png.
contentTypestringbodyrequiredMIME type. Allowed: image/png, image/jpeg, application/pdf.
typestringbodyrequiredDocument category: IDENTITY_PROOF, SELFIE_PROOF, or ADDRESS_PROOF.
Response
uploadUrlstringTemporary upload URL. PUT your file here (see below). Expires after expiresIn seconds.
fileTokenstringFile reference token. Save this — you'll pass it in the attachments array on POST /kyc/cardholders/manual.
expiresInintegerSeconds the uploadUrl remains valid. Default 600 (10 minutes).
{
"fileName": "passport.png",
"contentType": "image/png",
"type": "IDENTITY_PROOF"
}{
"code": 0,
"message": "SUCCESS",
"data": {
"uploadUrl": "https://s3.amazonaws.com/...&X-Amz-Signature=...",
"fileToken": "kyc_file_8f3a9c2b1d4e5f6a",
"expiresIn": 600
}
}Step 2 — upload the file
curl -X PUT "https://s3.amazonaws.com/...&X-Amz-Signature=..." \
-H "Content-Type: image/png" \
--data-binary @passport.pngThe Content-Type header on the PUT must exactly match the contentType you sent to this endpoint. Do not send your X-API-Key / signature headers — the URL itself is the authorisation.
Notes
- Each
uploadUrlis single-use. Request a new one if it expires. - Each
fileTokenis single-use — consumed when you submit it in a manual KYC request. - Maximum file size: 10 MB.