/register

Registers end user PII into the Sila database and assigns a user_handle to the new entity.

👍

This doc has been updated with Priority specifications.

/register is the first step in end user onboarding after you have confirmed the user_handle you want to assign to the entity is unique with /check_handle.

🚧

/register does NOT start KYC process

Please note that /register is only for creating a new entity with a unique user_handle and inputting end user PII into the Sila database. Calling /register does NOT kick off the KYC process.

❗️

Entities must have unique SSN's and EIN's

SANDBOX

Priority requires both EINs for businesses and EINs to be unique, even in Sandbox. We recommend using a random number generator for the SSN value. You will see unexpected errors and behavior reusing SSNs and EINs

PRODUCTION

You will receive an error trying to register an end user with an SSN that already exists in your app.

Required Registration Data

For individuals, required KYC data includes:

  • Full legal name
  • U.S. Social Security Number (Full 9-digit SSN)
  • Date of birth
  • A valid street address
    • For individuals, the street address must be their current home/residential address. P.O. Boxes and similar cannot be used unless the individual has a valid US Military P.O. Box on a military base.
      It's wise to call this out in your registration flow by prompting your users to input their current home address.
  • An email address with a valid domain
  • A phone number

For businesses, required data includes:

  • Legal business name
  • Doing Business As (can be legal name if there is not DBA)
  • Business website
  • Business EIN
  • NAICS code
  • Date of incorporation
  • Business address
  • Business email address with a valid domain
  • Business phone number
  • Registration state (2 letter US state abbreviation)
  • Business type (please note Trusts and Unincorporated Associations are no longer supported types on Priority)
  • Specifybusiness as the value for type

For individuals that will be linked asbusiness members to businesses as either a controlling officer of beneficial owner, id_document is also required. This is not a requirement for Admin business members. You do NOT need to upload an actual doc - just provide the appropriate data.

Testing

Provide block (case sensitive) as the first and last name for individual entities or entity name for business entities

  • Triggers the end user failing KYC. You may first get a documents_required status, but will end in failed

Provide generic test names for the first and last name for individual entities or entity name for business entities

  • Triggers the entity to move directly to passed

There is currently not a way to trigger a documents_required status and upload documentation to move that status to passed or any other status. We are actively working with Priority to provide this as an option.

Requests

Apps using Access Token Authorization

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

See Auth Token Overview 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 our ECDSA overview for more.

POST /0.2/register 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]
usersignature: [GENERATED USERSIGNATURE HEX STRING HERE]

{
  "header": {
    "created": 1234567890, // required
    "user_handle": "user_handle", // required
    "app_handle": "app_handle", // required
    "version": "0.2",
    "reference": "<your unique id>"
  },
  "address": {
    "address_alias": "home",
    "street_address_1": "123 Main Street", // required
    "city": "New City", // required
    "state": "OR", // required
    "country": "US", // required
    "postal_code": "97204-1234" // required
  },
  "identity": {
    "identity_alias": "SSN", // required
    "identity_value": "123452222" // required
  },
  "contact": {
		"contact_alias": "alias",
    "phone": "503-123-4567", // required
    "email": "[email protected]" // required
  },
  "entity": {
    "birthdate": "1900-01-31", // required
    "entity_name": "Example User", 
    "first_name": "Example", // required
    "last_name": "User", // required
    "type": "individual or business", // "business" value required for biz entities
  },
  "id_document": { 
	// this block required for BO or CO business members only
     "doc_type": "id_passport", // required for BO or CO only
     "doc_id": "123456789", // required for BO or CO only
     "doc_country": "US", // required for passport or green card
     "doc_state": "OR" // required for state ID or driver's license
	}
}

***

HTTP/1.1 200 OK

{
    "success": true,
    "message": "user_handle was successfully registered.",
    "reference": "1736982348",
    "status": "SUCCESS",
    "sila_reference_id": "req_u7wdunn7e5g8y9xfzg9v5jpeoa",
    "response_time_ms": "335"
}
POST /0.2/register HTTP/1.1
Host: 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]
usersignature: [GENERATED USERSIGNATURE HEX STRING HERE]

