Update customer
curl --request PUT \
--url https://qa-api.endl.xyz/api/v0/customer/{userId} \
--header 'API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"firstName": "Janet",
"phone": "+971511111111",
"questionnaire": {
"sections": {
"profileDetails": {
"items": {
"occupation": {
"value": "13-2011"
}
}
}
}
}
}
'import requests
url = "https://qa-api.endl.xyz/api/v0/customer/{userId}"
payload = {
"firstName": "Janet",
"phone": "+971511111111",
"questionnaire": { "sections": { "profileDetails": { "items": { "occupation": { "value": "13-2011" } } } } }
}
headers = {
"API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
firstName: 'Janet',
phone: '+971511111111',
questionnaire: {sections: {profileDetails: {items: {occupation: {value: '13-2011'}}}}}
})
};
fetch('https://qa-api.endl.xyz/api/v0/customer/{userId}', 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://qa-api.endl.xyz/api/v0/customer/{userId}",
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([
'firstName' => 'Janet',
'phone' => '+971511111111',
'questionnaire' => [
'sections' => [
'profileDetails' => [
'items' => [
'occupation' => [
'value' => '13-2011'
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"API-KEY: <api-key>",
"Content-Type: application/json"
],
]);
$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://qa-api.endl.xyz/api/v0/customer/{userId}"
payload := strings.NewReader("{\n \"firstName\": \"Janet\",\n \"phone\": \"+971511111111\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"13-2011\"\n }\n }\n }\n }\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("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://qa-api.endl.xyz/api/v0/customer/{userId}")
.header("API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"firstName\": \"Janet\",\n \"phone\": \"+971511111111\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"13-2011\"\n }\n }\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://qa-api.endl.xyz/api/v0/customer/{userId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"firstName\": \"Janet\",\n \"phone\": \"+971511111111\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"13-2011\"\n }\n }\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"userType": "INDIVIDUAL",
"status": "INITIATED",
"sumsubApplicantId": "<string>",
"email": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"country": "<string>",
"dateOfBirth": "<string>",
"active": true,
"deleted": true,
"documents": [
{}
],
"questionnaire": {}
}{
"errors": [
{
"code": "400",
"message": "firstName is required",
"name": "PartnerOnboardingCreate failed to process"
},
{
"code": "400",
"message": "country must be an ISO 3166-1 alpha-3 code (e.g. ARE)",
"name": "PartnerOnboardingCreate failed to process"
}
]
}{
"code": "401",
"message": "Authentication Failed!",
"name": "PartnerOnboarding failed to process"
}{
"code": "403",
"message": "Onboarding is not permitted for this country",
"name": "PartnerOnboardingCreate failed to process"
}{
"code": "404",
"message": "Not found",
"name": "PartnerOnboardingGet failed to process"
}{
"code": "409",
"message": "This customer's KYC is completed; verified identity fields can no longer be changed",
"name": "PartnerOnboardingUpdate failed to process"
}Update customer
Every field is optional — only what you send is changed. The questionnaire can be replaced. Email is immutable.
Once the customer is COMPLETED, the identity fields verified by the provider are locked and changing any of them returns 409.
PUT
/
api
/
v0
/
customer
/
{userId}
Update customer
curl --request PUT \
--url https://qa-api.endl.xyz/api/v0/customer/{userId} \
--header 'API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"firstName": "Janet",
"phone": "+971511111111",
"questionnaire": {
"sections": {
"profileDetails": {
"items": {
"occupation": {
"value": "13-2011"
}
}
}
}
}
}
'import requests
url = "https://qa-api.endl.xyz/api/v0/customer/{userId}"
payload = {
"firstName": "Janet",
"phone": "+971511111111",
"questionnaire": { "sections": { "profileDetails": { "items": { "occupation": { "value": "13-2011" } } } } }
}
headers = {
"API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
firstName: 'Janet',
phone: '+971511111111',
questionnaire: {sections: {profileDetails: {items: {occupation: {value: '13-2011'}}}}}
})
};
fetch('https://qa-api.endl.xyz/api/v0/customer/{userId}', 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://qa-api.endl.xyz/api/v0/customer/{userId}",
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([
'firstName' => 'Janet',
'phone' => '+971511111111',
'questionnaire' => [
'sections' => [
'profileDetails' => [
'items' => [
'occupation' => [
'value' => '13-2011'
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"API-KEY: <api-key>",
"Content-Type: application/json"
],
]);
$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://qa-api.endl.xyz/api/v0/customer/{userId}"
payload := strings.NewReader("{\n \"firstName\": \"Janet\",\n \"phone\": \"+971511111111\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"13-2011\"\n }\n }\n }\n }\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("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://qa-api.endl.xyz/api/v0/customer/{userId}")
.header("API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"firstName\": \"Janet\",\n \"phone\": \"+971511111111\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"13-2011\"\n }\n }\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://qa-api.endl.xyz/api/v0/customer/{userId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"firstName\": \"Janet\",\n \"phone\": \"+971511111111\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"13-2011\"\n }\n }\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"userType": "INDIVIDUAL",
"status": "INITIATED",
"sumsubApplicantId": "<string>",
"email": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"country": "<string>",
"dateOfBirth": "<string>",
"active": true,
"deleted": true,
"documents": [
{}
],
"questionnaire": {}
}{
"errors": [
{
"code": "400",
"message": "firstName is required",
"name": "PartnerOnboardingCreate failed to process"
},
{
"code": "400",
"message": "country must be an ISO 3166-1 alpha-3 code (e.g. ARE)",
"name": "PartnerOnboardingCreate failed to process"
}
]
}{
"code": "401",
"message": "Authentication Failed!",
"name": "PartnerOnboarding failed to process"
}{
"code": "403",
"message": "Onboarding is not permitted for this country",
"name": "PartnerOnboardingCreate failed to process"
}{
"code": "404",
"message": "Not found",
"name": "PartnerOnboardingGet failed to process"
}{
"code": "409",
"message": "This customer's KYC is completed; verified identity fields can no longer be changed",
"name": "PartnerOnboardingUpdate failed to process"
}Authorizations
Your partner API key. The key must carry the onboarding permission.
Path Parameters
Endl's customer id, returned by create.
Response
The updated customer.
Available options:
INDIVIDUAL, BUSINESS Available options:
INITIATED, PENDING, COMPLETED, REJECTED Populated after uploads.
The schema plus the answers you submitted.