curl --request PUT \
--url https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/key-parties/individual/{keyPartyId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"externalKeyPartyId": "ubo-test-0001",
"isBeneficialOwner": true,
"firstName": "Test_Jane_UBO",
"middleName": "Ada",
"lastName": "KYC_Sandbox-Corrected",
"dateOfBirth": "1990-04-12",
"birthCountry": "US",
"address": {
"street": "Corrected Street",
"houseNumber": "2",
"city": "Boston",
"state": "MA",
"countryCode": "US",
"postalCode": "02101"
},
"uboOwning": "25+"
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalKeyPartyId: 'ubo-test-0001',
isBeneficialOwner: true,
firstName: 'Test_Jane_UBO',
middleName: 'Ada',
lastName: 'KYC_Sandbox-Corrected',
dateOfBirth: '1990-04-12',
birthCountry: 'US',
address: {
street: 'Corrected Street',
houseNumber: '2',
city: 'Boston',
state: 'MA',
countryCode: 'US',
postalCode: '02101'
},
uboOwning: '25+'
})
};
fetch('https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/key-parties/individual/{keyPartyId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/key-parties/individual/{keyPartyId}"
payload = {
"externalKeyPartyId": "ubo-test-0001",
"isBeneficialOwner": True,
"firstName": "Test_Jane_UBO",
"middleName": "Ada",
"lastName": "KYC_Sandbox-Corrected",
"dateOfBirth": "1990-04-12",
"birthCountry": "US",
"address": {
"street": "Corrected Street",
"houseNumber": "2",
"city": "Boston",
"state": "MA",
"countryCode": "US",
"postalCode": "02101"
},
"uboOwning": "25+"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"keyPartyId": "6aca84e7dc49fe8369dd1dab",
"externalKeyPartyId": "ubo-test-0001",
"investorId": "6aca84e5dc49fe8369dd1da4",
"signerType": "individual",
"uboOwning": "25+",
"isBeneficialOwner": true,
"details": {
"firstName": "Test_Jane_UBO",
"lastName": "KYC_Sandbox-Corrected",
"middleName": "Ada",
"dateOfBirth": "1990-04-12T00:00:00.000Z",
"birthCountry": "US",
"address": {
"street": "Corrected Street",
"houseNumber": "2",
"city": "Boston",
"state": "MA",
"countryCode": "US",
"postalCode": "02101"
}
}
}Correct a person key party
Replaces a person key party — a typo in a name, a moved address. Use it before you submit the entity.
Full replacement, not a merge. Any optional field you omit is cleared (email, isLegalSigner, middleName…) and uboOwning falls back to none. Send the full record every time; the response echoes what is now stored.
externalKeyPartyId must be the one this key party was created with — a different value answers 422, because a mismatch usually means the wrong key party is being addressed.
Once the entity is submitted, this person’s identity is locked: the call answers 409 verification_in_review, then 409 verification_already_settled after the verdict.
A company key party addressed through this route answers 404 key_party_not_found; correct it with PUT /investors/{investorId}/key-parties/entity/{keyPartyId}.
curl --request PUT \
--url https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/key-parties/individual/{keyPartyId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"externalKeyPartyId": "ubo-test-0001",
"isBeneficialOwner": true,
"firstName": "Test_Jane_UBO",
"middleName": "Ada",
"lastName": "KYC_Sandbox-Corrected",
"dateOfBirth": "1990-04-12",
"birthCountry": "US",
"address": {
"street": "Corrected Street",
"houseNumber": "2",
"city": "Boston",
"state": "MA",
"countryCode": "US",
"postalCode": "02101"
},
"uboOwning": "25+"
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalKeyPartyId: 'ubo-test-0001',
isBeneficialOwner: true,
firstName: 'Test_Jane_UBO',
middleName: 'Ada',
lastName: 'KYC_Sandbox-Corrected',
dateOfBirth: '1990-04-12',
birthCountry: 'US',
address: {
street: 'Corrected Street',
houseNumber: '2',
city: 'Boston',
state: 'MA',
countryCode: 'US',
postalCode: '02101'
},
uboOwning: '25+'
})
};
fetch('https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/key-parties/individual/{keyPartyId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/key-parties/individual/{keyPartyId}"
payload = {
"externalKeyPartyId": "ubo-test-0001",
"isBeneficialOwner": True,
"firstName": "Test_Jane_UBO",
"middleName": "Ada",
"lastName": "KYC_Sandbox-Corrected",
"dateOfBirth": "1990-04-12",
"birthCountry": "US",
"address": {
"street": "Corrected Street",
"houseNumber": "2",
"city": "Boston",
"state": "MA",
"countryCode": "US",
"postalCode": "02101"
},
"uboOwning": "25+"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"keyPartyId": "6aca84e7dc49fe8369dd1dab",
"externalKeyPartyId": "ubo-test-0001",
"investorId": "6aca84e5dc49fe8369dd1da4",
"signerType": "individual",
"uboOwning": "25+",
"isBeneficialOwner": true,
"details": {
"firstName": "Test_Jane_UBO",
"lastName": "KYC_Sandbox-Corrected",
"middleName": "Ada",
"dateOfBirth": "1990-04-12T00:00:00.000Z",
"birthCountry": "US",
"address": {
"street": "Corrected Street",
"houseNumber": "2",
"city": "Boston",
"state": "MA",
"countryCode": "US",
"postalCode": "02101"
}
}
}Authorizations
OAuth 2.0 client credentials. Exchange the client id and secret Securitize issued you for a bearer token at the token URL (the host root, not under the base URL), with grant_type=client_credentials; the token lasts 2 hours and goes in the Authorization: Bearer header of every request. No scope is needed. The token identifies your partner account, so you never send a partner id, and every record you create is scoped to you.
Path Parameters
Body
A natural person the entity is verified through. The same body creates the key party and, on PUT, replaces it in full: an optional field you omit on PUT is cleared.
true declares the person a beneficial owner (UBO), false a shareholder. Declare at least one person as a beneficial owner. A company whose people are all shareholders is refused at verification: submit answers 200 with status: incomplete and the company failed, the people already sent stay locked, and the company's status can read processing until you add a beneficial owner and submit again.
Response
Corrected. Omitted optional fields are absent from the response.
A person key party. It has no status: a key party is never verified on its own, only with its entity at submit.