{
	"header": {
	  "created": 1234567890, // required
		"app_handle": "app_handle", // required
		"user_handle": "user_handle", // required
		"reference": "<your unique id>",
		"version": "0.2"
	},
	"identity": {
		"identity_alias": "EIN", // required
		"identity_value": "12-1234567" // required
	},
	"address": {
		"address_alias": "Office",
		"street_address_1": "123 Candelabra Blvd.", // required
		"city": "Portland", // required
		"state": "OR", // required
		"country": "US", // required
		"postal_code": "97204" // required
	},
	"contact": {
		"phone": "1231231234", // required
		"email": "[email protected]" // required
	},
	"entity": {
		"type": "business", // required for registering a business
		"entity_name": "Your Business Customer, Inc.", // required
		"business_type": "corporation", // required 
		"doing_business_as": "Your Business Customer Alias Co.", // required 
		"naics_code": 721, // required 
    "registration_state": "OR",  // required 
		"registration_date": "YYYY-MM-DD", // required 
		"business_website": "https://www.yourbusinesscustomer.com",
	}
}

***
  
HTTP/1.1 200 OK

{
    "message": "your_business_user has been successfully registered!",
    "reference": "<your unique id>",
    "status": "SUCCESS",
    "business_uuid": "b8859415-a535-4efe-b889-650abb4bd28d"
}
// Individual user
const user = new Sila.User();
user.handle = 'user_handle';
user.firstName = 'First';
user.lastName = 'Last';
user.addressAlias = 'your_address_alias';
user.address = '123 Main St';
user.address2 = 'Suite 216';
user.city = 'Anytown';
user.state = 'NY';
user.zip = '12345';
user.country = 'US';
user.contactAlias = 'your_contact_alias';
user.phone = '1234567890';
user.email = '[email protected]';
user.dateOfBirth = '1990-01-01';
user.ssn = '123456222';
user.type = 'individual';

// Business user
const user = new Sila.User();
user.handle = 'user_handle';
user.entity_name = 'test business';
user.addressAlias = 'your_address_alias';
user.address = '123 Main St';
user.address2 = 'Suite 216';
user.city = 'Anytown';
user.state = 'NY';
user.zip = '12345';
user.contactAlias = 'your_contact_alias';
user.phone = '1234567890';
user.ein = '320567252';
user.email = '[email protected]';
user.business_type = 'corporation';
user.businessTypeUuid = 'your-business-type-uuid';
user.business_website = 'https://www.yourbusinesscustomer.com';
user.doing_business_as = 'doing business co';
user.naics_code = 721;
user.type = 'business';
user.registration_state = 'OR';


const res = await Sila.register(user);

// Success Response Object
console.log(res.statusCode); // 200
console.log(res.data.success); // true
console.log(res.data.reference); // Random reference number
console.log(res.data.status); // SUCCESS
console.log(res.data.message); // User was successfully registered
# Individual User

payload = {
  "country": "US",
  "user_handle": 'user_handle',    # Required: Must not be already in use
  "first_name": 'Example',                # Required
  "last_name": 'User',                    # Required
  "entity_name": 'Example User',          # Required
  "identity_value": "123452222",          # Required (SSN)
  "identity_alias": "SSN",  
  "phone": 1234567890,                    # Required:  Must be a valid phone number (format not enforced)
  "email": "[email protected]",              # Required:  Must be a valid email address
  "address_alias": "default",  
  "street_address_1": '123 Main Street',  # Required:  Must be a valid USPS mailing address
  "city": 'New City',                     # Required:  Must be a valid US City matching the zip
  "state": 'OR',                          # Required:  Must be a 2 character US State abbr.
  "postal_code": 97204,                   # Required:  Must be a valid US Postal Code
  "crypto_address": '0x123...890',        # Required:  Must be a valid ethereum 20 byte address starting with 0x
  "birthdate": "1990-05-19",              # Required
}

# Business user

payload = {
  "country": "US",
  "user_handle": business_handle,
  "entity_name": 'Business name',
  "identity_alias": "EIN",
  "identity_value": "123452222",
  "phone": 1234567890,
  "email": "[email protected]",
  "address_alias": "default",
  "street_address_1": '1232 Main Street',
  "city": 'New City 2',
  "state": 'OR',
  "postal_code": 97204,
  "crypto_address": eth_address_3,
  "crypto_alias": "python_wallet_2",
  "type": "business",
  "business_type": "corporation",
  "registration_state": "NY",
  "business_website": "https://www.yourbusinesscustomer.com",
  "doing_business_as": "Your Business Customer Alias Co.",
  "naics_code": 721
}

