Update profile
curl --request PATCH \
--url https://api.enterprise.sandbox.uphold.com/core/kyb/processes/profile \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {
"legalEntityName": "ACME Corporation",
"formationDate": "2000-01-01",
"industry": {
"sector": "ecommerce-and-retail",
"subSector": "online-marketplaces"
},
"legalIds": [
{
"type": "tax-id",
"id": "99L99999",
"country": "GB"
},
{
"type": "registration-id",
"id": "AB123456",
"country": "GB"
}
],
"registrationAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA"
},
"operatingAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA",
"subdivision": "GB-MAN"
}
}
}
'import requests
url = "https://api.enterprise.sandbox.uphold.com/core/kyb/processes/profile"
payload = { "input": {
"legalEntityName": "ACME Corporation",
"formationDate": "2000-01-01",
"industry": {
"sector": "ecommerce-and-retail",
"subSector": "online-marketplaces"
},
"legalIds": [
{
"type": "tax-id",
"id": "99L99999",
"country": "GB"
},
{
"type": "registration-id",
"id": "AB123456",
"country": "GB"
}
],
"registrationAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA"
},
"operatingAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA",
"subdivision": "GB-MAN"
}
} }
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({
input: {
legalEntityName: 'ACME Corporation',
formationDate: '2000-01-01',
industry: {sector: 'ecommerce-and-retail', subSector: 'online-marketplaces'},
legalIds: [
{type: 'tax-id', id: '99L99999', country: 'GB'},
{type: 'registration-id', id: 'AB123456', country: 'GB'}
],
registrationAddress: {
city: 'Manchester',
line1: '1 High Street',
line2: 'Northern Quarter',
postalCode: 'M4 1AA'
},
operatingAddress: {
city: 'Manchester',
line1: '1 High Street',
line2: 'Northern Quarter',
postalCode: 'M4 1AA',
subdivision: 'GB-MAN'
}
}
})
};
fetch('https://api.enterprise.sandbox.uphold.com/core/kyb/processes/profile', 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.enterprise.sandbox.uphold.com/core/kyb/processes/profile",
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([
'input' => [
'legalEntityName' => 'ACME Corporation',
'formationDate' => '2000-01-01',
'industry' => [
'sector' => 'ecommerce-and-retail',
'subSector' => 'online-marketplaces'
],
'legalIds' => [
[
'type' => 'tax-id',
'id' => '99L99999',
'country' => 'GB'
],
[
'type' => 'registration-id',
'id' => 'AB123456',
'country' => 'GB'
]
],
'registrationAddress' => [
'city' => 'Manchester',
'line1' => '1 High Street',
'line2' => 'Northern Quarter',
'postalCode' => 'M4 1AA'
],
'operatingAddress' => [
'city' => 'Manchester',
'line1' => '1 High Street',
'line2' => 'Northern Quarter',
'postalCode' => 'M4 1AA',
'subdivision' => 'GB-MAN'
]
]
]),
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.enterprise.sandbox.uphold.com/core/kyb/processes/profile"
payload := strings.NewReader("{\n \"input\": {\n \"legalEntityName\": \"ACME Corporation\",\n \"formationDate\": \"2000-01-01\",\n \"industry\": {\n \"sector\": \"ecommerce-and-retail\",\n \"subSector\": \"online-marketplaces\"\n },\n \"legalIds\": [\n {\n \"type\": \"tax-id\",\n \"id\": \"99L99999\",\n \"country\": \"GB\"\n },\n {\n \"type\": \"registration-id\",\n \"id\": \"AB123456\",\n \"country\": \"GB\"\n }\n ],\n \"registrationAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\"\n },\n \"operatingAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\",\n \"subdivision\": \"GB-MAN\"\n }\n }\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.enterprise.sandbox.uphold.com/core/kyb/processes/profile")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {\n \"legalEntityName\": \"ACME Corporation\",\n \"formationDate\": \"2000-01-01\",\n \"industry\": {\n \"sector\": \"ecommerce-and-retail\",\n \"subSector\": \"online-marketplaces\"\n },\n \"legalIds\": [\n {\n \"type\": \"tax-id\",\n \"id\": \"99L99999\",\n \"country\": \"GB\"\n },\n {\n \"type\": \"registration-id\",\n \"id\": \"AB123456\",\n \"country\": \"GB\"\n }\n ],\n \"registrationAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\"\n },\n \"operatingAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\",\n \"subdivision\": \"GB-MAN\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.enterprise.sandbox.uphold.com/core/kyb/processes/profile")
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 \"input\": {\n \"legalEntityName\": \"ACME Corporation\",\n \"formationDate\": \"2000-01-01\",\n \"industry\": {\n \"sector\": \"ecommerce-and-retail\",\n \"subSector\": \"online-marketplaces\"\n },\n \"legalIds\": [\n {\n \"type\": \"tax-id\",\n \"id\": \"99L99999\",\n \"country\": \"GB\"\n },\n {\n \"type\": \"registration-id\",\n \"id\": \"AB123456\",\n \"country\": \"GB\"\n }\n ],\n \"registrationAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\"\n },\n \"operatingAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\",\n \"subdivision\": \"GB-MAN\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"profile": {
"code": "profile",
"status": "ok",
"input": {
"legalEntityName": "ACME Corporation",
"legalEntityType": "private-limited-company",
"formationDate": "2000-01-01",
"industry": {
"sector": "ecommerce-and-retail",
"subSector": "online-marketplaces"
},
"legalIds": [
{
"type": "tax-id",
"id": "99L99999",
"country": "GB"
},
{
"type": "registration-id",
"id": "AB123456",
"country": "GB"
}
],
"registrationAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA",
"subdivision": "GB-MAN",
"country": "GB"
},
"operatingAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA",
"subdivision": "GB-MAN",
"country": "GB"
}
}
}
}KYB
Update profile
Update the profile process for a business user.
PATCH
/
core
/
kyb
/
processes
/
profile
Update profile
curl --request PATCH \
--url https://api.enterprise.sandbox.uphold.com/core/kyb/processes/profile \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {
"legalEntityName": "ACME Corporation",
"formationDate": "2000-01-01",
"industry": {
"sector": "ecommerce-and-retail",
"subSector": "online-marketplaces"
},
"legalIds": [
{
"type": "tax-id",
"id": "99L99999",
"country": "GB"
},
{
"type": "registration-id",
"id": "AB123456",
"country": "GB"
}
],
"registrationAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA"
},
"operatingAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA",
"subdivision": "GB-MAN"
}
}
}
'import requests
url = "https://api.enterprise.sandbox.uphold.com/core/kyb/processes/profile"
payload = { "input": {
"legalEntityName": "ACME Corporation",
"formationDate": "2000-01-01",
"industry": {
"sector": "ecommerce-and-retail",
"subSector": "online-marketplaces"
},
"legalIds": [
{
"type": "tax-id",
"id": "99L99999",
"country": "GB"
},
{
"type": "registration-id",
"id": "AB123456",
"country": "GB"
}
],
"registrationAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA"
},
"operatingAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA",
"subdivision": "GB-MAN"
}
} }
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({
input: {
legalEntityName: 'ACME Corporation',
formationDate: '2000-01-01',
industry: {sector: 'ecommerce-and-retail', subSector: 'online-marketplaces'},
legalIds: [
{type: 'tax-id', id: '99L99999', country: 'GB'},
{type: 'registration-id', id: 'AB123456', country: 'GB'}
],
registrationAddress: {
city: 'Manchester',
line1: '1 High Street',
line2: 'Northern Quarter',
postalCode: 'M4 1AA'
},
operatingAddress: {
city: 'Manchester',
line1: '1 High Street',
line2: 'Northern Quarter',
postalCode: 'M4 1AA',
subdivision: 'GB-MAN'
}
}
})
};
fetch('https://api.enterprise.sandbox.uphold.com/core/kyb/processes/profile', 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.enterprise.sandbox.uphold.com/core/kyb/processes/profile",
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([
'input' => [
'legalEntityName' => 'ACME Corporation',
'formationDate' => '2000-01-01',
'industry' => [
'sector' => 'ecommerce-and-retail',
'subSector' => 'online-marketplaces'
],
'legalIds' => [
[
'type' => 'tax-id',
'id' => '99L99999',
'country' => 'GB'
],
[
'type' => 'registration-id',
'id' => 'AB123456',
'country' => 'GB'
]
],
'registrationAddress' => [
'city' => 'Manchester',
'line1' => '1 High Street',
'line2' => 'Northern Quarter',
'postalCode' => 'M4 1AA'
],
'operatingAddress' => [
'city' => 'Manchester',
'line1' => '1 High Street',
'line2' => 'Northern Quarter',
'postalCode' => 'M4 1AA',
'subdivision' => 'GB-MAN'
]
]
]),
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.enterprise.sandbox.uphold.com/core/kyb/processes/profile"
payload := strings.NewReader("{\n \"input\": {\n \"legalEntityName\": \"ACME Corporation\",\n \"formationDate\": \"2000-01-01\",\n \"industry\": {\n \"sector\": \"ecommerce-and-retail\",\n \"subSector\": \"online-marketplaces\"\n },\n \"legalIds\": [\n {\n \"type\": \"tax-id\",\n \"id\": \"99L99999\",\n \"country\": \"GB\"\n },\n {\n \"type\": \"registration-id\",\n \"id\": \"AB123456\",\n \"country\": \"GB\"\n }\n ],\n \"registrationAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\"\n },\n \"operatingAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\",\n \"subdivision\": \"GB-MAN\"\n }\n }\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.enterprise.sandbox.uphold.com/core/kyb/processes/profile")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {\n \"legalEntityName\": \"ACME Corporation\",\n \"formationDate\": \"2000-01-01\",\n \"industry\": {\n \"sector\": \"ecommerce-and-retail\",\n \"subSector\": \"online-marketplaces\"\n },\n \"legalIds\": [\n {\n \"type\": \"tax-id\",\n \"id\": \"99L99999\",\n \"country\": \"GB\"\n },\n {\n \"type\": \"registration-id\",\n \"id\": \"AB123456\",\n \"country\": \"GB\"\n }\n ],\n \"registrationAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\"\n },\n \"operatingAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\",\n \"subdivision\": \"GB-MAN\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.enterprise.sandbox.uphold.com/core/kyb/processes/profile")
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 \"input\": {\n \"legalEntityName\": \"ACME Corporation\",\n \"formationDate\": \"2000-01-01\",\n \"industry\": {\n \"sector\": \"ecommerce-and-retail\",\n \"subSector\": \"online-marketplaces\"\n },\n \"legalIds\": [\n {\n \"type\": \"tax-id\",\n \"id\": \"99L99999\",\n \"country\": \"GB\"\n },\n {\n \"type\": \"registration-id\",\n \"id\": \"AB123456\",\n \"country\": \"GB\"\n }\n ],\n \"registrationAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\"\n },\n \"operatingAddress\": {\n \"city\": \"Manchester\",\n \"line1\": \"1 High Street\",\n \"line2\": \"Northern Quarter\",\n \"postalCode\": \"M4 1AA\",\n \"subdivision\": \"GB-MAN\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"profile": {
"code": "profile",
"status": "ok",
"input": {
"legalEntityName": "ACME Corporation",
"legalEntityType": "private-limited-company",
"formationDate": "2000-01-01",
"industry": {
"sector": "ecommerce-and-retail",
"subSector": "online-marketplaces"
},
"legalIds": [
{
"type": "tax-id",
"id": "99L99999",
"country": "GB"
},
{
"type": "registration-id",
"id": "AB123456",
"country": "GB"
}
],
"registrationAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA",
"subdivision": "GB-MAN",
"country": "GB"
},
"operatingAddress": {
"city": "Manchester",
"line1": "1 High Street",
"line2": "Northern Quarter",
"postalCode": "M4 1AA",
"subdivision": "GB-MAN",
"country": "GB"
}
}
}
}This endpoint is currently available in Sandbox only. It is not yet available in Production.
Fields set at user creation
Some profile fields are established when the business user is created and cannot be changed here:legalEntityTypeis fixed at creation and is only readable through Get overview.registrationAddress.countryandoperatingAddress.countryare fixed at creation. You can still update the remaining address fields, such assubdivision,city,line1,line2, andpostalCode.
You can seed most of the profile directly in the Create user request instead of submitting it afterwards.
Industry
Theindustry object classifies what the business actually does, through a sector and its corresponding subSector.
financial-institutions-and-money-services
financial-institutions-and-money-services
money-transmitters, remittance-services, vasp-casp, payment-processors, fx-providers, other-regulated-nbfiBusinesses in this sector must also complete the financial institution process.crypto-services-and-products
crypto-services-and-products
exchanges, custodial-wallet-providers, non-custodial-wallet-providers, miners, nft-platforms, defi-projectspersonal-investment-vehicles
personal-investment-vehicles
private-trusts, roth-ira, llc-spe-for-holding-assetsfamily-offices-and-investment-funds
family-offices-and-investment-funds
family-offices, pooled-investment-vehicles, private-investment-fundsprofessional-services
professional-services
law-firms, accounting-firms, consultants, company-formation-or-secretarial-servicestechnology-and-software
technology-and-software
it-services, saas, gaming-studios, cybersecurity, data-analytics, ai-firmsecommerce-and-retail
ecommerce-and-retail
online-marketplaces, merchants, wholesalers, direct-to-consumer-retailersreal-estate-and-property-management
real-estate-and-property-management
brokerages, property-developers, management-companies, investment-vehicleshigh-value-goods-and-luxury-dealers
high-value-goods-and-luxury-dealers
jewelry, art, precious-metals, automobiles, auction-housesother
other
When no sector applies, use
other and describe the business’s activity in the otherSector field instead of a subSector.Legal identifiers
legalIds carries the government-issued identifiers of the business. Two types are supported:
tax-id: the business’s tax identification number.registration-id: the business’s company registration number.
country. Only those issued by the country of the business’s registrationAddress count towards completing the process, but the array is not limited to them — ask the business whether it is registered for tax anywhere else, and declare those identifiers here as well. Submitting an empty array clears every previously submitted identifier.
Which identifiers are required depends on the country the business is registered in:
| Type / Region | Notes | ||
|---|---|---|---|
tax-id | Required (UTRN) | Required | — |
registration-id | Required (EIN or SSN) | Not applicable | — |
Tax ID format validation only runs in Production. In Sandbox, any non-empty value is accepted. Failures can be triggered by using
INVALID.Was this page helpful?
⌘I