Account Type
The Account object represents a user in the Verisoul system. Each account has a unique identifier, optional identity attributes (email, phone, name, username), and customizable metadata.Structure
Email Address
An Account can have have a string email address. Verisoul stores only one email address per Account. When updating an account with a new email address, the previous email address is replaced.Phone Number
An Account can have one phone number, provided in E.164 format (e.g.+14155550123). Like email, Verisoul stores one phone number per Account — updating an account with a new phone number replaces the previous one, and omitting the field keeps the stored value.
Before matching, the number is normalized: formatting characters (spaces, dashes, parentheses, dots) are stripped, and the result must be a valid E.164 number (+ followed by 8–15 digits). Two accounts sharing a normalized phone number are linked with the full-strength phone match type. See Multi-Accounting for details.
Username
An Account can have one username. Updating an account with a new username replaces the previous one, and omitting the field keeps the stored value. Before matching, the username is lowercased and only letters, digits,., _, and - are kept — so Jane.Doe and jane.doe match, while jane.doe and janedoe remain distinct. Two accounts sharing a normalized username are linked with the full-strength username match type.
Name
An Account can have a first and last name, passed as separatefirst_name and last_name fields. Each field is updated independently — a call that includes only first_name keeps the stored last_name.
For matching, the available parts are combined into a single name and normalized: lowercased, with punctuation and diacritics removed (so Jane O'Brien and JANE obrien match). Providing either part enables name matching. Because names are far less distinctive than phone numbers or usernames, a name match is moderate strength: a name match alone never fully links two accounts, but name plus another match (device, network, email) does.
Expected Countries
Theexpected_countries field is a declaration of where the account should legitimately operate from. Sending a non-empty list replaces the entire stored array (so a country can be removed by sending a new list without it). Omitting the field or sending an empty list [] leaves the stored declaration unchanged.
Once declared, sessions outside the expected countries carry the outside_expected_countries risk signal and raise the location spoofing score in proportion to how far outside they are. See Expected Countries for how both work.
Metadata
The metadata object allows you to store custom data with each account. When updating metadata:- New fields are added to the existing metadata
- Existing fields are overwritten with new values
- Other existing fields are preserved
Example: Metadata Updates
Starting metadata state:Lists
Thelists field allows you to specify which lists an account should be added to. This field is available in both:
- Server-side API: During authentication via
/session/authenticate - Client-side SDK: Using the
Verisoul.account()method
Example: Adding Account to Lists
Server-side (Authenticate API):- The account will be added to all specified lists during processing
- If a list does not exist, it will be automatically created (this will not cause the API to fail)
- Use good naming conventions: lowercase with dashes or underscores, no special characters or whitespace
- Standard lists (allow, block, main_account) follow the list hierarchy rules
- Custom lists can be used for flexible account categorization