# Make sure silaApp is initialized with registered app_private_key and app_handle.
User.register(silaApp, payload)

### Success Response Object
{
    status: 'SUCCESS',
    success: True,
    message: 'user.silamoney.eth has been submitted to KYC queue.',
    reference: 'd725a285-3cda-47cb-aa55-60db70460ae4',
    status_code: 200
}

### Failure Response Object
{
    status: 'FAILURE',
    message: 'error',
}
// Individual User
User user = new User(String userHandle, String firstName, String lastName, String streetAddress1, @Nullable String streetAddress2,
      String city, String state (2 characters), String postalCode (5 or 9 digit format), String phone, String email, String identityNumber (SSN format "123-45-6222"), String cryptoAddress, Date birthdate, String country (2 characters));
ApiResponse response = api.register(user);

// Business User
BusinessType businessType; //Get business type with api.getBusinessTypes()
NaicsCategoryDescription naicsCategory; //Get naics category with api.getNaicsCategories()

BusinessUser user = new BusinessUser("userhandle", "Office", "123 Main Street",
                "street address 2", "New City", "OR", "97204-1234", "503-123-4567", "[email protected]", "123452222", "crypto address", "entity name", businessType, "https://www.website.com", "doing business as", naicsCategory, String country (2 characters), boolean smsOptIn, String deviceFingerprint,String sessionIdentifier);
user.setRegistrationState("registration state"); // Optional for KYB flow

ApiResponse response = api.registerBusiness(user);

// Success Response
System.out.println(response.getStatusCode()); // 200
System.out.println(((BaseResponse)response.getData()).getReference());// Random reference number
System.out.println(((BaseResponse)response.getData()).getStatus()); // SUCCESS
System.out.println(((BaseResponse)response.getData()).getMessage()); // user was successfully registered.
System.out.println(((BaseResponse)response.getData()).getSuccess()); // true
// Generate Wallet
//This is a helper function that allows you to generate a wallet (private key & address) that you can then use to register a new user.

// **Important!** Sila does not custody these private keys. They should *never* be sent to us or disclosed to any third party. The private key will be used to sign all requests from the associated user for authentication purposes.

$wallet = $client->generateWallet();
print $wallet->getAddress();        // e.g. 0x9ae1e2a685c5f23981757ea0cb6f5b413aa5f29f
print $wallet->getPrivateKey();     // e.g. 0xe62049e7ca71d9223c8db6751e007ce000d686b7729792160787034e1c976c12

// You can also initialize a wallet using existing values, e.g.

$privateKey = '0xe62049e7ca71d9223c8db6751e007ce000d686b7729792160787034e1c976c12';
$address = '0x9ae1e2a685c5f23981757ea0cb6f5b413aa5f29f';
$wallet = $client->generateWallet($privateKey, $address);
print $wallet->getAddress();        // e.g. 0x9ae1e2a685c5f23981757ea0cb6f5b413aa5f29f
print $wallet->getPrivateKey();     // e.g. 0xe62049e7ca71d9223c8db6751e007ce000d686b7729792160787034e1c976c12

/* Wallet has two attributes:
- `address` is the public blockchain address that will be used when you call register()
- `private_key` is the private key associated with this address. This will _only_ be used to sign requests. **Keep this safe!** */

// For individual users
use Silamoney\Client\Domain\User;

$userHandle = 'user_handle';
$firstName = 'Sila';
$lastName = 'Money';
$streetAddress1 = 'Some location';
$streetAddress2 = 'In the world';
$city = 'your beautiful city';
$state = 'NY'; // 2 characters code only
$postalCode = '12345'; // can be 5 or 9 digits format
$phone = '1234567';
$email = '[email protected]';
$cryptoAddress = '0xabc123abc123abc123'; // Hex-encoded blockchain address (prefixed with "0x")
$identityNumber = '123-45-6222'; // SSN format
$datetime = new DateTime();
$birthDate = $datetime->createFromFormat('Y-m-d', '1935-8-1'); // Only date part will be taken when sent to api
$cryptoAlias = "Address 1";
$addressAlias = "home";
$contactAlias = "";

// Create user object
$user = new User($userHandle, $firstName, $lastName, $streetAddress1, $streetAddress2, $city, $state, $postalCode, $phone, $email, $identityNumber, $cryptoAddress, $birthDate, $cryptoAlias, $addressAlias, $contactAlias);

