/update/<registration-data>

Update an existing email, phone number, street address, identity, or entity (name, birthdate, or business data).

After registering a user, sometimes the user will have mistyped information and will then fail verification. Updating registered verification data is now possible with the /update endpoint.

The following are valid /update paths:

  • /update/email: Update an email address registered to your user entity.
  • /update/phone: Update a phone number registered to your user entity.
  • /update/identity: Update an identity (social security number or employer identification number) registered to your user entity. Note: This cannot be done after an identity verification has passed or while verification is still pending.
  • /update/address: Update a street address registered to your user entity.
  • /update/entity: Update an entity's name (first/last/full), birthdate/incorporation date, or business-related data (doing-business-as, website, business type, NAICS code, state of incorporation). Note: This cannot be done after an identity verification has passed or while verification is still pending.

All of these endpoints except for /update/entity require a uuid key. This can be found in the response to the /get_entity endpoint; simply find the address, email, identity, or phone in the list that needs updating and pass the same "uuid" to this endpoint along with the new values to update it.

❗️

Re-requesting KYC after Updating

Most end user data must go through re-verification of KYC in the event an end user needs to update their data after passing KYC, regardless of the KYC status.

You DO NOT need to request KYC again if you are:

  • Updating email
  • Updating phone number

It is your responsibility to build the logic to call the /request_kyc and /check_kyc endpoints to run the updated end user data through re-verification.

NOTE: If the end user needs to update their name you will need contact support after the end user has uploaded official documents with proof of name change, such as:

  • A marriage license or divorce decree (this must have your new legal name printed by the state, and it must show that a name change occurred)
  • A court order for the name change

/update/email

Requests

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

You must pass in both uuid and email keys. The UUID can be obtained from the response to a request to the /get_entity endpoint.

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

Both authsignature and usersignature headers 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).

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/update/email HTTP/1.1
sandbox.silamoney.com
Content-Type: application/json
// if using OAuth2
Authorization: Bearer [GENERATED JWT TOKEN HERE]
// if using ECDSA
authsignature: [GENERATED AUTHSIGNATURE HEX STRING HERE]

{
    "header": {
        "created": 1234567890,
        "app_handle": "your_app_handle",
        "user_handle": "your_individual_end_user",
        "reference": "<your unique id>"
    },
    "uuid": "7f83044b-63c8-4d56-b107-d52fa7ae2d7a",
    "session_identifier": "Sardine session key", //required for Stearns
    "email": "[email protected]"
}

***

HTTP/1.1 200 OK

{
    "success": true,
    "message": "Successfully updated email with UUID 7f83044b-63c8-4d56-b107-d52fa7ae2d7a.",
    "email": {
        "added_epoch": 1599090039,
        "modified_epoch": 1599092327,
        "uuid": "7f83044b-63c8-4d56-b107-d52fa7ae2d7a",
        "email": "[email protected]"
    },
    "status": "SUCCESS",
    "response_time_ms": "123",
    "reference": "<your unique id>"
}
const email = {
  uuid: 'some-uuid-code',
  email: '[email protected]',
};
const res = await sila.updateEmail(userHandle, userPrivateKey, email);

// Success Response Object

console.log(res.statusCode); // 200
console.log(res.data.success); // true
console.log(res.data.status); // SUCCESS
console.log(res.data.message); // Successfully updated email
console.log(res.data.email.added_epoch);
console.log(res.data.email.modified_epoch);
console.log(res.data.email.uuid);
console.log(res.data.email.email);
payload = {
    "user_handle": user_handle,
    "email": email,
    "uuid": uuid
}

response = silasdk.User.updateRegistrationData(app, RegistrationFields.EMAIL, payload, eth_private_key)
    
# Email
{
    "status_code": 200,
    "success": true,
    "message": "Successfully Updated email to user your_individual_end_user.",
    "email": {
        "added_epoch": 1599006972,
        "modified_epoch": 1599006972,
        "uuid": "30c41951-1f2b-445b-8604-fa748316881d",
        "email": "[email protected]"
    },
    "status": "SUCCESS"
}
UserHandleMessage user = UserHandleMessage.builder()
        .userHandle("user_handle")
        .userPrivateKey("user_private_key")
        .build();
EmailMessage message = EmailMessage.builder()
        .uuid("some-uuid-code")
        .email("[email protected]")
        .build();
ApiResponse response = api.updateEmail(user, message);

// Success response
System.out.println(response.getStatusCode()); // 200
Response parsedResponse = (Response) response.getData();
System.out.println(parsedResponse.getSuccess()); // true
System.out.println(parsedResponse.getStatus()); // SUCCESS
System.out.println(parsedResponse.getMessage()); // Successfully updated [data]
System.out.println(parsedResponse.getEmail().getAddedEpoch());
System.out.println(parsedResponse.getEmail().getModifiedEpoch());
System.out.println(parsedResponse.getEmail().getUuid());
System.out.println(parsedResponse.getEmail().getEmail());
// Email
$userHandle = 'user.silamoney.eth';
$privateKey = 'some private key';
$email = '[email protected]';
$uuid = 'some-uuid-code';
$response = $client->updateEmail($userHandle, $privateKey, $uuid, $email);

