curl --request POST \
--url https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance \
--header 'Content-Type: multipart/form-data' \
--header 'X-API-Key: <api-key>' \
--form documentType=ID_CARD \
--form document=@example-file \
--form documentBack=@example-file \
--form selfie=@example-file \
--form country=CN \
--form documentNumber=110101199003074567 \
--form issueDate=2020-03-14 \
--form expirationDate=2030-03-13 \
--form passport=@example-fileimport requests
url = "https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance"
files = {
"document": ("example-file", open("example-file", "rb")),
"documentBack": ("example-file", open("example-file", "rb")),
"selfie": ("example-file", open("example-file", "rb")),
"passport": ("example-file", open("example-file", "rb"))
}
payload = {
"documentType": "ID_CARD",
"country": "CN",
"documentNumber": "110101199003074567",
"issueDate": "2020-03-14",
"expirationDate": "2030-03-13"
}
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('documentType', 'ID_CARD');
form.append('document', 'id-front.jpg');
form.append('documentBack', 'id-back.jpg');
form.append('selfie', 'selfie.jpg');
form.append('country', 'CN');
form.append('documentNumber', '110101199003074567');
form.append('issueDate', '2020-03-14');
form.append('expirationDate', '2030-03-13');
form.append('passport', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
options.body = form;
fetch('https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nID_CARD\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-front.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentBack\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-back.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nselfie.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"country\"\r\n\r\nCN\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n110101199003074567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"issueDate\"\r\n\r\n2020-03-14\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"expirationDate\"\r\n\r\n2030-03-13\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"passport\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nID_CARD\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-front.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentBack\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-back.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nselfie.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"country\"\r\n\r\nCN\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n110101199003074567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"issueDate\"\r\n\r\n2020-03-14\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"expirationDate\"\r\n\r\n2030-03-13\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"passport\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance")
.header("X-API-Key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nID_CARD\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-front.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentBack\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-back.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nselfie.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"country\"\r\n\r\nCN\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n110101199003074567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"issueDate\"\r\n\r\n2020-03-14\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"expirationDate\"\r\n\r\n2030-03-13\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"passport\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nID_CARD\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-front.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentBack\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-back.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nselfie.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"country\"\r\n\r\nCN\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n110101199003074567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"issueDate\"\r\n\r\n2020-03-14\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"expirationDate\"\r\n\r\n2030-03-13\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"passport\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"status": 201,
"message": "KYC reliance submitted successfully",
"success": true,
"data": {
"verified": true,
"reviewStatus": "completed",
"reviewAnswer": "GREEN"
}
}{
"status": 400,
"message": "Identity provider rejected the upload: document is unreadable (code 1002)"
}{
"status": 400,
"message": "Validation failed",
"code": "ACCOUNT_RESTRICTED",
"errors": [
{
"path": [
"amount"
],
"message": "amount must be a whole number of smallest currency units (e.g. cents)"
}
]
}{
"status": 400,
"message": "Validation failed",
"code": "ACCOUNT_RESTRICTED",
"errors": [
{
"path": [
"amount"
],
"message": "amount must be a whole number of smallest currency units (e.g. cents)"
}
]
}{
"status": 400,
"message": "Validation failed",
"code": "ACCOUNT_RESTRICTED",
"errors": [
{
"path": [
"amount"
],
"message": "amount must be a whole number of smallest currency units (e.g. cents)"
}
]
}{
"status": 400,
"message": "Validation failed",
"code": "ACCOUNT_RESTRICTED",
"errors": [
{
"path": [
"amount"
],
"message": "amount must be a whole number of smallest currency units (e.g. cents)"
}
]
}Submit KYC Reliance
Submits identity documents the partner has already verified for an INDIVIDUAL account, instead of sending the account holder through Rolla’s hosted liveness check. Upload the holder’s identity document and the selfie or liveness capture collected during your own onboarding as multipart/form-data. A passport, national ID card, driver’s licence or residence permit is accepted — name it with documentType, and send documentBack as well for a two-sided document. The legacy passport file field still works in place of document. Enabled per partner: returns 403 when KYC reliance is not enabled for your business. Individual accounts only; calling it on a business account returns 400. The review is not instant — poll Get Verification Status until it completes.
curl --request POST \
--url https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance \
--header 'Content-Type: multipart/form-data' \
--header 'X-API-Key: <api-key>' \
--form documentType=ID_CARD \
--form document=@example-file \
--form documentBack=@example-file \
--form selfie=@example-file \
--form country=CN \
--form documentNumber=110101199003074567 \
--form issueDate=2020-03-14 \
--form expirationDate=2030-03-13 \
--form passport=@example-fileimport requests
url = "https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance"
files = {
"document": ("example-file", open("example-file", "rb")),
"documentBack": ("example-file", open("example-file", "rb")),
"selfie": ("example-file", open("example-file", "rb")),
"passport": ("example-file", open("example-file", "rb"))
}
payload = {
"documentType": "ID_CARD",
"country": "CN",
"documentNumber": "110101199003074567",
"issueDate": "2020-03-14",
"expirationDate": "2030-03-13"
}
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('documentType', 'ID_CARD');
form.append('document', 'id-front.jpg');
form.append('documentBack', 'id-back.jpg');
form.append('selfie', 'selfie.jpg');
form.append('country', 'CN');
form.append('documentNumber', '110101199003074567');
form.append('issueDate', '2020-03-14');
form.append('expirationDate', '2030-03-13');
form.append('passport', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
options.body = form;
fetch('https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nID_CARD\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-front.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentBack\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-back.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nselfie.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"country\"\r\n\r\nCN\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n110101199003074567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"issueDate\"\r\n\r\n2020-03-14\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"expirationDate\"\r\n\r\n2030-03-13\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"passport\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nID_CARD\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-front.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentBack\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-back.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nselfie.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"country\"\r\n\r\nCN\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n110101199003074567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"issueDate\"\r\n\r\n2020-03-14\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"expirationDate\"\r\n\r\n2030-03-13\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"passport\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance")
.header("X-API-Key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nID_CARD\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-front.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentBack\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-back.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nselfie.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"country\"\r\n\r\nCN\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n110101199003074567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"issueDate\"\r\n\r\n2020-03-14\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"expirationDate\"\r\n\r\n2030-03-13\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"passport\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/accounts/{accountId}/kyc-reliance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nID_CARD\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"document\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-front.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentBack\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nid-back.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"selfie\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nselfie.jpg\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"country\"\r\n\r\nCN\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentNumber\"\r\n\r\n110101199003074567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"issueDate\"\r\n\r\n2020-03-14\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"expirationDate\"\r\n\r\n2030-03-13\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"passport\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"status": 201,
"message": "KYC reliance submitted successfully",
"success": true,
"data": {
"verified": true,
"reviewStatus": "completed",
"reviewAnswer": "GREEN"
}
}{
"status": 400,
"message": "Identity provider rejected the upload: document is unreadable (code 1002)"
}{
"status": 400,
"message": "Validation failed",
"code": "ACCOUNT_RESTRICTED",
"errors": [
{
"path": [
"amount"
],
"message": "amount must be a whole number of smallest currency units (e.g. cents)"
}
]
}{
"status": 400,
"message": "Validation failed",
"code": "ACCOUNT_RESTRICTED",
"errors": [
{
"path": [
"amount"
],
"message": "amount must be a whole number of smallest currency units (e.g. cents)"
}
]
}{
"status": 400,
"message": "Validation failed",
"code": "ACCOUNT_RESTRICTED",
"errors": [
{
"path": [
"amount"
],
"message": "amount must be a whole number of smallest currency units (e.g. cents)"
}
]
}{
"status": 400,
"message": "Validation failed",
"code": "ACCOUNT_RESTRICTED",
"errors": [
{
"path": [
"amount"
],
"message": "amount must be a whole number of smallest currency units (e.g. cents)"
}
]
}documentType. Two-sided documents need both sides.
This is the alternative to Generate Individual KYC Link. Use it when your customers have already completed identity verification on your side and re-verifying them would be redundant.
403. Contact your Rolla representative to have it turned on — enabling it means agreeing on the verification standard your own KYC meets.400. For a business, verify each owner and director with Submit Representative KYC Reliance, or send them a related-person KYC link.Request
Send asmultipart/form-data.
| Part | Type | Required | Description |
|---|---|---|---|
document | file | Yes | The account holder’s identity document, image or PDF. Front side for a two-sided document |
documentBack | file | Conditional | The reverse side. Required for ID_CARD, DRIVER_LICENSE and RESIDENCE_PERMIT |
selfie | file | Yes | The selfie or liveness capture from your own verification. Image or video |
documentType | string | No | One of PASSPORT, INTERNATIONAL_PASSPORT, ID_CARD, DRIVER_LICENSE, RESIDENCE_PERMIT. Defaults to PASSPORT |
country | string | Yes | 2-letter ISO code of the country that issued the document, e.g. CN |
documentNumber | string | No | The document’s number |
issueDate | string | No | YYYY-MM-DD |
expirationDate | string | No | YYYY-MM-DD |
passport still works in place of document, so an integration built against the
earlier passport-only contract keeps running unchanged.Example Request
A mainland Chinese national ID card, which is two-sided:curl -X POST "https://api.rolla.xyz/api/v1/external/accounts/b6075be0-f1d0-451f-a468-3e94563101d2/kyc-reliance" \
-H "X-API-Key: your_api_key_here" \
-F "documentType=ID_CARD" \
-F "document=@/path/to/id-front.jpg" \
-F "documentBack=@/path/to/id-back.jpg" \
-F "selfie=@/path/to/selfie.jpg" \
-F "country=CN" \
-F "documentNumber=110101199003074567" \
-F "issueDate=2020-03-14" \
-F "expirationDate=2030-03-13"
curl -X POST "https://api.rolla.xyz/api/v1/external/accounts/b6075be0-f1d0-451f-a468-3e94563101d2/kyc-reliance" \
-H "X-API-Key: your_api_key_here" \
-F "document=@/path/to/passport.jpg" \
-F "selfie=@/path/to/selfie.jpg" \
-F "country=CN" \
-F "documentNumber=E12345678"
Example Response
{
"status": 201,
"message": "KYC reliance submitted successfully",
"success": true,
"data": {
"verified": true,
"reviewStatus": "completed",
"reviewAnswer": "GREEN"
}
}
Key Behaviours
reviewStatus may come back as pending with reviewAnswer as null. Poll Get Verification Status or watch Get Requirements until identityVerification reads verified.409 KYC_INCOMPLETE until the review completes successfully — reliance replaces the hosted liveness step, not the requirement itself.409.Errors
| Status | Meaning |
|---|---|
400 | A file is missing, a two-sided document arrived without documentBack, documentType is not a recognised value, country is absent or not a 2-letter code, the account is a business, or the identity provider rejected the upload |
403 | KYC reliance is not enabled for your business |
404 | Account not found, or not owned by your API key’s business |
409 | The account holder is already verified, so reliance cannot be resubmitted for them |
{
"status": 400,
"message": "Identity provider rejected the upload: document is unreadable (code 1002)"
}
Authorizations
Your Rolla API key
Path Parameters
Identifier of an individual account owned by the same user as your API key's business
Body
The account holder's identity document, image or PDF. Front side for a two-sided document
Selfie or liveness capture from your own verification. Image or video
2-letter ISO code of the country that issued the document
2"CN"
Reverse side. Required for ID_CARD, DRIVER_LICENSE and RESIDENCE_PERMIT
Which identity document is being sent. Defaults to PASSPORT
PASSPORT, INTERNATIONAL_PASSPORT, ID_CARD, DRIVER_LICENSE, RESIDENCE_PERMIT "ID_CARD"
The document's number
1 - 64"110101199003074567"
YYYY-MM-DD
"2020-03-14"
YYYY-MM-DD
"2030-03-13"
Deprecated alias for document, kept so existing integrations keep working