// Optional parameters can be set to null
$user = new User($userHandle, $firstName, $lastName, null, null, null, null, null, null, null, null, $cryptoAddress, $birthDate);

// You can use the UserBuilder to avoid using null on optional parameters
$builder = new UserBuilder();
$user = $builder->handle($userHandle)->firstName($firstName)->lastName($lastName)->cryptoAddress($cryptoAddress)->birthDate($birthDate)->sessionIdentifier($sessionIdentifier)->build();

// Call the api
$response = $client->register($user);

// For business users
use Silamoney\Client\Domain\BusinessUser;

// Fill your data
$businessHandle = 'business.silamoney.eth';
$name = 'Your Business Inc.';
$streetAddress1 = 'Some location';
$streetAddress2 = 'In the world'; // Optional.
$city = 'your beautiful city';
$state = 'NY'; // 2 characters code only
$postalCode = '12345'; // can be 5 or 9 digits format
$phone = '123-456-7890';
$email = '[email protected]';
$identityNumber = '12-3456789'; // EIN format
$cryptoAddress = '0xabc123abc123abc123'; // Hex-encoded blockchain address (prefixed with "0x")
$naicsCode = 123; // The Naics code.
$businessType = 'Type'; // Required if $businessTypeUuid is not set. The business type name.
$businessTypeUuid = null; // Required if $businessType is not set. The business type uuid.
$doingBusinessAs = 'Your Business'; // Optional. If your business name is different from its legal name
$businessWebsite = 'http://www.yourdomain.com'; // Optional. The business website.
$cryptoAlias = "Address 1"; // optional
$addressAlias = "home"; // optional
$contactAlias = ""; // optional
$registrationState = "CA"; // optional

// Create business user object
$businessUser = new BusinessUser($businessHandle, $name, $streetAddress1, $streetAddress2, $city, $state, $postalCode, $phone, $email, $identityNumber, $cryptoAddress, $naicsCode, $businessType, $businessTypeUuid, $doingBusinessAs, $businessWebsite, $cryptoAlias, $addressAlias, $contactAlias, $registrationState);

// Optional parameters can be set to null
$businessUser = new BusinessUser($businessHandle, $name, null, null, null, null, null, null, null, null, $cryptoAddress, $naicsCode, $businessType, null, null, null);

// You can use the BusinessUserBuilder to avoid using null on optional parameters
$builder = new BusinessUserBuilder();
$builder->handle($userHandle)->entityName($name)->cryptoAddress($cryptoAddress)->naicsCode($naicsCode)->businessType($businessType)->registrationState('CA')->build();

// Call the api
$response = $client->registerBusiness($businessUser);


// Success 200
echo $response->getStatusCode(); // 200
echo $response->getData()->getReference(); // Random reference number
echo $response->getData()->getStatus(); // SUCCESS
echo $response->getData()->getMessage(); // User was successfully register
// Register business user

BusinessUser user = new BusinessUser
{
    UserHandle = "your_business_handle",
    EntityName = "Your Business Customer, Inc.",
    BusinessType = "corporation",
    BusinessTypeUuid = "your-business-type-uuid",
    BusinessWebsite = "https://www.yourbusinesscustomer.com",
    DoingBusinessAs = "Your Business Customer Alias Co.",
    NaicsCode = 101,
    CryptoAddress = "0x1234567890abcdef1234567890abcdef12345678",
    CryptoAlias = "Address 1",
    Phone = "503-123-4567",
    Email = "[email protected]",
    ContactAlias = "",
    IdentityValue = "12-1234567",
    StreetAddress1 = "123 Main Street",
    StreetAddress2 = "",
    City = "New City",
    State = "OR",
    PostalCode = "97204-1234",
    Country = "US",
    AddressAlias = "home",
    Type = "business",
    RegistrationState = "DC"
};
ApiResponse<object> response = api.Register(user);

// Success Response Object

Console.WriteLine(response.StatusCode); // 200
Console.WriteLine(((BusinessUserResponse)response.Data).Reference); // Random reference number
Console.WriteLine(((BusinessUserResponse)response.Data).Status); // SUCCESS
Console.WriteLine(((BusinessUserResponse)response.Data).Message); // user was successfully registered.
Console.WriteLine(((BusinessUserResponse)response.Data).BusinessUuid); // "d1b40916-3761-69fe-aa54-88b8ca4d1d5c"
Console.WriteLine(((BusinessUserResponse)response.Data).ResponseTimeMs); // API responses time
Console.WriteLine(((BusinessUserResponse)response.Data).Success); // true
// Register business user