echo $response->getStatusCode(); // 200
echo $response->getData()->success; // TRUE
echo $response->getData()->status; // SUCCESS
echo $response->getData()->message; // Successfully updated [data] with UUID some-uuid-code.
echo $response->getData()->email->added_epoch;
echo $response->getData()->email->modified_epoch;
echo $response->getData()->email->uuid; // some-uuid-code
echo $response->getData()->email->email; // your.updated.email@domain.
var response = api.UpdateEmail(userHandle, privateKey, uuid, email);

// Success Object Response
Console.WriteLine(response.StatusCode); // 200
var parsedResponse = (EmailResponse)response.Data;
Console.WriteLine(parsedResponse.Success); // true
Console.WriteLine(parsedResponse.Status); // SUCCESS
Console.WriteLine(parsedResponse.Message); // Successfully updated email
Console.WriteLine(parsedResponse.Email.AddedEpoch);
Console.WriteLine(parsedResponse.Email.ModifiedEpoch);
Console.WriteLine(parsedResponse.Email.Uuid);
Console.WriteLine(parsedResponse.Email.Email);

Responses

Status Codesuccess AttributeDescription
200trueEmail was successfully updated.
400falseBad request format - check validation_details for more information.
404falseUUID is not assigned to an email registered to the current user.
403falseauthsignature or usersignature header was absent or incorrect.

/update/phone

Requests

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

You must pass in both uuid, phone, and sms_opt_in keys. The UUID can be obtained from the response to a request to the /get_entity endpoint.

sms_opt_in is an optional boolean field. If true, and if app is configured to send SMS messages, sends a confirmation SMS to the passed-in phone number.

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

Both authsignature and usersignature headers 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).

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/update/phone HTTP/1.1
sandbox.silamoney.com
Content-Type: application/json
// if using OAuth2
Authorization: Bearer [GENERATED JWT TOKEN HERE]
// if using ECDSA
authsignature: [GENERATED AUTHSIGNATURE HEX STRING HERE]

{
    "header": {
        "created": 1234567890,
        "auth_handle": "your_app_handle",
        "user_handle": "your_individual_end_user",
        "reference": "<your unique id>"
    },
    "uuid": "51fb4167-83d4-467b-8f08-eb03dbd6facf",
    "session_identifier": "Sardine session key", //required for Stearns
    "phone": "9871237654",
    "sms_opt_in": true
}

***

HTTP/1.1 200 OK

{
    "success": true,
    "message": "Successfully updated phone with UUID 51fb4167-83d4-467b-8f08-eb03dbd6facf.",
    "phone": {
        "added_epoch": 1599090039,
        "modified_epoch": 1599092327,
        "uuid": "51fb4167-83d4-467b-8f08-eb03dbd6facf",
        "phone": "9871237654",
        "sms_confirmation_requested": false,
        "sms_confirmed": false,
        "primary": false
    },
    "status": "SUCCESS",
    "reference": "<your unique id>"
}
const phone = {
    phone: '9871237654',
    uuid: '51fb4167-83d4-467b-8f08-eb03dbd6facf',
    smsOptIn: true,
}
const res = await sila.updatePhone(handle, key, phone);

// Success Response Object
console.log(res.statusCode); // 200
console.log(res.data.success); // true
console.log(res.data.status); // SUCCESS
console.log(res.data.message); // Successfully added phone
console.log(res.data.phone.added_epoch);
console.log(res.data.phone.modified_epoch);
console.log(res.data.phone.uuid);
console.log(res.data.phone.phone);
console.log(res.data.phone.sms_confirmation_requested);
console.log(res.data.phone.sms_confirmed);
console.log(res.data.phone.primary);
payload = {
    "user_handle": user_handle,
    "phone": phone,
    "uuid": uuid,
    "sms_opt_in": sms_opt_in
}

response = silasdk.User.updateRegistrationData(app, silasdk.RegistrationFields.PHONE, payload, eth_private_key)

{
    "status_code": 200,
    "success": true,
    "message": "Successfully Updated phone to user your_individual_end_user.",
    "phone": {
        "added_epoch": 1599007660,
        "modified_epoch": 1599007660,
        "uuid": "ac6435a7-d960-4b0a-9c04-adf99102ba57",
        "phone": "3189250987"
    },
    "status": "SUCCESS"
}
UserHandleMessage user = UserHandleMessage.builder()
        .userHandle("user_handle")
        .userPrivateKey("user_private_key")
        .smsOptIn(true)
        .build();
PhoneMessage message = PhoneMessage.builder()
        .uuid("some-uuid-code")
        .phone("1234567890")
        .build();
ApiResponse response = api.updatePhone(user, message);

