Update customer
curl --request PATCH \
--url https://api.platnova.com/v1/customers/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"first_name": "Jane",
"phone": "+2348012345678",
"documents": [
{
"id_type": "passport",
"id_number": "A12345678",
"front_doc": "<base64-encoded image>"
}
],
"proof_of_funds": {
"employment_status": "employed",
"occupation": "151252",
"primary_purpose": "payments_to_friends_or_family_abroad",
"source_of_funds": "salary",
"expected_monthly_pay": "0_4999"
}
}
'import requests
url = "https://api.platnova.com/v1/customers/{id}"
payload = {
"first_name": "Jane",
"phone": "+2348012345678",
"documents": [
{
"id_type": "passport",
"id_number": "A12345678",
"front_doc": "<base64-encoded image>"
}
],
"proof_of_funds": {
"employment_status": "employed",
"occupation": "151252",
"primary_purpose": "payments_to_friends_or_family_abroad",
"source_of_funds": "salary",
"expected_monthly_pay": "0_4999"
}
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: 'Jane',
phone: '+2348012345678',
documents: [
{
id_type: 'passport',
id_number: 'A12345678',
front_doc: '<base64-encoded image>'
}
],
proof_of_funds: {
employment_status: 'employed',
occupation: '151252',
primary_purpose: 'payments_to_friends_or_family_abroad',
source_of_funds: 'salary',
expected_monthly_pay: '0_4999'
}
})
};
fetch('https://api.platnova.com/v1/customers/{id}', 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.platnova.com/v1/customers/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'first_name' => 'Jane',
'phone' => '+2348012345678',
'documents' => [
[
'id_type' => 'passport',
'id_number' => 'A12345678',
'front_doc' => '<base64-encoded image>'
]
],
'proof_of_funds' => [
'employment_status' => 'employed',
'occupation' => '151252',
'primary_purpose' => 'payments_to_friends_or_family_abroad',
'source_of_funds' => 'salary',
'expected_monthly_pay' => '0_4999'
]
]),
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.platnova.com/v1/customers/{id}"
payload := strings.NewReader("{\n \"first_name\": \"Jane\",\n \"phone\": \"+2348012345678\",\n \"documents\": [\n {\n \"id_type\": \"passport\",\n \"id_number\": \"A12345678\",\n \"front_doc\": \"<base64-encoded image>\"\n }\n ],\n \"proof_of_funds\": {\n \"employment_status\": \"employed\",\n \"occupation\": \"151252\",\n \"primary_purpose\": \"payments_to_friends_or_family_abroad\",\n \"source_of_funds\": \"salary\",\n \"expected_monthly_pay\": \"0_4999\"\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.platnova.com/v1/customers/{id}")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"Jane\",\n \"phone\": \"+2348012345678\",\n \"documents\": [\n {\n \"id_type\": \"passport\",\n \"id_number\": \"A12345678\",\n \"front_doc\": \"<base64-encoded image>\"\n }\n ],\n \"proof_of_funds\": {\n \"employment_status\": \"employed\",\n \"occupation\": \"151252\",\n \"primary_purpose\": \"payments_to_friends_or_family_abroad\",\n \"source_of_funds\": \"salary\",\n \"expected_monthly_pay\": \"0_4999\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.platnova.com/v1/customers/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"Jane\",\n \"phone\": \"+2348012345678\",\n \"documents\": [\n {\n \"id_type\": \"passport\",\n \"id_number\": \"A12345678\",\n \"front_doc\": \"<base64-encoded image>\"\n }\n ],\n \"proof_of_funds\": {\n \"employment_status\": \"employed\",\n \"occupation\": \"151252\",\n \"primary_purpose\": \"payments_to_friends_or_family_abroad\",\n \"source_of_funds\": \"salary\",\n \"expected_monthly_pay\": \"0_4999\"\n }\n}"
response = http.request(request)
puts response.read_body{
"status": true,
"data": {},
"error": [
"<unknown>"
],
"message": "<string>"
}{
"status": false,
"data": {},
"error": [],
"message": "customer was not found"
}{
"error": {}
}Customers
Update Customer
Partially update a customer. All body fields are optional; include only fields you want to change. Use documents and proof_of_funds for KYC updates.
PATCH
/
v1
/
customers
/
{id}
Update customer
curl --request PATCH \
--url https://api.platnova.com/v1/customers/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"first_name": "Jane",
"phone": "+2348012345678",
"documents": [
{
"id_type": "passport",
"id_number": "A12345678",
"front_doc": "<base64-encoded image>"
}
],
"proof_of_funds": {
"employment_status": "employed",
"occupation": "151252",
"primary_purpose": "payments_to_friends_or_family_abroad",
"source_of_funds": "salary",
"expected_monthly_pay": "0_4999"
}
}
'import requests
url = "https://api.platnova.com/v1/customers/{id}"
payload = {
"first_name": "Jane",
"phone": "+2348012345678",
"documents": [
{
"id_type": "passport",
"id_number": "A12345678",
"front_doc": "<base64-encoded image>"
}
],
"proof_of_funds": {
"employment_status": "employed",
"occupation": "151252",
"primary_purpose": "payments_to_friends_or_family_abroad",
"source_of_funds": "salary",
"expected_monthly_pay": "0_4999"
}
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: 'Jane',
phone: '+2348012345678',
documents: [
{
id_type: 'passport',
id_number: 'A12345678',
front_doc: '<base64-encoded image>'
}
],
proof_of_funds: {
employment_status: 'employed',
occupation: '151252',
primary_purpose: 'payments_to_friends_or_family_abroad',
source_of_funds: 'salary',
expected_monthly_pay: '0_4999'
}
})
};
fetch('https://api.platnova.com/v1/customers/{id}', 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.platnova.com/v1/customers/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'first_name' => 'Jane',
'phone' => '+2348012345678',
'documents' => [
[
'id_type' => 'passport',
'id_number' => 'A12345678',
'front_doc' => '<base64-encoded image>'
]
],
'proof_of_funds' => [
'employment_status' => 'employed',
'occupation' => '151252',
'primary_purpose' => 'payments_to_friends_or_family_abroad',
'source_of_funds' => 'salary',
'expected_monthly_pay' => '0_4999'
]
]),
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.platnova.com/v1/customers/{id}"
payload := strings.NewReader("{\n \"first_name\": \"Jane\",\n \"phone\": \"+2348012345678\",\n \"documents\": [\n {\n \"id_type\": \"passport\",\n \"id_number\": \"A12345678\",\n \"front_doc\": \"<base64-encoded image>\"\n }\n ],\n \"proof_of_funds\": {\n \"employment_status\": \"employed\",\n \"occupation\": \"151252\",\n \"primary_purpose\": \"payments_to_friends_or_family_abroad\",\n \"source_of_funds\": \"salary\",\n \"expected_monthly_pay\": \"0_4999\"\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.platnova.com/v1/customers/{id}")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"Jane\",\n \"phone\": \"+2348012345678\",\n \"documents\": [\n {\n \"id_type\": \"passport\",\n \"id_number\": \"A12345678\",\n \"front_doc\": \"<base64-encoded image>\"\n }\n ],\n \"proof_of_funds\": {\n \"employment_status\": \"employed\",\n \"occupation\": \"151252\",\n \"primary_purpose\": \"payments_to_friends_or_family_abroad\",\n \"source_of_funds\": \"salary\",\n \"expected_monthly_pay\": \"0_4999\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.platnova.com/v1/customers/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"Jane\",\n \"phone\": \"+2348012345678\",\n \"documents\": [\n {\n \"id_type\": \"passport\",\n \"id_number\": \"A12345678\",\n \"front_doc\": \"<base64-encoded image>\"\n }\n ],\n \"proof_of_funds\": {\n \"employment_status\": \"employed\",\n \"occupation\": \"151252\",\n \"primary_purpose\": \"payments_to_friends_or_family_abroad\",\n \"source_of_funds\": \"salary\",\n \"expected_monthly_pay\": \"0_4999\"\n }\n}"
response = http.request(request)
puts response.read_body{
"status": true,
"data": {},
"error": [
"<unknown>"
],
"message": "<string>"
}{
"status": false,
"data": {},
"error": [],
"message": "customer was not found"
}{
"error": {}
}Overview
Update an existing customer with a partial JSON body. Only include fields you want to change. Typical uses include correcting profile data, refreshing identity documents, and submitting proof-of-funds details.Request body
All fields are optional:| Field | Description |
|---|---|
date_of_birth | YYYY-MM-DD |
address | Same shape as on create customer; address.document is a base64 string when provided |
first_name, last_name, phone, gender, country_code | Profile fields |
documents | Array of document objects (see below) |
proof_of_funds | Employment and source-of-funds fields |
documents items
Each element uses the same shape as on create (see Identity documents):
id_type— One of:passport,resident_id,drivers_license,national_id,voters_card,nin,bvn, or a tax ID type (see Tax ID document)id_number— Value on the documentfront_doc— Base64-encoded image of the frontback_doc— Base64-encoded image of the back when needed
passport, resident_id, drivers_license, national_id, voters_card, and nin, you need at most front_doc (base64); back_doc is not required for those types.
proof_of_funds
Optional object with: employment_status, occupation, primary_purpose, source_of_funds, expected_monthly_pay.
Use the Field values from the reference tables in your JSON (not free-text labels). See Proof of funds options.Authorizations
API key for authentication.
Path Parameters
The ID of the customer to retrieve.
Body
application/json
Partial update payload. All properties are optional.
Date of birth (YYYY-MM-DD)
Show child attributes
Show child attributes
Customer first name
Customer last name
Customer phone number
Customer gender
ISO country code
Identity documents to attach or replace (see DocumentInput)
Show child attributes
Show child attributes
Proof-of-funds / source-of-wealth fields. Use allowed field values from Proof of funds options in the Customers guides.
Show child attributes
Show child attributes
⌘I

