curl --request PUT \
--url https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"individualInfo": {
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"nin": "12345678901",
"bvn": "22212345678",
"taxId": "22212345678",
"idDocument": {
"type": "passport",
"number": "P123456789",
"issueDate": "2020-01-01",
"expirationDate": "2030-01-01"
},
"address": {
"street": "12 Marina Rd",
"line2": "Suite 4",
"city": "Lagos",
"state": "Lagos",
"postalCode": "101241",
"country": "NG"
},
"employment": {
"status": "self-employed",
"employerName": "Acme Trading Ltd",
"sourceOfWealth": "business_income",
"annualIncome": "50k-100k"
}
}
}
'import requests
url = "https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual"
payload = { "individualInfo": {
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"nin": "12345678901",
"bvn": "22212345678",
"taxId": "22212345678",
"idDocument": {
"type": "passport",
"number": "P123456789",
"issueDate": "2020-01-01",
"expirationDate": "2030-01-01"
},
"address": {
"street": "12 Marina Rd",
"line2": "Suite 4",
"city": "Lagos",
"state": "Lagos",
"postalCode": "101241",
"country": "NG"
},
"employment": {
"status": "self-employed",
"employerName": "Acme Trading Ltd",
"sourceOfWealth": "business_income",
"annualIncome": "50k-100k"
}
} }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
individualInfo: {
phone: '+2348012345678',
dateOfBirth: '1990-05-14',
citizenship: 'NG',
nin: '12345678901',
bvn: '22212345678',
taxId: '22212345678',
idDocument: {
type: 'passport',
number: 'P123456789',
issueDate: '2020-01-01',
expirationDate: '2030-01-01'
},
address: {
street: '12 Marina Rd',
line2: 'Suite 4',
city: 'Lagos',
state: 'Lagos',
postalCode: '101241',
country: 'NG'
},
employment: {
status: 'self-employed',
employerName: 'Acme Trading Ltd',
sourceOfWealth: 'business_income',
annualIncome: '50k-100k'
}
}
})
};
fetch('https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual', 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}/individual",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'individualInfo' => [
'phone' => '+2348012345678',
'dateOfBirth' => '1990-05-14',
'citizenship' => 'NG',
'nin' => '12345678901',
'bvn' => '22212345678',
'taxId' => '22212345678',
'idDocument' => [
'type' => 'passport',
'number' => 'P123456789',
'issueDate' => '2020-01-01',
'expirationDate' => '2030-01-01'
],
'address' => [
'street' => '12 Marina Rd',
'line2' => 'Suite 4',
'city' => 'Lagos',
'state' => 'Lagos',
'postalCode' => '101241',
'country' => 'NG'
],
'employment' => [
'status' => 'self-employed',
'employerName' => 'Acme Trading Ltd',
'sourceOfWealth' => 'business_income',
'annualIncome' => '50k-100k'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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}/individual"
payload := strings.NewReader("{\n \"individualInfo\": {\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"nin\": \"12345678901\",\n \"bvn\": \"22212345678\",\n \"taxId\": \"22212345678\",\n \"idDocument\": {\n \"type\": \"passport\",\n \"number\": \"P123456789\",\n \"issueDate\": \"2020-01-01\",\n \"expirationDate\": \"2030-01-01\"\n },\n \"address\": {\n \"street\": \"12 Marina Rd\",\n \"line2\": \"Suite 4\",\n \"city\": \"Lagos\",\n \"state\": \"Lagos\",\n \"postalCode\": \"101241\",\n \"country\": \"NG\"\n },\n \"employment\": {\n \"status\": \"self-employed\",\n \"employerName\": \"Acme Trading Ltd\",\n \"sourceOfWealth\": \"business_income\",\n \"annualIncome\": \"50k-100k\"\n }\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"individualInfo\": {\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"nin\": \"12345678901\",\n \"bvn\": \"22212345678\",\n \"taxId\": \"22212345678\",\n \"idDocument\": {\n \"type\": \"passport\",\n \"number\": \"P123456789\",\n \"issueDate\": \"2020-01-01\",\n \"expirationDate\": \"2030-01-01\"\n },\n \"address\": {\n \"street\": \"12 Marina Rd\",\n \"line2\": \"Suite 4\",\n \"city\": \"Lagos\",\n \"state\": \"Lagos\",\n \"postalCode\": \"101241\",\n \"country\": \"NG\"\n },\n \"employment\": {\n \"status\": \"self-employed\",\n \"employerName\": \"Acme Trading Ltd\",\n \"sourceOfWealth\": \"business_income\",\n \"annualIncome\": \"50k-100k\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"individualInfo\": {\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"nin\": \"12345678901\",\n \"bvn\": \"22212345678\",\n \"taxId\": \"22212345678\",\n \"idDocument\": {\n \"type\": \"passport\",\n \"number\": \"P123456789\",\n \"issueDate\": \"2020-01-01\",\n \"expirationDate\": \"2030-01-01\"\n },\n \"address\": {\n \"street\": \"12 Marina Rd\",\n \"line2\": \"Suite 4\",\n \"city\": \"Lagos\",\n \"state\": \"Lagos\",\n \"postalCode\": \"101241\",\n \"country\": \"NG\"\n },\n \"employment\": {\n \"status\": \"self-employed\",\n \"employerName\": \"Acme Trading Ltd\",\n \"sourceOfWealth\": \"business_income\",\n \"annualIncome\": \"50k-100k\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"message": "Application updated successfully",
"success": true,
"data": {
"application": {
"id": "f436daf8-146b-4949-bf28-9b36440085a4",
"invite_id": "b6075be0-f1d0-451f-a468-3e94563101d2",
"entity_type": "individual",
"status": "draft",
"current_step": 1,
"is_complete": false,
"business_info": null,
"business_address": null,
"contact_info": null,
"banking_info": null,
"related_persons": null,
"individual_info": {
"firstName": "Jane",
"lastName": "Doe",
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"nin": "12345678901",
"bvn": "22212345678",
"taxId": "22212345678",
"idDocument": {
"type": "passport",
"number": "P123456789",
"issueDate": "2020-01-01",
"expirationDate": "2030-01-01"
},
"address": {
"street": "12 Marina Rd",
"line2": "Suite 4",
"city": "Lagos",
"state": "Lagos",
"postalCode": "101241",
"country": "NG"
},
"employment": {
"status": "self-employed",
"employerName": "Acme Trading Ltd",
"sourceOfWealth": "business_income",
"annualIncome": "50k-100k"
}
},
"change_request_note": null,
"flagged_fields": [],
"created_at": "2026-06-12T23:30:43.040Z",
"updated_at": "2026-06-13T09:02:44.918Z"
},
"documents": []
}
}{
"status": 400,
"message": "Validation failed",
"errors": [
{
"path": [
"individualInfo",
"nin"
],
"message": "Individual info nin: NIN must be 11 digits"
}
]
}{
"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": 404,
"message": "Account not found"
}Update Individual Details
Updates the KYC application of an individual account. Provided fields are merged into the stored data, so you can save progress incrementally. Applications can no longer be edited once submitted or approved.
curl --request PUT \
--url https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"individualInfo": {
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"nin": "12345678901",
"bvn": "22212345678",
"taxId": "22212345678",
"idDocument": {
"type": "passport",
"number": "P123456789",
"issueDate": "2020-01-01",
"expirationDate": "2030-01-01"
},
"address": {
"street": "12 Marina Rd",
"line2": "Suite 4",
"city": "Lagos",
"state": "Lagos",
"postalCode": "101241",
"country": "NG"
},
"employment": {
"status": "self-employed",
"employerName": "Acme Trading Ltd",
"sourceOfWealth": "business_income",
"annualIncome": "50k-100k"
}
}
}
'import requests
url = "https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual"
payload = { "individualInfo": {
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"nin": "12345678901",
"bvn": "22212345678",
"taxId": "22212345678",
"idDocument": {
"type": "passport",
"number": "P123456789",
"issueDate": "2020-01-01",
"expirationDate": "2030-01-01"
},
"address": {
"street": "12 Marina Rd",
"line2": "Suite 4",
"city": "Lagos",
"state": "Lagos",
"postalCode": "101241",
"country": "NG"
},
"employment": {
"status": "self-employed",
"employerName": "Acme Trading Ltd",
"sourceOfWealth": "business_income",
"annualIncome": "50k-100k"
}
} }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
individualInfo: {
phone: '+2348012345678',
dateOfBirth: '1990-05-14',
citizenship: 'NG',
nin: '12345678901',
bvn: '22212345678',
taxId: '22212345678',
idDocument: {
type: 'passport',
number: 'P123456789',
issueDate: '2020-01-01',
expirationDate: '2030-01-01'
},
address: {
street: '12 Marina Rd',
line2: 'Suite 4',
city: 'Lagos',
state: 'Lagos',
postalCode: '101241',
country: 'NG'
},
employment: {
status: 'self-employed',
employerName: 'Acme Trading Ltd',
sourceOfWealth: 'business_income',
annualIncome: '50k-100k'
}
}
})
};
fetch('https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual', 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}/individual",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'individualInfo' => [
'phone' => '+2348012345678',
'dateOfBirth' => '1990-05-14',
'citizenship' => 'NG',
'nin' => '12345678901',
'bvn' => '22212345678',
'taxId' => '22212345678',
'idDocument' => [
'type' => 'passport',
'number' => 'P123456789',
'issueDate' => '2020-01-01',
'expirationDate' => '2030-01-01'
],
'address' => [
'street' => '12 Marina Rd',
'line2' => 'Suite 4',
'city' => 'Lagos',
'state' => 'Lagos',
'postalCode' => '101241',
'country' => 'NG'
],
'employment' => [
'status' => 'self-employed',
'employerName' => 'Acme Trading Ltd',
'sourceOfWealth' => 'business_income',
'annualIncome' => '50k-100k'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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}/individual"
payload := strings.NewReader("{\n \"individualInfo\": {\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"nin\": \"12345678901\",\n \"bvn\": \"22212345678\",\n \"taxId\": \"22212345678\",\n \"idDocument\": {\n \"type\": \"passport\",\n \"number\": \"P123456789\",\n \"issueDate\": \"2020-01-01\",\n \"expirationDate\": \"2030-01-01\"\n },\n \"address\": {\n \"street\": \"12 Marina Rd\",\n \"line2\": \"Suite 4\",\n \"city\": \"Lagos\",\n \"state\": \"Lagos\",\n \"postalCode\": \"101241\",\n \"country\": \"NG\"\n },\n \"employment\": {\n \"status\": \"self-employed\",\n \"employerName\": \"Acme Trading Ltd\",\n \"sourceOfWealth\": \"business_income\",\n \"annualIncome\": \"50k-100k\"\n }\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"individualInfo\": {\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"nin\": \"12345678901\",\n \"bvn\": \"22212345678\",\n \"taxId\": \"22212345678\",\n \"idDocument\": {\n \"type\": \"passport\",\n \"number\": \"P123456789\",\n \"issueDate\": \"2020-01-01\",\n \"expirationDate\": \"2030-01-01\"\n },\n \"address\": {\n \"street\": \"12 Marina Rd\",\n \"line2\": \"Suite 4\",\n \"city\": \"Lagos\",\n \"state\": \"Lagos\",\n \"postalCode\": \"101241\",\n \"country\": \"NG\"\n },\n \"employment\": {\n \"status\": \"self-employed\",\n \"employerName\": \"Acme Trading Ltd\",\n \"sourceOfWealth\": \"business_income\",\n \"annualIncome\": \"50k-100k\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"individualInfo\": {\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"nin\": \"12345678901\",\n \"bvn\": \"22212345678\",\n \"taxId\": \"22212345678\",\n \"idDocument\": {\n \"type\": \"passport\",\n \"number\": \"P123456789\",\n \"issueDate\": \"2020-01-01\",\n \"expirationDate\": \"2030-01-01\"\n },\n \"address\": {\n \"street\": \"12 Marina Rd\",\n \"line2\": \"Suite 4\",\n \"city\": \"Lagos\",\n \"state\": \"Lagos\",\n \"postalCode\": \"101241\",\n \"country\": \"NG\"\n },\n \"employment\": {\n \"status\": \"self-employed\",\n \"employerName\": \"Acme Trading Ltd\",\n \"sourceOfWealth\": \"business_income\",\n \"annualIncome\": \"50k-100k\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"message": "Application updated successfully",
"success": true,
"data": {
"application": {
"id": "f436daf8-146b-4949-bf28-9b36440085a4",
"invite_id": "b6075be0-f1d0-451f-a468-3e94563101d2",
"entity_type": "individual",
"status": "draft",
"current_step": 1,
"is_complete": false,
"business_info": null,
"business_address": null,
"contact_info": null,
"banking_info": null,
"related_persons": null,
"individual_info": {
"firstName": "Jane",
"lastName": "Doe",
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"nin": "12345678901",
"bvn": "22212345678",
"taxId": "22212345678",
"idDocument": {
"type": "passport",
"number": "P123456789",
"issueDate": "2020-01-01",
"expirationDate": "2030-01-01"
},
"address": {
"street": "12 Marina Rd",
"line2": "Suite 4",
"city": "Lagos",
"state": "Lagos",
"postalCode": "101241",
"country": "NG"
},
"employment": {
"status": "self-employed",
"employerName": "Acme Trading Ltd",
"sourceOfWealth": "business_income",
"annualIncome": "50k-100k"
}
},
"change_request_note": null,
"flagged_fields": [],
"created_at": "2026-06-12T23:30:43.040Z",
"updated_at": "2026-06-13T09:02:44.918Z"
},
"documents": []
}
}{
"status": 400,
"message": "Validation failed",
"errors": [
{
"path": [
"individualInfo",
"nin"
],
"message": "Individual info nin: NIN must be 11 digits"
}
]
}{
"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": 404,
"message": "Account not found"
}individualInfo are merged into the stored application, so you can collect personal details, address and employment information across multiple calls.
Mandatory and optional fields
individualInfo is mandatory in this request. It is merged into the
stored application, so you can collect personal details, address and employment across
separate calls — the body must carry the individualInfo key, but it may hold as little
as one field. Mandatory below means required before the application can be
submitted.individualInfo
| Field | Notes | |
|---|---|---|
firstName | Mandatory | |
lastName | Mandatory | |
phone | Mandatory | International format |
dateOfBirth | Mandatory | YYYY-MM-DD |
citizenship | Mandatory | ISO-2 country code |
| Country identifier | Mandatory | One or two fields depending on country — see below |
countryOfResidence | Optional | ISO-2. Decides which identifier applies; falls back to citizenship |
email | Optional | The account already carries its own email, set when you created it |
idDocument | Optional | type, number, issueDate, expirationDate. Metadata only — it does not satisfy identity verification |
individualInfo — government identifier
Which field is mandatory depends on country of residence, falling back to citizenship.
| Country | Field | Format |
|---|---|---|
| Nigeria | nin and bvn | 11 digits each |
| United States | ssn | 9 digits |
| Canada | sin | 9 digits |
| Anywhere else | nationalId | As issued |
individualInfo.address
| Field | Notes | |
|---|---|---|
street | Mandatory | |
city | Mandatory | |
state | Mandatory | State, province or region |
postalCode | Mandatory | |
country | Mandatory | ISO-2 country code |
individualInfo.employment
| Field | Notes | |
|---|---|---|
status | Mandatory | employed, self-employed, retired, unemployed, student |
sourceOfWealth | Mandatory | salary, business_income, investments, inheritance, savings, other |
annualIncome | Mandatory | <25k, 25k-50k, 50k-100k, 100k-250k, 250k-500k, 500k+ |
employerName | Optional | |
sourceOfWealthDescription | Optional | Free text |
Documents
proof_of_address is mandatory before submission — upload via Upload Document.
missingFields and missingDocuments.409 KYC_INCOMPLETE and readyToSubmit stays false.Example Request
curl -X PUT "https://api.rolla.xyz/api/v1/external/accounts/b6075be0-f1d0-451f-a468-3e94563101d2/individual" \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"individualInfo": {
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"nin": "12345678901",
"bvn": "22212345678",
"taxId": "22212345678",
"idDocument": {
"type": "passport",
"number": "P123456789",
"issueDate": "2020-01-01",
"expirationDate": "2030-01-01"
},
"address": {
"street": "12 Marina Rd",
"line2": "Suite 4",
"city": "Lagos",
"state": "Lagos",
"postalCode": "101241",
"country": "NG"
},
"employment": {
"status": "self-employed",
"employerName": "Acme Trading Ltd",
"sourceOfWealth": "business_income",
"annualIncome": "50k-100k"
}
}
}'
Example Response
{
"status": 200,
"message": "Application updated successfully",
"success": true,
"data": {
"application": {
"id": "f436daf8-146b-4949-bf28-9b36440085a4",
"invite_id": "b6075be0-f1d0-451f-a468-3e94563101d2",
"entity_type": "individual",
"status": "draft",
"current_step": 1,
"is_complete": false,
"business_info": null,
"business_address": null,
"contact_info": null,
"banking_info": null,
"related_persons": null,
"individual_info": {
"firstName": "Jane",
"lastName": "Doe",
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"nin": "12345678901",
"bvn": "22212345678",
"taxId": "22212345678",
"idDocument": {
"type": "passport",
"number": "P123456789",
"issueDate": "2020-01-01",
"expirationDate": "2030-01-01"
},
"address": {
"street": "12 Marina Rd",
"line2": "Suite 4",
"city": "Lagos",
"state": "Lagos",
"postalCode": "101241",
"country": "NG"
},
"employment": {
"status": "self-employed",
"employerName": "Acme Trading Ltd",
"sourceOfWealth": "business_income",
"annualIncome": "50k-100k"
}
},
"change_request_note": null,
"flagged_fields": [],
"created_at": "2026-06-12T23:30:43.040Z",
"updated_at": "2026-06-13T09:02:44.918Z"
},
"documents": []
}
}
Country-Specific Identifiers
One of these is required before the application can be submitted. Which one depends on the applicant’scountryOfResidence, falling back to citizenship when no separate residence is recorded.
| Country | Required fields |
|---|---|
| Nigeria | nin (11 digits), bvn (11 digits) |
| United States | ssn (9 digits) |
| Canada | sin (9 digits) |
| Anywhere else | nationalId |
nin of the wrong length is rejected with 400. Send null for the identifiers that don’t apply.
citizenship and countryOfResidence accept a code (NG), a country name (Nigeria) or a demonym (Nigerian), and are stored as the code. A value that can’t be resolved is rejected with 400. address.country is stored exactly as you send it, so send the ISO-2 code there.Fields used for USD account issuance
These optional fields on an individual account flow directly into USD bank account issuance, so you don’t have to pass them per issuance:| Field | Description |
|---|---|
idDocument | { type, number, issueDate, expirationDate }. Dates are YYYY-MM-DD. A verified Sumsub document overrides this when present. |
idDocument.type | passport, drivers_license, or national_id (aliases id_card / residence_permit also map to national ID). |
address.line2 | Secondary address line (apt/suite). Derived from city/state when omitted. |
taxId | nin | bvn | Used as the tax number for the USD provider. For an individual, use the person’s national ID or passport number as the tax ID when no separate tax identifier exists (e.g. Chinese Mainland applicants). |
submitted or approved.Authorizations
Your Rolla API key
Path Parameters
Identifier of an account owned by the same user as your API key's business
Body
The body must carry individualInfo, but it may hold as little as one field: what you send is merged into the stored application.
Personal, address and employment details of an individual account. Every field is optional in a request — what you send is merged into the stored application — but firstName, lastName, phone, dateOfBirth, citizenship, the country identifier, the full address and employment.status / employment.sourceOfWealth / employment.annualIncome must all be present before the application can be submitted.
Show child attributes
Show child attributes