// Success response
System.out.println(response.getStatusCode()); // 200
PhoneResponse parsedResponse = (PhoneResponse) response.getData();
System.out.println(parsedResponse.getSuccess()); // true
System.out.println(parsedResponse.getStatus()); // SUCCESS
System.out.println(parsedResponse.getMessage()); // Successfully updated phone
System.out.println(parsedResponse.getPhone().getAddedEpoch());
System.out.println(parsedResponse.getPhone().getModifiedEpoch());
System.out.println(parsedResponse.getPhone().getUuid());
System.out.println(parsedResponse.getPhone().getPhone());
$userHandle = 'user.silamoney.eth';
$privateKey = 'some private key';
$phone = '1234567890';
$uuid = 'some-uuid-code';
$smsOptIn = true;
$response = $client->updatePhone($userHandle, $privateKey, $uuid, $phone, $smsOptIn);

echo $response->getStatusCode(); // 200
echo $response->getData()->success; // TRUE
echo $response->getData()->status; // SUCCESS
echo $response->getData()->message; // Successfully updated phone with UUID some-uuid-code.
echo $response->getData()->phone->added_epoch;
echo $response->getData()->phone->modified_epoch;
echo $response->getData()->phone->uuid; // some-uuid-code
echo $response->getData()->phone->phone; // 1234567890
echo $response->getData()->phone->sms_confirmation_requested; //false
echo $response->getData()->phone->sms_confirmed; //false
echo $response->getData()->phone->primary; //false
var response = api.UpdatePhone(userHandle, privateKey, uuid, phone, smsOptIn);

// Success Object Response
Console.WriteLine(response.StatusCode); // 200
var parsedResponse = (PhoneResponse)response.Data;
Console.WriteLine(parsedResponse.Success); // true
Console.WriteLine(parsedResponse.Status); // SUCCESS
Console.WriteLine(parsedResponse.Message); // Successfully updated phone
Console.WriteLine(parsedResponse.Phone.AddedEpoch);
Console.WriteLine(parsedResponse.Phone.ModifiedEpoch);
Console.WriteLine(parsedResponse.Phone.Uuid);
Console.WriteLine(parsedResponse.Phone.Phone);
Console.WriteLine(parsedResponse.Phone.SmsConfirmationRequested);
Console.WriteLine(parsedResponse.Phone.SmsConfirmed);
Console.WriteLine(parsedResponse.Phone.Primary);

Responses

Status Codesuccess AttributeDescription
200truePhone was successfully updated.
400falseBad request format - check validation_details for more information.
404falseUUID is not associated with a phone number registered to the current user.
403falseauthsignature or usersignature header was absent or incorrect.

OR

SMS is not configured for the current app.

/update/identity

Requests

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

You must pass in the uuid, identity_alias, and identity_value keys. The UUID can be obtained from the response to a request to the /get_entity endpoint.

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

Both authsignature and usersignature headers 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).

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/update/identity HTTP/1.1
sandbox.silamoney.com
Content-Type: application/json
// if using OAuth2
Authorization: Bearer [GENERATED JWT TOKEN HERE]
// if using ECDSA
authsignature: [GENERATED AUTHSIGNATURE HEX STRING HERE]

{
    "header": {
        "created": 1234567890,
        "auth_handle": "your_app_handle",
        "user_handle": "your_individual_end_user",
        "reference": "<your unique id>"
    },
    "uuid": "15aaf8fd-f3ca-4355-a72c-ecebd54984dd",
    "session_identifier": "Sardine session key", //required for Stearns
    "identity_alias": "SSN",
    "identity_value": "123452233"
}

***

HTTP/1.1 200 OK
{
    "success": true,
    "message": "Successfully updated identity with UUID 15aaf8fd-f3ca-4355-a72c-ecebd54984dd.",
    "identity": {
        "added_epoch": 1599090039,
        "modified_epoch": 1599091288,
        "uuid": "15aaf8fd-f3ca-4355-a72c-ecebd54984dd",
        "identity_type": "SSN",
        "identity": "*2233",
        "document_id": null,
        "document_name": null
    },
    "status": "SUCCESS",
    "reference": "<your unique id>"
}
const identity = {
    uuid: '51fb4167-83d4-467b-8f08-eb03dbd6facf',
    identity_alias: 'SSN',
    identity_value: '123455898'
}
const res = await sila.updateIdentity(handle, key, identity);

// Success Response Object
console.log(res.statusCode); // 200
console.log(res.data.success); // true
console.log(res.data.status); // SUCCESS
console.log(res.data.message); // Successfully added identity
console.log(res.data.identity.added_epoch);
console.log(res.data.identity.modified_epoch);
console.log(res.data.identity.uuid);
console.log(res.data.identity.identity_type);
console.log(res.data.identity.identity);
# Update Identity
payload = {
    "user_handle": business_handle,
    "identity_alias": identityAlias,
    "identity_value": identityValue,
    "uuid": uuid
}

response = silasdk.User.updateRegistrationData(app, silasdk.RegistrationFields.IDENTITY, payload, eth_private_key)

{
    "success": true,
    "message": "Successfully Updated identity to user your_individual_end_user.",
    "phone": {
        "Updated_epoch": 1599007660,
        "modified_epoch": 1599007660,
        "uuid": "ac6435a7-d960-4b0a-9c04-adf99102ba57",
        "identity_alias": "SSN",
        "identity_value": "*2222"
    },
    "status": "SUCCESS"
}
UserHandleMessage user = UserHandleMessage.builder()
        .userHandle("user_handle")
        .userPrivateKey("user_private_key")
        .build();