BusinessUser user = new BusinessUser
{
    UserHandle = "your_business_handle",
    EntityName = "Your Business Customer, Inc.",
    BusinessType = "corporation",
    BusinessTypeUuid = "your-business-type-uuid",
    BusinessWebsite = "https://www.yourbusinesscustomer.com",
    DoingBusinessAs = "Your Business Customer Alias Co.",
    NaicsCode = 101,
    CryptoAddress = "0x1234567890abcdef1234567890abcdef12345678",
    CryptoAlias = "Address 1",
    Phone = "503-123-4567",
    Email = "[email protected]",
    ContactAlias = "",
    IdentityValue = "12-1234567",
    StreetAddress1 = "123 Main Street",
    StreetAddress2 = "",
    City = "New City",
    State = "OR",
    PostalCode = "97204-1234",
    Country = "US",
    AddressAlias = "home",
    Type = "business",
    RegistrationState = "DC"
};
ApiResponse<object> response = api.Register(user);

// Success Response Object

Console.WriteLine(response.StatusCode); // 200
Console.WriteLine(((BusinessUserResponse)response.Data).Reference); // Random reference number
Console.WriteLine(((BusinessUserResponse)response.Data).Status); // SUCCESS
Console.WriteLine(((BusinessUserResponse)response.Data).Message); // user was successfully registered.
Console.WriteLine(((BusinessUserResponse)response.Data).BusinessUuid); // "d1b40916-3761-69fe-aa54-88b8ca4d1d5c"
Console.WriteLine(((BusinessUserResponse)response.Data).ResponseTimeMs); // API responses time
Console.WriteLine(((BusinessUserResponse)response.Data).Success); // true

Request Attributes

KeyTypeDescriptionBusiness or Individual
headerJSON objectRequired.

Required keys:

created - Unix epoch timestamp in seconds. Must not be future-dated and must not be dated more than 5 minutes in the past.
app_handle - your app handle
user_handle - the user_handle to be assigned to the entity. Must be unique. Use /check_handle to determine availability of a user_handle.

Optional keys:

reference: Can be any string value for your own reference. If not provided, one will be assigned.
version: Cannot be null if key is present. Valid values: 0.2, v0.2, V0.2
Both
addressJSON objectRequired.

For individuals only, the street address must be their current home/residential address. PO Boxes are not accepted.
Both
address.
address_alias
StringOptional.

Min length 0, Max length 40. May not be null.
Both
address.
street_address_1
StringRequired.

Min length 3, Max length 40. May not be null.
Both
address.
street_address_2
StringOptional.

Min length 3, Max 40
Both
address.cityStringRequired.

Min length 2, Max 40
Both
address.stateStringRequired.

Requires valid 2 letter abbreviation for US states or territories.

Min length 2, Max 2
Example: OR
Both
address.postal_codeStringRequired.

Min length 5, Max 10
Examples: 97204-1234, 97204
Both
address.countryStringRequired.Both
identityJSON objectRequired.

Registers one ID (SSN, EIN) to an entity.
Both
identity.
identity_alias
StringRequired.

Values: SSN (for individuals) or EIN (for businesses)
Both
identity.
identity_value
StringRequired.

Must be unique in both Sandbox and Production.

If identity.identity_alias is an SSN, this value should match the required simplified SSN regex pattern: ^\d{3}-?\d{2}-?\d{4}$.

If identity.identity_alias is EIN, this value should match the required EIN regex pattern: ^\d{2}-?\d{7}$.
Both
contactJSON objectRequired.

Registers email, phone to an entity.
Both
contact.
contact_alias
StringOptional.

Min length 0, Max length 40
Both
contact.phoneStringOptional for request. Required to pass KYC.

Min length 10, Max length 30

This value should match the regex pattern: ([0-9])?((?[0-9]{3})?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4}|[a-zA-Z0-9]{7})$
Both
contact.emailStringRequired.

Must have a valid domain. Max length 254
Both
entityJSON objectRequired. Both
entity.birthdateDateRequired.

Required format: YYYY-MM-DD

