curl --request POST \
--url https://api-prod.blaaiz.com/api/external/customer/{id}/files \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id_file": "file_123456",
"id_file_back": "file_234567",
"proof_of_address_file": "file_789012",
"liveness_check_file": "file_345678"
}
'import requests
url = "https://api-prod.blaaiz.com/api/external/customer/{id}/files"
payload = {
"id_file": "file_123456",
"id_file_back": "file_234567",
"proof_of_address_file": "file_789012",
"liveness_check_file": "file_345678"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id_file: 'file_123456',
id_file_back: 'file_234567',
proof_of_address_file: 'file_789012',
liveness_check_file: 'file_345678'
})
};
fetch('https://api-prod.blaaiz.com/api/external/customer/{id}/files', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));require 'uri'
require 'net/http'
url = URI("https://api-prod.blaaiz.com/api/external/customer/{id}/files")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id_file\": \"file_123456\",\n \"id_file_back\": \"file_234567\",\n \"proof_of_address_file\": \"file_789012\",\n \"liveness_check_file\": \"file_345678\"\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-prod.blaaiz.com/api/external/customer/{id}/files",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id_file' => 'file_123456',
'id_file_back' => 'file_234567',
'proof_of_address_file' => 'file_789012',
'liveness_check_file' => 'file_345678'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"message": "Customer files uploaded successfully"
}{
"status": false,
"message": "Invalid request parameters"
}{
"status": false,
"message": "Invalid or missing access token"
}Upload files for a customer
Individual customers only. Upload verification files for an individual customer. Use file_id values from the File API presigned upload. Newly uploaded files override previous records. The id_file must be uploaded for verification.
Do not call this endpoint for type=business customers. Business-type customers use the KYB flow — see Business customer KYB. The legacy id_file_path is not consulted by /submit for business customers, so calling this endpoint achieves nothing for them.
The identity document must be a Driver’s License, Passport, or Resident Permit. ID cards (National Identity Cards) are not accepted. No other document types are accepted. All uploaded documents must be clear, legible, and authentic — unclear images will be rejected. Fraudulent or falsified documents will result in the customer being permanently blacklisted from the platform.
IMPORTANT: Verification is not instant. After documents are uploaded, they go through a review process. This typically takes a few minutes, but can take up to 2 hours if the documents require additional screening. Do not escalate before 2 hours — such enquiries will not be attended to. If verification has been pending for 5 hours or more, contact the operations team to expedite. Listen for the customer.verified or customer.rejected webhook to know when the review is complete.
Required scope: customer:write.
curl --request POST \
--url https://api-prod.blaaiz.com/api/external/customer/{id}/files \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id_file": "file_123456",
"id_file_back": "file_234567",
"proof_of_address_file": "file_789012",
"liveness_check_file": "file_345678"
}
'import requests
url = "https://api-prod.blaaiz.com/api/external/customer/{id}/files"
payload = {
"id_file": "file_123456",
"id_file_back": "file_234567",
"proof_of_address_file": "file_789012",
"liveness_check_file": "file_345678"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id_file: 'file_123456',
id_file_back: 'file_234567',
proof_of_address_file: 'file_789012',
liveness_check_file: 'file_345678'
})
};
fetch('https://api-prod.blaaiz.com/api/external/customer/{id}/files', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));require 'uri'
require 'net/http'
url = URI("https://api-prod.blaaiz.com/api/external/customer/{id}/files")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id_file\": \"file_123456\",\n \"id_file_back\": \"file_234567\",\n \"proof_of_address_file\": \"file_789012\",\n \"liveness_check_file\": \"file_345678\"\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-prod.blaaiz.com/api/external/customer/{id}/files",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id_file' => 'file_123456',
'id_file_back' => 'file_234567',
'proof_of_address_file' => 'file_789012',
'liveness_check_file' => 'file_345678'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"message": "Customer files uploaded successfully"
}{
"status": false,
"message": "Invalid request parameters"
}{
"status": false,
"message": "Invalid or missing access token"
}Authorizations
Use your OAuth client credentials to obtain a short-lived Bearer token from POST /oauth/token.
Path Parameters
Customer ID
Body
file_id for the identity document (from File API presigned upload). The identity document must be a Driver's License, Passport, or Resident Permit for individual customers, or a Certificate of Incorporation for business customers. ID cards (National Identity Cards) are not accepted. The document image must be clear and legible — unclear or illegible images will be rejected. IMPORTANT: Including id_file in the request signals that document upload is complete and triggers the verification process. Other files (id_file_back, proof_of_address_file, liveness_check_file) can be uploaded before or alongside id_file, but verification will only begin once id_file is included in the request.
file_id for the back side of the identity document (from File API presigned upload). Use this when the identity document is two-sided (e.g. driver's license). Not required for single-sided documents (e.g. passport, certificate of incorporation).
file_id for proof of address.
file_id for liveness check.
Response
Files uploaded successfully
Was this page helpful?