IdentityMessage message = IdentityMessage.builder()
        .uuid("some-uuid-code")
        .identityAlias("SSN")
        .identityValue("123452222")
        .build();
ApiResponse response = api.updateIdentity(user, message);

// Success response
System.out.println(response.getStatusCode()); // 200
IdentityResponse parsedResponse = (IdentityResponse) response.getData();
System.out.println(parsedResponse.getSuccess()); // true
System.out.println(parsedResponse.getStatus()); // SUCCESS
System.out.println(parsedResponse.getMessage()); // Successfully updated identity
System.out.println(parsedResponse.getIdentity().getAddedEpoch());
System.out.println(parsedResponse.getIdentity().getModifiedEpoch());
System.out.println(parsedResponse.getIdentity().getUuid());
System.out.println(parsedResponse.getIdentity().getIdentityType());
System.out.println(parsedResponse.getIdentity().getIdentity());
use Silamoney\Client\Domain\IdentityAlias;

$userHandle = 'user.silamoney.eth';
$privateKey = 'some private key';
$identityAlias = IdentityAlias::SSN();
$identityValue = '654322222';
$uuid = 'some-uuid-code';
$response = $client->updateIdentity($userHandle, $privateKey, $uuid,  $identityAlias, $identityValue);

echo $response->getStatusCode(); // 200
echo $response->getData()->success; // TRUE
echo $response->getData()->status; // SUCCESS
echo $response->getData()->message; // Successfully updated identity with UUID some-uuid-code.
echo $response->getData()->identity->added_epoch;
echo $response->getData()->identity->modified_epoch;
echo $response->getData()->identity->uuid; // some-uuid-code
echo $response->getData()->identity->identity_type; // SSN
echo $response->getData()->identity->identity; // 654322222
var identity = new IdentityMessage
{
    Uuid = "some-uuid-code",
    IdentityAlias = "SSN",
    IdentityValue = "543212222"
};
var response = api.UpdateIdentity(user.UserHandle, user.PrivateKey, identity);

// Success Object Response
Console.WriteLine(response.StatusCode); // 200
var parsedResponse = (IdentityResponse)response.Data;
Console.WriteLine(parsedResponse.Success); // true
Console.WriteLine(parsedResponse.Status); // SUCCESS
Console.WriteLine(parsedResponse.Message); // Successfully updated identity
Console.WriteLine(parsedResponse.Identity.AddedEpoch);
Console.WriteLine(parsedResponse.Identity.ModifiedEpoch);
Console.WriteLine(parsedResponse.Identity.Uuid);
Console.WriteLine(parsedResponse.Identity.IdentityType);
Console.WriteLine(parsedResponse.Identity.Identity);

Responses

Status Codesuccess AttributeDescription
200trueIdentity was successfully updated.
400falseBad request format - check validation_details for more information.
404falseUUID is not associated with an identity linked to the current user.
403falseauthsignature or usersignature header was absent or incorrect.

/update/address

Requests

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

You must pass in the uuid key. All other address keys are optional:

  • address_alias
  • street_address_1
  • street_address_2
  • city
  • state
  • country
  • postal_code

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

Both authsignature and usersignature headers 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).

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/update/address HTTP/1.1
sandbox.silamoney.com
Content-Type: application/json
// if using OAuth2
Authorization: Bearer [GENERATED JWT TOKEN HERE]
// if using ECDSA
authsignature: [GENERATED AUTHSIGNATURE HEX STRING HERE]

{
    "header": {
        "created": 1234567890,
        "app_handle": "your_app_handle",
        "user_handle": "your_individual_end_user",
        "reference": "<your unique id>"
    },
    "uuid": "5de836eb-9234-42bc-b7da-5e9991ab2d4b",
    "session_identifier": "Sardine session key", //required for Stearns
    "address_alias": "New nickname"
}

***

HTTP/1.1 200 OK

{
    "success": true,
    "message": "Successfully updated address with UUID 5de836eb-9234-42bc-b7da-5e9991ab2d4b.",
    "address": {
        "added_epoch": 1599090039,
        "modified_epoch": 1599093463,
        "uuid": "5de836eb-9234-42bc-b7da-5e9991ab2d4b",
        "nickname": "New nickname",
        "street_address_1": "123 NW 1st Ave.",
        "street_address_2": "",
        "city": "Portland",
        "state": "OR",
        "country": "US",
        "postal_code": "12345"
    },
    "status": "SUCCESS",
    "reference": "<your unique id>"
}
const address = {
  alias: "Home Number Two",
  street_address_1: "324 Songbird Avenue",
  street_address_2: "Apt. 132",
  city: "Portland",
  state: "VA",
  postal_code: "12345",
  country: "US",
  uuid: "5de836eb-9234-42bc-b7da-5e9991ab2d4b",
};

const res = await sila.updateAddress(handle, key, address);