If the entity type is individual, the end user must be 18+. Birthdate cannot be a future date.
Individuals only
entity.entity_nameStringRequired for businesses (legal name of business). Optional for individual.

Min Length 3, Max 200
Both
entity.first_nameStringRequired for individuals.
Optional for businesses.

Min Length 1, Max 40
Individuals
entity.last_nameStringRequired for individuals.
Optional for businesses.

Min Length 1, Max 40
Individuals
entity.typeStringRequired for business. Optional for individual.

Valid values: individual or business

If not specified, other validation fields assume individual entity type.
Businesses
entity.
business_type
StringRequired for businesses unless a business_type_uuid is provided.

Get from allowed business types in /get_business_types endpoint.

NOTE - Trusts and Unincorporated Associations no longer supported with Priority
Businesses only
entity.
business_type_uuid
StringRequired for businesses unless a business_type is provided.

Must be a valid UUID4 string.

Get from allowed business types in /get_business_types endpoint.

NOTE - Trusts and Unincorporated Associations no longer supported with Priority
Businesses only
entity.naics_codeIntegerRequired for businesses.

This field is used to specify a valid NAICS code.

Get from allowed NAICS codes in /get_naics_categories endpoint.
Businesses only
entity.
doing_business_as
StringRequired.

Input legal business name if the business does not have a DBA.
Businesses only
entity.registration_stateStringRequired for businesses.

2 letter US state or territory abbreviation.
Businesses only
entity.registration_dateStringRequired for businesses.

Date the business was incorporated/registered with the state.
Businesses only
entity.
business_website
StringOptional.

Must be in URI format.

This value should match the regex pattern: ^(?:[a-z0-9.-+])://(?:[^\s:@/]+ (?::[^\s:@/])?@)?(?:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:.(?:25 [0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|[[0-9a-f:.]+]|(a-z\xA1-\uFFFF0- 9?(?:.(?!-)[a-z\xA1-\uFFFF0-9-]{1,63}(?<!-)).(?!-)(?:[a-z\xA1- \uFFFF-]{2,63}|xn--[a-z0-9]{1,59})(?<!-).?|localhost))(?::\d {2,5})?(?:[/?#][^\s])?\Z

Example: http://www.yourdomain.com
Businesses only
id_documentJSON objectRequired for individuals that will be linked to businesses as controlling officers or beneficial owners. Optional otherwise.

Does NOT require a doc to be uploaded - just provide the data.
Individuals only
id_document.doc_typeStringRequired for individuals that will be linked to businesses as controlling officers or beneficial owners. Optional otherwise.

Type of doc the ID is being provided for.

Acceptable doc_types:

Passport = id_passport
Passport card = id_passport_card
Driver's license = id_drivers_license
Driver's permit = id_drivers_permit
State ID = id_state
Green card = doc_green_card
Individuals only
id_document.doc_idStringRequired for individuals that will be linked to businesses as controlling officers or beneficial owners. Optional otherwise.

ID number.

Character length requirements by doc_type:

- Passport and passport card: between 6 and 9 characters
- Driver's license, driver's permit, and state ID: between 4 and 24 characters
- Green card: between 7 and 9 characters
Individuals only
id_document.doc_countryStringRequired depending on doc_type for individuals that will be linked to businesses as controlling officers or beneficial owners. Optional otherwise.

Required if submitting a passport or a green card. Do not include if supplying doc_state for a state ID or driver's license.

Should be two characters. Support for up to 249 countries. List provided upon request.
Individuals only
id_document.doc_stateStringRequired depending on doc_type for individuals that will be linked to businesses as controlling officers or beneficial owners. Optional otherwise.

Required if submitting a state ID or driver's license. Do not include if supplying doc_country for a passport or green card.

Should be two characters. Includes:

- All 50 US states
- DC
- US Territories: AS, FM, GU, MH, MP, PR, PW, UM, VI
- Military postal abbreviations: AA, AE, AP
Individuals only
wallet_entry.wallet_addressstringBackwards compatibility only.

Legacy field for wallet address.
Both
wallet_entry.wallet_aliasstringBackwards compatibility only.

Legacy field for wallet nickname.
Both

Responses

Status CodeSuccess AttributeDescription
200trueHandle successfully added to system with KYC data.
400falseInvalid request body format (validation_details key will have more information if this is the case), handle already in use, or blockchain address already in use.
401falseauthsignature header was absent or incorrect.