Update Individual Details
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": {
"firstName": "<string>",
"lastName": "<string>",
"email": "jsmith@example.com",
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"countryOfResidence": "<string>",
"taxId": "<string>",
"nin": "<string>",
"bvn": "<string>",
"ssn": "<string>",
"sin": "<string>",
"nationalId": "<string>",
"idDocument": {
"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": {
"employerName": "<string>",
"sourceOfWealthDescription": "<string>"
}
}
}
'import requests
url = "https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual"
payload = { "individualInfo": {
"firstName": "<string>",
"lastName": "<string>",
"email": "jsmith@example.com",
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"countryOfResidence": "<string>",
"taxId": "<string>",
"nin": "<string>",
"bvn": "<string>",
"ssn": "<string>",
"sin": "<string>",
"nationalId": "<string>",
"idDocument": {
"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": {
"employerName": "<string>",
"sourceOfWealthDescription": "<string>"
}
} }
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: {
firstName: '<string>',
lastName: '<string>',
email: 'jsmith@example.com',
phone: '+2348012345678',
dateOfBirth: '1990-05-14',
citizenship: 'NG',
countryOfResidence: '<string>',
taxId: '<string>',
nin: '<string>',
bvn: '<string>',
ssn: '<string>',
sin: '<string>',
nationalId: '<string>',
idDocument: {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: {employerName: '<string>', sourceOfWealthDescription: '<string>'}
}
})
};
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' => [
'firstName' => '<string>',
'lastName' => '<string>',
'email' => 'jsmith@example.com',
'phone' => '+2348012345678',
'dateOfBirth' => '1990-05-14',
'citizenship' => 'NG',
'countryOfResidence' => '<string>',
'taxId' => '<string>',
'nin' => '<string>',
'bvn' => '<string>',
'ssn' => '<string>',
'sin' => '<string>',
'nationalId' => '<string>',
'idDocument' => [
'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' => [
'employerName' => '<string>',
'sourceOfWealthDescription' => '<string>'
]
]
]),
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 \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"countryOfResidence\": \"<string>\",\n \"taxId\": \"<string>\",\n \"nin\": \"<string>\",\n \"bvn\": \"<string>\",\n \"ssn\": \"<string>\",\n \"sin\": \"<string>\",\n \"nationalId\": \"<string>\",\n \"idDocument\": {\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 \"employerName\": \"<string>\",\n \"sourceOfWealthDescription\": \"<string>\"\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 \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"countryOfResidence\": \"<string>\",\n \"taxId\": \"<string>\",\n \"nin\": \"<string>\",\n \"bvn\": \"<string>\",\n \"ssn\": \"<string>\",\n \"sin\": \"<string>\",\n \"nationalId\": \"<string>\",\n \"idDocument\": {\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 \"employerName\": \"<string>\",\n \"sourceOfWealthDescription\": \"<string>\"\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 \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"countryOfResidence\": \"<string>\",\n \"taxId\": \"<string>\",\n \"nin\": \"<string>\",\n \"bvn\": \"<string>\",\n \"ssn\": \"<string>\",\n \"sin\": \"<string>\",\n \"nationalId\": \"<string>\",\n \"idDocument\": {\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 \"employerName\": \"<string>\",\n \"sourceOfWealthDescription\": \"<string>\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Application updated successfully",
"data": {
"application": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "draft",
"current_step": 123,
"is_complete": true,
"business_info": {
"legalName": "Acme Corp Ltd",
"tradingName": "<string>",
"businessType": "Limited Company",
"incorporationDate": "2020-01-15",
"incorporationCountry": "NG",
"registrationNumber": "RC-1234567",
"taxId": "12345678-0001",
"website": "<string>",
"description": "<string>",
"monthlyVolume": "<string>",
"annualRevenue": "<string>",
"primaryFundingSource": "<string>"
},
"business_address": {
"street": "123 Main Street",
"city": "Lagos",
"state": "Lagos",
"postalCode": "100001",
"country": "NG"
},
"contact_info": {
"email": "contact@acmecorp.com",
"phone": "+2341234567890"
},
"related_persons": [
{
"id": "<string>",
"firstName": "John",
"lastName": "Doe",
"roles": [
"Beneficial Owner"
],
"email": "jsmith@example.com",
"phone": "<string>",
"dateOfBirth": "1990-01-15",
"ownershipPercentage": 50,
"currentAddress": {
"street": "123 Main Street",
"city": "Lagos",
"state": "Lagos",
"postalCode": "100001",
"country": "NG"
},
"sourceOfWealthExplanation": "<string>",
"taxId": "440301199209153216",
"bvn": "<string>",
"nin": "<string>"
}
],
"banking_info": {
"bankName": "<string>",
"accountNumber": "<string>",
"routingNumber": "<string>",
"accountType": "checking",
"currency": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"documents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"applicationId": "<string>",
"documentType": "certificate_of_incorporation",
"fileName": "<string>",
"fileUrl": "<string>",
"relatedPersonKey": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
]
}
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}Account Onboarding
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.
PUT
/
accounts
/
{accountId}
/
individual
Update Individual Details
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": {
"firstName": "<string>",
"lastName": "<string>",
"email": "jsmith@example.com",
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"countryOfResidence": "<string>",
"taxId": "<string>",
"nin": "<string>",
"bvn": "<string>",
"ssn": "<string>",
"sin": "<string>",
"nationalId": "<string>",
"idDocument": {
"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": {
"employerName": "<string>",
"sourceOfWealthDescription": "<string>"
}
}
}
'import requests
url = "https://api.rolla.xyz/api/v1/external/accounts/{accountId}/individual"
payload = { "individualInfo": {
"firstName": "<string>",
"lastName": "<string>",
"email": "jsmith@example.com",
"phone": "+2348012345678",
"dateOfBirth": "1990-05-14",
"citizenship": "NG",
"countryOfResidence": "<string>",
"taxId": "<string>",
"nin": "<string>",
"bvn": "<string>",
"ssn": "<string>",
"sin": "<string>",
"nationalId": "<string>",
"idDocument": {
"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": {
"employerName": "<string>",
"sourceOfWealthDescription": "<string>"
}
} }
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: {
firstName: '<string>',
lastName: '<string>',
email: 'jsmith@example.com',
phone: '+2348012345678',
dateOfBirth: '1990-05-14',
citizenship: 'NG',
countryOfResidence: '<string>',
taxId: '<string>',
nin: '<string>',
bvn: '<string>',
ssn: '<string>',
sin: '<string>',
nationalId: '<string>',
idDocument: {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: {employerName: '<string>', sourceOfWealthDescription: '<string>'}
}
})
};
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' => [
'firstName' => '<string>',
'lastName' => '<string>',
'email' => 'jsmith@example.com',
'phone' => '+2348012345678',
'dateOfBirth' => '1990-05-14',
'citizenship' => 'NG',
'countryOfResidence' => '<string>',
'taxId' => '<string>',
'nin' => '<string>',
'bvn' => '<string>',
'ssn' => '<string>',
'sin' => '<string>',
'nationalId' => '<string>',
'idDocument' => [
'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' => [
'employerName' => '<string>',
'sourceOfWealthDescription' => '<string>'
]
]
]),
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 \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"countryOfResidence\": \"<string>\",\n \"taxId\": \"<string>\",\n \"nin\": \"<string>\",\n \"bvn\": \"<string>\",\n \"ssn\": \"<string>\",\n \"sin\": \"<string>\",\n \"nationalId\": \"<string>\",\n \"idDocument\": {\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 \"employerName\": \"<string>\",\n \"sourceOfWealthDescription\": \"<string>\"\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 \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"countryOfResidence\": \"<string>\",\n \"taxId\": \"<string>\",\n \"nin\": \"<string>\",\n \"bvn\": \"<string>\",\n \"ssn\": \"<string>\",\n \"sin\": \"<string>\",\n \"nationalId\": \"<string>\",\n \"idDocument\": {\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 \"employerName\": \"<string>\",\n \"sourceOfWealthDescription\": \"<string>\"\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 \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"+2348012345678\",\n \"dateOfBirth\": \"1990-05-14\",\n \"citizenship\": \"NG\",\n \"countryOfResidence\": \"<string>\",\n \"taxId\": \"<string>\",\n \"nin\": \"<string>\",\n \"bvn\": \"<string>\",\n \"ssn\": \"<string>\",\n \"sin\": \"<string>\",\n \"nationalId\": \"<string>\",\n \"idDocument\": {\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 \"employerName\": \"<string>\",\n \"sourceOfWealthDescription\": \"<string>\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Application updated successfully",
"data": {
"application": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "draft",
"current_step": 123,
"is_complete": true,
"business_info": {
"legalName": "Acme Corp Ltd",
"tradingName": "<string>",
"businessType": "Limited Company",
"incorporationDate": "2020-01-15",
"incorporationCountry": "NG",
"registrationNumber": "RC-1234567",
"taxId": "12345678-0001",
"website": "<string>",
"description": "<string>",
"monthlyVolume": "<string>",
"annualRevenue": "<string>",
"primaryFundingSource": "<string>"
},
"business_address": {
"street": "123 Main Street",
"city": "Lagos",
"state": "Lagos",
"postalCode": "100001",
"country": "NG"
},
"contact_info": {
"email": "contact@acmecorp.com",
"phone": "+2341234567890"
},
"related_persons": [
{
"id": "<string>",
"firstName": "John",
"lastName": "Doe",
"roles": [
"Beneficial Owner"
],
"email": "jsmith@example.com",
"phone": "<string>",
"dateOfBirth": "1990-01-15",
"ownershipPercentage": 50,
"currentAddress": {
"street": "123 Main Street",
"city": "Lagos",
"state": "Lagos",
"postalCode": "100001",
"country": "NG"
},
"sourceOfWealthExplanation": "<string>",
"taxId": "440301199209153216",
"bvn": "<string>",
"nin": "<string>"
}
],
"banking_info": {
"bankName": "<string>",
"accountNumber": "<string>",
"routingNumber": "<string>",
"accountType": "checking",
"currency": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"documents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"applicationId": "<string>",
"documentType": "certificate_of_incorporation",
"fileName": "<string>",
"fileUrl": "<string>",
"relatedPersonKey": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
]
}
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}Updates the KYC application of an individual account. Fields inside
Enum values:
Digits are validated on write — a
individualInfo are merged into the stored application, so you can collect personal details, address and employment information across multiple calls.
Required fields to submit
These must be present before the application can move fromdraft to submitted. Everything else on individualInfo is optional. Check what’s still outstanding at any time with Get Requirements — its readyToSubmit flag and missingFields array list exactly what’s missing.
| Group | Required fields |
|---|---|
individualInfo | firstName, lastName, phone, dateOfBirth, citizenship, plus the identifier for their country (see below) |
individualInfo.address | street, city, state, postalCode, country |
individualInfo.employment | status, sourceOfWealth, annualIncome |
| Documents | proof_of_address — upload via Upload Document |
employment.status—employed,self-employed,retired,unemployed,studentemployment.sourceOfWealth—salary,business_income,investments,inheritance,savings,otheremployment.annualIncome—<25k,25k-50k,50k-100k,100k-250k,250k-500k,500k+
Identity verification blocks submission. The applicant must complete their KYC link — or you must supply an already-verified identity via Submit KYC Reliance — before Submit Application will succeed. Until then it returns
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
{
"success": true,
"message": "Application updated successfully",
"data": {
"application": {
"id": "f436daf8-146b-4949-bf28-9b36440085a4",
"status": "draft",
"entity_type": "individual",
"individual_info": {
"firstName": "Jane",
"lastName": "Doe",
"phone": "+2348012345678",
"citizenship": "NG"
}
},
"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.
Countries are normalized to ISO 3166-1 alpha-2.
citizenship, countryOfResidence and address.country 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.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). |
Applications can no longer be edited once their status is
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
application/json
Personal, address and employment details for an individual account. All fields are optional per request; provided fields are merged into the stored application.
Show child attributes
Show child attributes
⌘I