console.log(res.statusCode);
console.log(res.data.success);
console.log(res.data.status);
console.log(res.data.message);
console.log(res.data.address.added_epoch);
console.log(res.data.address.modified_epoch);
console.log(res.data.address.uuid);
console.log(res.data.address.nickname);
console.log(res.data.address.street_address_1);
console.log(res.data.address.street_address_2);
console.log(res.data.address.city);
console.log(res.data.address.state);
console.log(res.data.address.country);
console.log(res.data.address.postal_code);
payload = {
    "user_handle": user_handle,
    "address_alias": address_alias,
    "street_address_1": street_address_1,
    "street_address_2": street_address_2,
    "city": city,
    "state": state,
    "postal_code": postal_code,
    "country": country,
    "uuid": uuid
}

response = silasdk.User.updateRegistrationData(app, silasdk.RegistrationFields.ADDRESS, payload, eth_private_key)

{
    "status_code": 200,
    "success": true,
    "message": "Successfully updated address to user your_individual_end_user.",
    "address": {
        "added_epoch": 1599008272,
        "modified_epoch": 1599008272,
        "uuid": "2966e38f-e713-4994-a22f-56e076963d01",
        "nickname": "Home Number Two",
        "street_address_1": "324 Songbird Avenue",
        "street_address_2": "Apt 132",
        "city": "Portland",
        "state": "VA",
        "country": "US",
        "postal_code": "12345"
    },
    "status": "SUCCESS"
}
UserHandleMessage user = UserHandleMessage.builder()
        .userHandle("user_handle")
        .userPrivateKey("user_private_key")
        .build();
AddressMessage message = AddressMessage.builder()
        .uuid("some-uuid-code")
        .addressAlias("new address")
        .streetAddress1("324 Songbird Avenue")
        .streetAddress2("Apt. 132") // Optional.
        .city("Portland")
        .state("VA")
        .country("US")
        .postalCode("12345")
        .build();
ApiResponse response = api.updateAddress(user, message);

// Success response
System.out.println(response.getStatusCode()); // 200
AddressResponse parsedResponse = (AddressResponse) response.getData();
System.out.println(parsedResponse.getSuccess()); // true
System.out.println(parsedResponse.getStatus()); // SUCCESS
System.out.println(parsedResponse.getMessage()); // Successfully updated address
System.out.println(parsedResponse.getAddress().getAddedEpoch());
System.out.println(parsedResponse.getAddress().getModifiedEpoch());
System.out.println(parsedResponse.getAddress().getUuid());
System.out.println(parsedResponse.getAddress().getNickname());
System.out.println(parsedResponse.getAddress().getStreetAddress1());
System.out.println(parsedResponse.getAddress().getStreetAddress2());
System.out.println(parsedResponse.getAddress().getCity());
System.out.println(parsedResponse.getAddress().getState());
System.out.println(parsedResponse.getAddress().getCountry());
System.out.println(parsedResponse.getAddress().getPostalCode());
use Silamoney\Client\Domain\Country;

$userHandle = 'user.silamoney.eth';
$privateKey = 'some private key';
$nickname = 'update_address'; // Optional. This is a nickname that can be attached to the address object. While a required field, it can be left blank if desired.
$streetAddress1 = '124 Main St'; // Optional. This is line 1 of a street address. Post office boxes are not accepted in this field.
$city = 'Sometown'; // Optional. Name of the city where the person being verified is a current resident.
$state = 'CA'; // Optional. Name of state where verified person is a current resident.
$country = Country::US(); // Optional. Two-letter country code.
$postalCode = '54321'; // Optional. In the US, this can be the 5-digit ZIP code or ZIP+4 code.
$streetAddress2 = '' // Optional. This is line 2 of a street address. This may include suite or apartment numbers.
$uuid = 'some-uuid-code';
$response = $client->updateAddress($userHandle, $privateKey, $uuid, $nickname, $streetAddress1, $city, $state, $country, $postalCode, $streetAddress2);

echo $response->getStatusCode(); // 200
echo $response->getData()->success; // TRUE
echo $response->getData()->status; // SUCCESS
echo $response->getData()->message; // Successfully added identity to user user.silamoney.eth.
echo $response->getData()->address->added_epoch;
echo $response->getData()->address->modified_epoch;
echo $response->getData()->address->uuid; // some-uuid-code
echo $response->getData()->address->nickname; // update_address
echo $response->getData()->address->street_address_1; // 124 Main St
echo $response->getData()->address->street_address_2; //
echo $response->getData()->address->city; // Sometown
echo $response->getData()->address->state; // CA
echo $response->getData()->address->country; // US
echo $response->getData()->address->postal_code; // 54321
var address = new AddressMessage
{
    Uuid = "some-uuid-code", // Required
    AddressAlias = "new_address",
    StreetAddress1 = "324 Songbird Avenue",
    StreetAddress2 = "Apt. 132",
    City = "Portland",
    State = "VA",
    PostalCode = "12345",
    Country = "US"
};
var response = api.UpdateAddress(user.UserHandle, user.PrivateKey, address);

