curl --request POST \
--url https://sg.sandbox.api.reap.global/users/{id}/application/documents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--header 'Reap-Version: <reap-version>' \
--form documentType=IDENTITY \
--form 'files=<string>' \
--form files.0='@example-file' \
--form files.1='@example-file' \
--form files.2='@example-file' \
--form files.3='@example-file' \
--form files.4='@example-file' \
--form files.5='@example-file' \
--form files.6='@example-file' \
--form files.7='@example-file' \
--form files.8='@example-file' \
--form files.9.items.0='@example-file' \
--form files.9.items.1='@example-file' \
--form files.9.items.2='@example-file' \
--form files.9.items.3='@example-file' \
--form files.9.items.4='@example-file' \
--form files.9.items.5='@example-file' \
--form files.9.items.6='@example-file' \
--form files.9.items.7='@example-file' \
--form files.9.items.8='@example-file'const form = new FormData();
form.append('documentType', 'IDENTITY');
form.append('files', '<string>');
form.append('files.0', '{
"fileName": "example-file"
}');
form.append('files.1', '{
"fileName": "example-file"
}');
form.append('files.2', '{
"fileName": "example-file"
}');
form.append('files.3', '{
"fileName": "example-file"
}');
form.append('files.4', '{
"fileName": "example-file"
}');
form.append('files.5', '{
"fileName": "example-file"
}');
form.append('files.6', '{
"fileName": "example-file"
}');
form.append('files.7', '{
"fileName": "example-file"
}');
form.append('files.8', '{
"fileName": "example-file"
}');
form.append('files.9.items.0', '{
"fileName": "example-file"
}');
form.append('files.9.items.1', '{
"fileName": "example-file"
}');
form.append('files.9.items.2', '{
"fileName": "example-file"
}');
form.append('files.9.items.3', '{
"fileName": "example-file"
}');
form.append('files.9.items.4', '{
"fileName": "example-file"
}');
form.append('files.9.items.5', '{
"fileName": "example-file"
}');
form.append('files.9.items.6', '{
"fileName": "example-file"
}');
form.append('files.9.items.7', '{
"fileName": "example-file"
}');
form.append('files.9.items.8', '{
"fileName": "example-file"
}');
const options = {
method: 'POST',
headers: {'Reap-Version': '<reap-version>', Authorization: 'Bearer <token>'}
};
options.body = form;
fetch('https://sg.sandbox.api.reap.global/users/{id}/application/documents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sg.sandbox.api.reap.global/users/{id}/application/documents"
files = {
"files.0": ("example-file", open("example-file", "rb")),
"files.1": ("example-file", open("example-file", "rb")),
"files.2": ("example-file", open("example-file", "rb")),
"files.3": ("example-file", open("example-file", "rb")),
"files.4": ("example-file", open("example-file", "rb")),
"files.5": ("example-file", open("example-file", "rb")),
"files.6": ("example-file", open("example-file", "rb")),
"files.7": ("example-file", open("example-file", "rb")),
"files.8": ("example-file", open("example-file", "rb")),
"files.9.items.0": ("example-file", open("example-file", "rb")),
"files.9.items.1": ("example-file", open("example-file", "rb")),
"files.9.items.2": ("example-file", open("example-file", "rb")),
"files.9.items.3": ("example-file", open("example-file", "rb")),
"files.9.items.4": ("example-file", open("example-file", "rb")),
"files.9.items.5": ("example-file", open("example-file", "rb")),
"files.9.items.6": ("example-file", open("example-file", "rb")),
"files.9.items.7": ("example-file", open("example-file", "rb")),
"files.9.items.8": ("example-file", open("example-file", "rb"))
}
payload = {
"documentType": "IDENTITY",
"files": "<string>"
}
headers = {
"Reap-Version": "<reap-version>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text){
"status": "NOT_STARTED",
"nextAction": {
"type": "PROVIDER_SDK",
"provider": "SUMSUB",
"sdkToken": "_act-sbx-abc123-xyz789"
}
}{
"error": {
"code": "INVALID_APPLICATION_STATUS",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "VERIFICATION_METHOD_NOT_ENABLED",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "USER_NOT_FOUND",
"message": "<string>",
"detail": {}
}
}Upload application documents
Uploads one supporting document type for a user whose application is awaiting documents. Set documentType to one of the pending documents from the advance response’s nextAction, and attach its file(s) as files (repeat for multi-page or front/back). Upload one type per request, across as many requests as there are pending documents; each response reports the remaining documents in nextAction. When the last required document is received the application advances to review.
curl --request POST \
--url https://sg.sandbox.api.reap.global/users/{id}/application/documents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--header 'Reap-Version: <reap-version>' \
--form documentType=IDENTITY \
--form 'files=<string>' \
--form files.0='@example-file' \
--form files.1='@example-file' \
--form files.2='@example-file' \
--form files.3='@example-file' \
--form files.4='@example-file' \
--form files.5='@example-file' \
--form files.6='@example-file' \
--form files.7='@example-file' \
--form files.8='@example-file' \
--form files.9.items.0='@example-file' \
--form files.9.items.1='@example-file' \
--form files.9.items.2='@example-file' \
--form files.9.items.3='@example-file' \
--form files.9.items.4='@example-file' \
--form files.9.items.5='@example-file' \
--form files.9.items.6='@example-file' \
--form files.9.items.7='@example-file' \
--form files.9.items.8='@example-file'const form = new FormData();
form.append('documentType', 'IDENTITY');
form.append('files', '<string>');
form.append('files.0', '{
"fileName": "example-file"
}');
form.append('files.1', '{
"fileName": "example-file"
}');
form.append('files.2', '{
"fileName": "example-file"
}');
form.append('files.3', '{
"fileName": "example-file"
}');
form.append('files.4', '{
"fileName": "example-file"
}');
form.append('files.5', '{
"fileName": "example-file"
}');
form.append('files.6', '{
"fileName": "example-file"
}');
form.append('files.7', '{
"fileName": "example-file"
}');
form.append('files.8', '{
"fileName": "example-file"
}');
form.append('files.9.items.0', '{
"fileName": "example-file"
}');
form.append('files.9.items.1', '{
"fileName": "example-file"
}');
form.append('files.9.items.2', '{
"fileName": "example-file"
}');
form.append('files.9.items.3', '{
"fileName": "example-file"
}');
form.append('files.9.items.4', '{
"fileName": "example-file"
}');
form.append('files.9.items.5', '{
"fileName": "example-file"
}');
form.append('files.9.items.6', '{
"fileName": "example-file"
}');
form.append('files.9.items.7', '{
"fileName": "example-file"
}');
form.append('files.9.items.8', '{
"fileName": "example-file"
}');
const options = {
method: 'POST',
headers: {'Reap-Version': '<reap-version>', Authorization: 'Bearer <token>'}
};
options.body = form;
fetch('https://sg.sandbox.api.reap.global/users/{id}/application/documents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sg.sandbox.api.reap.global/users/{id}/application/documents"
files = {
"files.0": ("example-file", open("example-file", "rb")),
"files.1": ("example-file", open("example-file", "rb")),
"files.2": ("example-file", open("example-file", "rb")),
"files.3": ("example-file", open("example-file", "rb")),
"files.4": ("example-file", open("example-file", "rb")),
"files.5": ("example-file", open("example-file", "rb")),
"files.6": ("example-file", open("example-file", "rb")),
"files.7": ("example-file", open("example-file", "rb")),
"files.8": ("example-file", open("example-file", "rb")),
"files.9.items.0": ("example-file", open("example-file", "rb")),
"files.9.items.1": ("example-file", open("example-file", "rb")),
"files.9.items.2": ("example-file", open("example-file", "rb")),
"files.9.items.3": ("example-file", open("example-file", "rb")),
"files.9.items.4": ("example-file", open("example-file", "rb")),
"files.9.items.5": ("example-file", open("example-file", "rb")),
"files.9.items.6": ("example-file", open("example-file", "rb")),
"files.9.items.7": ("example-file", open("example-file", "rb")),
"files.9.items.8": ("example-file", open("example-file", "rb"))
}
payload = {
"documentType": "IDENTITY",
"files": "<string>"
}
headers = {
"Reap-Version": "<reap-version>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text){
"status": "NOT_STARTED",
"nextAction": {
"type": "PROVIDER_SDK",
"provider": "SUMSUB",
"sdkToken": "_act-sbx-abc123-xyz789"
}
}{
"error": {
"code": "INVALID_APPLICATION_STATUS",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "VERIFICATION_METHOD_NOT_ENABLED",
"message": "<string>",
"detail": {}
}
}{
"error": {
"code": "USER_NOT_FOUND",
"message": "<string>",
"detail": {}
}
}Authorizations
API key as Bearer token
Headers
API version (YYYY-MM-DD)
2025-02-14 "2025-02-14"
Path Parameters
User ID
Body
Multipart form uploading one supporting document type
Which supporting document this upload is for (one type per request; from the pending documents in nextAction)
IDENTITY, PROOF_OF_ADDRESS, CURP "IDENTITY"
The document file(s) for this type. Send a single file, or repeat the files field for multi-page or front/back (max 15).
10485760Response
Application state after uploading documents
Current KYC application status
NOT_STARTED, AWAITING_DOCUMENTS, IN_REVIEW, APPROVED, REJECTED, RETRY_REQUIRED "NOT_STARTED"
Action the client must take next, or null if none remains
- ProviderSdk
- DocumentUpload
Show child attributes
Show child attributes