Unlinks individuals as having roles for a registered business.

If an individual is erroneously linked to a business, this endpoint allows the individual to be unlinked. Note that the only controlling officer linked to a business cannot be unlinked; another individual must first be linked as a controlling officer.

Unlinking beneficial owners also sets an expiration on a business certification (30 days are allotted to re-certify).


header.user_handle should have either the registered individual entity to be unlinked or the administrator performing the unlinking. (If an administrator is performing this action, specify the registered individual to be unlinked in the member_handle key.)
header.business_handle should have the registered business entity to be unlinked.

Either key role or role_uuid may be specified in the request body to identify a role to be unassigned from a business member. The role_uuid comes from the response to /get_business_roles.

If you would prefer to have an applicant unlink business members, you can have an “administrator” member authenticate with the usersignature and assign other users to business roles using the optional member_handle key. Otherwise, the authenticated user is unassigned the specified business role if no member_handle is sent in the request.

Authorization / Authentication

header.user_handle should have the registered handle to be verified.

Apps using Access Token Authorization

Use a valid access token in an Authorization: Bearer request header.

See Authenticating with an Access Token for more details.

Apps using ECDSA Authentication

Headers authsignature, usersignature, and businesssignature are required for this request. The usersignature header should be generated with a keypair registered to the user (either registered from the /register endpoint or the /register_wallet endpoint). The businesssignature header should be generated with a keypair registered to the business user (either registered from the /register endpoint or the /register_wallet endpoint).

See the section on ECDSA Authentication for more detail about ECDSA signature generation.

Note - We recently renamed the field auth_handle to app_handle. For backward compatibility, auth_handle is still valid but has been removed from our documentation.

POST /0.2/unlink_business_member HTTP/1.1
Content-Type: application/json
// if using OAuth2
Authorization: Bearer [GENERATED JWT TOKEN HERE]
// if using ECDSA

    "header": {
        "created": 1234567890,
        "app_handle": "your_app_handle",
        "user_handle": "your_individual_user_handle",
        "business_handle": "your_business_handle",
        "reference": "<your unique id>"
    "role": "administrator"


HTTP/1.1 200 OK

    "success": true,
    "status": "SUCCESS",
    "response_time_ms": "171",
    "message": "User \"your_individual_user_handle\" has been unlinked as a Administrator for business Your Business Co.",
    "role": "administrator",
    "reference": "<your unique id>"
const res = await sila.unlinkBusinessMember(

//success response object
console.log(res.statusCode); // 200
console.log(res.data.success); // TRUE
console.log(res.data.message); // Response message
payload = {
    "user_handle": "user_handle",
    "business_handle": "business_handle",
    "role": "administrator",
response = BusinessOperations.unlinkBusinessMember(app, payload, user_private_key, business_private_key)

# Success response

    "status_code": 200,
    "status": "SUCCESS",
    "success": true,
    "message": "User \"another_user_handle\" has been unlinked as a Controlling Officer for business Sila, Inc.",
    "role": "controlling_officer"
BusinessRole businessRole = ((GetBusinessRolesResponse)api.getBusinessRoles().getData()).get(0);
float ownershipStake = 0.30;
ApiResponse response = api.unlinkBusinessMember("user handle", "user private key",   "business handle", "business private key", businessRole);

// Success Object Response
System.out.println(response.getStatusCode()); // 200
System.out.println(((LinkBusinessOperationResponse) response.getData()).getMessage())// user has been unliked
System.out.println(((LinkBusinessOperationResponse) response.getData()).getRole());// business role
System.out.println(((LinkBusinessOperationResponse) response.getData()).isSuccess());// true
System.out.println(((LinkBusinessMemberResponse) response.getData()).getStatus());// SUCCESS
var responseRole = api.GetBusinessRoles();
Console.WriteLine(responseRole.StatusCode); // 200
var ResponseRole = (BusinessRolesResponse)responseRole.Data;
BusinessRole businessRole = new BusinessRole();
businessRole.Name = ResponseRole.BusinessRoles[0].Name;  // 0 index for "controlling_officer", 1 index for "beneficial_owner", 2 index for "administrator"
businessRole.Label = ResponseRole.BusinessRoles[0].Label; // 0 index for "Controlling Officer", 1 index for "Beneficial Owner", 2 index for "Administrator"
businessRole.Uuid = ResponseRole.BusinessRoles[0].Uuid; // 0 index for "9a350e54-0ce9-48fc-b437-9c7b7cfdd1ac", 1 index for "0adb5421-3395-4f81-9e26-dd8d5abae590", 2 index for "977bc3be-8f79-4e83-9df1-29525c06f23e"

ApiResponse<object> response = api.UnlinkBusinessMember(userHandle, userPrivateKey, businessHandle, businessPrivateKey, businessRole);

// Success object response

Console.WriteLine(response.StatusCode); // 200
var parsedData = (LinkOperationResponse)response.Data;
Console.WriteLine(parsedData.Message); // Response message
Console.WriteLine(parsedData.Status); // Response status
// For business roles see [Get Business Roles](#get-business-roles)

$businessHandle = 'business.silamoney.eth';
$businessPrivateKey = 'some private key';
$userHandle = 'user.silamoney.eth'; // The user handle to apply the role to
$userPrivateKey = 'some other private key';
$businessRole = 'administrator'; // Required if $businessRoleUuid is not set. The business role to set
$businessRoleUuid = null; // Required if $businessRole is not set. The business role uuid to set

$response = $client->unlinkBusinessMember($businessHandle, $businessPrivateKey, $userHandle, $userPrivateKey, $businessRole, $businessRoleUuid);

// Response 200

echo $response->getStatusCode(); // 200
echo $response->getData()->success;
echo $response->getData()->status;
echo $response->getData()->message; // User has been unlinked as a... for business...
echo $response->getData()->role; // The role name unliked
const res = await sila.unlinkBusinessMember(user_handle, user_private_key, business_handle, business_private_key, role);

// Success response object

console.log(res.statusCode); // 200
console.log(res.data.success); // TRUE
console.log(res.data.message); // Response message


Status Codesuccess AttributeDescription
200trueThe business and specified individual have been successfully unlinked.
400falseBad request format - check validation_details for more information.
403falseauthsignature, businesssignature, or usersignature header was absent or incorrect.