// Success Object Response
Console.WriteLine(response.StatusCode); // 200
var parsedResponse = (AddressResponse)response.Data;
Console.WriteLine(parsedResponse.Success); // true
Console.WriteLine(parsedResponse.Status); // SUCCESS
Console.WriteLine(parsedResponse.Message); // Successfully updated address
Console.WriteLine(parsedResponse.Address.AddedEpoch);
Console.WriteLine(parsedResponse.Address.ModifiedEpoch);
Console.WriteLine(parsedResponse.Address.Uuid);
Console.WriteLine(parsedResponse.Address.Nickname);
Console.WriteLine(parsedResponse.Address.StreetAddress1);
Console.WriteLine(parsedResponse.Address.StreetAddress2);
Console.WriteLine(parsedResponse.Address.City);
Console.WriteLine(parsedResponse.Address.State);
Console.WriteLine(parsedResponse.Address.Country);
Console.WriteLine(parsedResponse.Address.PostalCode);

Responses

Status Codesuccess AttributeDescription
200trueAddress was successfully updated.
400falseBad request format - check validation_details for more information.
404falseUUID is not associated with an address registered to the given user.
403falseauthsignature or usersignature header was absent or incorrect.

/update/entity

Requests

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

For individual entities, you can pass any of the following keys:

  • first_name
  • last_name
  • entity_name
  • birthdate

For business entities, you can pass any of the following keys:

  • entity_name
  • birthdate
  • business_type
  • naics_code
  • doing_business_as
  • business_website
  • registration_state

Note that you cannot convert an individual user to a business or a business to an individual.

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

Both authsignature and usersignature headers 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).

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/update/entity HTTP/1.1
sandbox.silamoney.com
Content-Type: application/json
// if using OAuth2
Authorization: Bearer [GENERATED JWT TOKEN HERE]
// if using ECDSA
authsignature: [GENERATED AUTHSIGNATURE HEX STRING HERE]

{
    "header": {
        "created": 1234567890,
        "app_handle": "your_app_handle",
        "user_handle": "your_individual_end_user",
        "reference": "<your unique id>"
    },
    "session_identifier": "Sardine session key", //required for Stearns
    "first_name": "Newfirst",
    "last_name": "Newlast",
    "entity_name": "New Full Name",
    "birthdate": "1990-02-28"
}

***

HTTP/1.1 200 OK

{
    "success": true,
    "message": "Successfully updated entity with handle \"your_individual_end_user\".",
    "user_handle": "your_individual_end_user",
    "entity_type": "individual",
    "entity": {
        "created_epoch": 1599090039,
        "entity_name": "New Full Name",
        "birthdate": "1990-02-28",
        "first_name": "Newfirst",
        "last_name": "Newlast"
    },
    "status": "SUCCESS",
    "reference": "<your unique id>"
}
// Individual
const entity = {
  first_name: "NewFirst",
  last_name: "NewLast",
  entity_name: "NewFirst NewLast",
  birthdate: "1994-01-08",
};

const res = await sila.updateEntity(handle, key, entity);

console.log(res.statusCode);
console.log(res.data.success);
console.log(res.data.status);
console.log(res.data.message);
console.log(res.data.entity_type);
console.log(res.data.user_handle);
console.log(res.data.entity.created_epoch);
console.log(res.data.entity.entity_name);
console.log(res.data.entity.birthdate);
console.log(res.data.entity.first_name);
console.log(res.data.entity.last_name);

// Business
const business = {
  entity_name: "New Company",
  business_type: "corporation",
  naics_code: 721,
  doing_business_as: "NC Ltc.",
  business_website: "https://newdomain.go",
  registration_state: "OR",
};

const res = await sila.updateEntity(handle, key, business);

console.log(res.statusCode);
console.log(res.data.success);
console.log(res.data.status);
console.log(res.data.message);
console.log(res.data.entity_type);
console.log(res.data.user_handle);
console.log(res.data.entity.created_epoch);
console.log(res.data.entity.entity_name);
console.log(res.data.entity.business_type);
console.log(res.data.entity.naics_code);
console.log(res.data.entity.doing_business_as);
console.log(res.data.entity.business_website);
console.log(res.data.entity.registration_state);
# Update Business Entity
payload = {
    "user_handle": business_handle,
    "entity_name": entity_name,
    "birthdate": birthdate,
    "business_type": business_type,
    "naics_code": naics_code,
    "doing_business_as": doing_business_as,
    "business_website": business_website,
    "registration_state":"NY"
}
response = silasdk.User.updateRegistrationData(app, silasdk.RegistrationFields.ENTITY, payload, eth_private_key)

# Success Response
{
    "status_code": 200,
    "success": true,
    "message": "Successfully updated entity with handle your_business_end_user.",
    "user_handle": "your_business_end_user",
    "entity_type": "business",
    "entity": {
        "created_epoch": 1599090039,
        "entity_name": "New Company",
        "birthdate": "1990-02-28",
        "business_type": "corporation",
        "naics_code": 721,
        "doing_business_as": "NC Limited",
        "business_website": "https://yourwebsite.domain",
        "business_uuid": "2966e38f-e713-4994-a22f-56e076963d01",
        "naics_category": "Accommodation and Food Services",
        "naics_subcategory": "Accommodation",
        "registration_state":"NY"
    },
    "status": "SUCCESS"
}
// Individual entity
UserHandleMessage user = UserHandleMessage.builder()
        .userHandle("user_handle")
        .userPrivateKey("user_private_key")
        .build();
