curl --request PATCH \
--url https://api-sandbox.finogates.com/v1/platform/users/{user_id}/details \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"first_name": "John",
"last_name": "Doe",
"business_name": "Acme Corporation"
}
'import requests
url = "https://api-sandbox.finogates.com/v1/platform/users/{user_id}/details"
payload = {
"first_name": "John",
"last_name": "Doe",
"business_name": "Acme Corporation"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({first_name: 'John', last_name: 'Doe', business_name: 'Acme Corporation'})
};
fetch('https://api-sandbox.finogates.com/v1/platform/users/{user_id}/details', 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-sandbox.finogates.com/v1/platform/users/{user_id}/details",
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' => 'John',
'last_name' => 'Doe',
'business_name' => 'Acme Corporation'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api-sandbox.finogates.com/v1/platform/users/{user_id}/details"
payload := strings.NewReader("{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"business_name\": \"Acme Corporation\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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-sandbox.finogates.com/v1/platform/users/{user_id}/details")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"business_name\": \"Acme Corporation\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.finogates.com/v1/platform/users/{user_id}/details")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"business_name\": \"Acme Corporation\"\n}"
response = http.request(request)
puts response.read_body{
"status_code": 200,
"data": {
"user_id": "b3a9b622-cc63-4d3c-aad6-2d8e29e6f9d4",
"first_name": "Jonathan",
"last_name": "Doe",
"name": "Jonathan Doe",
"is_business_user": false,
"email": "john.doe@example.com",
"is_active": true,
"created_at": "2025-06-10T18:10:42.000Z"
},
"query_generated_time": 1712847600000
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Update a User's Details
Update a user’s name, email, or phone.
Every field is optional; send only what you want to change. The user’s active state and wallets are left untouched.
The individual/business type is fixed at creation and cannot be changed here.
For an individual, update first_name/last_name. For a business,
update business_name.
If the user has already passed identity verification, a changed name must match the verified name on file (matching ignores letter casing and surrounding spaces). When it differs, the request is rejected and nothing is changed.
email and phone (E.164) must each be unique across your platform. Send
null to remove one; a user always keeps at least one of the two.
curl --request PATCH \
--url https://api-sandbox.finogates.com/v1/platform/users/{user_id}/details \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"first_name": "John",
"last_name": "Doe",
"business_name": "Acme Corporation"
}
'import requests
url = "https://api-sandbox.finogates.com/v1/platform/users/{user_id}/details"
payload = {
"first_name": "John",
"last_name": "Doe",
"business_name": "Acme Corporation"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({first_name: 'John', last_name: 'Doe', business_name: 'Acme Corporation'})
};
fetch('https://api-sandbox.finogates.com/v1/platform/users/{user_id}/details', 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-sandbox.finogates.com/v1/platform/users/{user_id}/details",
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' => 'John',
'last_name' => 'Doe',
'business_name' => 'Acme Corporation'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api-sandbox.finogates.com/v1/platform/users/{user_id}/details"
payload := strings.NewReader("{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"business_name\": \"Acme Corporation\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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-sandbox.finogates.com/v1/platform/users/{user_id}/details")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"business_name\": \"Acme Corporation\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.finogates.com/v1/platform/users/{user_id}/details")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"business_name\": \"Acme Corporation\"\n}"
response = http.request(request)
puts response.read_body{
"status_code": 200,
"data": {
"user_id": "b3a9b622-cc63-4d3c-aad6-2d8e29e6f9d4",
"first_name": "Jonathan",
"last_name": "Doe",
"name": "Jonathan Doe",
"is_business_user": false,
"email": "john.doe@example.com",
"is_active": true,
"created_at": "2025-06-10T18:10:42.000Z"
},
"query_generated_time": 1712847600000
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Path Parameters
The unique ID of the user whose identity you want to update.
"b3a9b622-cc63-4d3c-aad6-2d8e29e6f9d4"
Body
Update a user's name on the platform.
Every field is optional; send only what you want to change. Only the name is
touched — email, status, wallets, and the individual/business type are left
untouched (the type is fixed at creation). For an individual, update
first_name/last_name; for a business, update business_name. If the user
has already passed identity verification, a changed name must match the
verified name on file (case-insensitive) or the request is rejected.
User's given name (individuals only).
100"John"
User's family name (individuals only).
100"Doe"
Organization name (business users only).
100"Acme Corporation"