IndividualEntityMessage message = IndividualEntityMessage.builder()
        .firstName("NewFirst")
        .lastName("NewLast")
        .entityName("NewFirst NewLast")
        .birthdate(LocalDate.of(1994, 1, 8))
        .build();
ApiResponse response = api.updateEntity(user, message);

// Success response
System.out.println(response.getStatusCode()); // 200
IndividualEntityResponse parsedResponse = (IndividualEntityResponse) response.getData();
System.out.println(parsedResponse.getSuccess()); // true
System.out.println(parsedResponse.getStatus()); // SUCCESS
System.out.println(parsedResponse.getMessage()); // Successfully updated entity
System.out.println(parsedResponse.getUserHandle()); // user_handle
System.out.println(parsedResponse.getEntityType()); // individual
System.out.println(parsedResponse.getEntity().getCreatedEpoch());
System.out.println(parsedResponse.getEntity().getEntityName());
System.out.println(parsedResponse.getEntity().getBirthdate());
System.out.println(parsedResponse.getEntity().getFirstName());
System.out.println(parsedResponse.getEntity().getLastName());

// Business entity
UserHandleMessage user = UserHandleMessage.builder()
        .userHandle("user_handle")
        .userPrivateKey("user_private_key")
        .build();
BusinessEntityMessage message = BusinessEntityMessage.builder()
        .entityName("New Company")
        .birthdate(LocalDate.now())
        .businessType("corporation")
        .naicsCode(721)
        .doingBusinessAs("NC")
        .businessWebsite("https://somedomain.go")
        .registrationState("registration state") // Optional for KYB flow
        .build();
ApiResponse response = api.updateEntity(user, message);

// Success response
System.out.println(response.getStatusCode()); // 200
BusinessEntityMessage parsedResponse = (BusinessEntityMessage) response.getData();
System.out.println(parsedResponse.getSuccess()); // true
System.out.println(parsedResponse.getStatus()); // SUCCESS
System.out.println(parsedResponse.getMessage()); // Successfully updated entity
System.out.println(parsedResponse.getUserHandle()); // user_handle
System.out.println(parsedResponse.getEntityType()); // business
System.out.println(parsedResponse.getEntity().getCreatedEpoch());
System.out.println(parsedResponse.getEntity().getEntityName());
System.out.println(parsedResponse.getEntity().getBirthdate());
System.out.println(parsedResponse.getEntity().getBusinessType());
System.out.println(parsedResponse.getEntity().getNaicsCode());
System.out.println(parsedResponse.getEntity().getNaicsCategory());
System.out.println(parsedResponse.getEntity().getNaicsSubcategory());
System.out.println(parsedResponse.getEntity().getBusinessUuid());
System.out.println(parsedResponse.getEntity().getDoingBusinessAs());
System.out.println(parsedResponse.getEntity().getBusinessWebsite());
System.out.println(parsedResponse.getEntity().getRegistrationState());
// Request - Individual
use DateTime;

$userHandle = 'user.silamoney.eth';
$privateKey = 'some private key';
$entityName = 'Full Name'; // Optional. The individual full name
$birthdate = new DateTime::createFromFormat('m/d/Y', '1/8/1960'); // Optional. Only date part will be taken when sent to api
$firstName = 'First'; // Optional. The individual first name
$lastName = 'Last'; // Optional. The individual last name
$response = $client->updateEntity($userHandle, $privateKey, $firstName, $lastName, $entityName, $birthdate);

// Response 200 - Individual
echo $response->getStatusCode(); // 200
echo $response->getData()->success; // TRUE
echo $response->getData()->status; // SUCCESS
echo $response->getData()->message; // Successfully added identity to user user.silamoney.eth.
echo $response->getData()->user_handle;
echo $response->getData()->entity_type; // individual
echo $response->getData()->entity->created_epoch;
echo $response->getData()->entity->entity_name; // Full Name
echo $response->getData()->entity->birthdate; // 1960-01-08
echo $response->getData()->entity->first_name; // First
echo $response->getData()->entity->last_name; // Last

// Request - Business
use DateTime;

$userHandle = 'user.silamoney.eth';
$privateKey = 'some private key';
$entityName = 'Company Name'; // Optional. The individual full name
$birthdate = new DateTime::createFromFormat('m/d/Y', '1/8/2009'); // Optional. Only date part will be taken when sent to api
$businessType = 'corporation'; // Optional. You can get this values from getBusinessTypes
$naicsCode = 721; // Optional. You can get this codes from getNaicsCategories
$doingBusinessAs = 'Public Company Name'; // Optional.
$businessWebsite = 'https://yourcompony.domain'; // Optional. Must be a valid URL
$registrationState = "LA"; // Optional

$response = $client->updateBusinessEntity($userHandle, $privateKey, $entityName, $birthdate, $businessType, $naicsCode, $doingBusinessAs, $businessWebsite, $registrationState);

// Response 200 - Business
echo $response->getStatusCode(); // 200
echo $response->getData()->success; // TRUE
echo $response->getData()->status; // SUCCESS
echo $response->getData()->message; // Successfully added identity to user user.silamoney.eth.
echo $response->getData()->entity_type; // business
echo $response->getData()->entity->created_epoch;
echo $response->getData()->entity->entity_name; // Company Name
echo $response->getData()->entity->birthdate; // 2009-01-08
echo $response->getData()->entity->business_type; // corporation
echo $response->getData()->entity->naics_code; // 721
echo $response->getData()->entity->business_uuid; // The business uuid
echo $response->getData()->entity->naics_category; // The NAICS category
echo $response->getData()->entity->naics_subcategory; // The NAICS subcategory
echo $response->getData()->entity->doing_business_as; // Publick Company Name
echo $response->getData()->entity->business_website; // https://yourcompany.domain
// Request - Individual
var entity = new IndividualEntityMessage
{
    FirstName = "NewFirst",
    LastName = "NewLast",
    EntityName = "NewFirst NewLast",
    BirthDate = new DateTime(1994, 1, 8)
};
var response = api.UpdateEntity(user.UserHandle, user.PrivateKey, entity);

// Success Object Response - Individual
Console.WriteLine(response.StatusCode); // 200
var parsedResponse = (IndividualEntityResponse)response.Data;
Console.WriteLine(parsedResponse.Success); // true
Console.WriteLine(parsedResponse.Status); // SUCCESS
Console.WriteLine(parsedResponse.Message); // Successfully updated entity
Console.WriteLine(parsedResponse.UserHandle); // youruserhandle
Console.WriteLine(parsedResponse.EntityType); // individual
Console.WriteLine(parsedResponse.Entity.CreatedEpoch);
Console.WriteLine(parsedResponse.Entity.EntityName);
Console.WriteLine(parsedResponse.Entity.Birthdate);
Console.WriteLine(parsedResponse.Entity.FirstName);
Console.WriteLine(parsedResponse.Entity.LastName);
POST /0.2/update/entity HTTP/1.1
Host: sandbox.silamoney.com
authsignature: [GENERATED AUTHSIGNATURE HEX STRING HERE]
usersignature: [GENERATED USERSIGNATURE HEX STRING HERE]
Content-Type: application/json

{
    "header": {
        "created": 1234567890,
        "app_handle": "your_app_handle",
        "user_handle": "your_business_end_user",
        "reference": "<your unique id>"
    },
    "business_type": "corporation",
    "entity_name": "Your Business Customer, Inc.",
    "birthdate": "1975-01-15",
    "naics_code": 721,
    "doing_business_as": "Your Business Customer Alias Co."
    "registration_state": "OR",
    "business_website": "http://www.yourbusinesscustomer.com"
}

***

HTTP/1.1 200 OK

{
    "success": true,
    "message": "Successfully updated entity with handle \"your_business_end_user\".",
    "user_handle": "your_business_end_user",
    "entity_type": "business",
    "entity": {
        "created_epoch": 1599090039,
        "business_type": "corporation",
        "entity_name": "Your Business Customer, Inc.",
        "birthdate": "1975-01-15",
        "naics_code": 721,
        "doing_business_as": "Your Business Customer Alias Co."
        "registration_state": "OR",
        "business_website": "http://www.yourbusinesscustomer.com"
    },
    "status": "SUCCESS",
    "reference": "<your unique id>"
}
// Request - Business
var entity = new BusinessEntityMessage
{
    EntityName = "New Company",
    BusinessType = "type",
    NaicsCode = 123,
    DoingBusinessAs = "NC Ltd.",
    BusinessWebsite = "https://domain.go",
    RegistrationState="DC"
};
var response = api.UpdateEntity(user.UserHandle, user.PrivateKey, entity);

// Success Object Response - Business
Console.WriteLine(response.StatusCode); // 200
var parsedResponse = (BusinessEntityResponse)response.Data;
Console.WriteLine(parsedResponse.Success); // true
Console.WriteLine(parsedResponse.Status); // SUCCESS
Console.WriteLine(parsedResponse.Message); // Successfully updated entity
Console.WriteLine(parsedResponse.UserHandle); // youruserhandle
Console.WriteLine(parsedResponse.EntityType); // business
Console.WriteLine(parsedResponse.Entity.CreatedEpoch);
Console.WriteLine(parsedResponse.Entity.EntityName);
Console.WriteLine(parsedResponse.Entity.BusinessType);
Console.WriteLine(parsedResponse.Entity.NaicsCode);
Console.WriteLine(parsedResponse.Entity.BusinessUuid);
Console.WriteLine(parsedResponse.Entity.NaicsCategory);
Console.WriteLine(parsedResponse.Entity.NaicsSubcategory);
Console.WriteLine(parsedResponse.Entity.DoingBusinessAs);
Console.WriteLine(parsedResponse.Entity.BusinessWebsite);
Console.WriteLine(parsedResponse.Entity.RegistrationState); // DC

Responses

Status Codesuccess AttributeDescription
200trueEntity was successfully updated.
400falseBad request format - check validation_details for more information.
403falseauthsignature or usersignature header was absent or incorrect.