← All standards
SEP-0009Source ↗

Standard KYC Fields

8 min · 1,845 words

#Simple Summary

This SEP defines a list of standard KYC, AML, and financial account-related fields for use in Stellar ecosystem protocols. Applications on Stellar should use these fields when sending or requesting KYC, AML, or financial account-related information with other parties on Stellar. This is an evolving list, so please suggest any missing fields that you use.

This is a list of possible fields that may be necessary to handle many different use cases, there is no expectation that any particular fields be used for a particular application. The best fields to use in a particular case is determined by the needs of the application.

#Encodings

ISO encodings are used for fields wherever possible. The table below lists the encodings used for different types of information.

Field TypeNumber of charactersFormat / Encoding
language2ISO 639-1
country3ISO 3166-1 alpha-3
date10ISO 8601 date-only format
phone numbervariesE.164
occupation3ISCO08

#Field Naming Conventions

Where possible we use field names from schema.org. Words are separated with underlines as that convention has previously been established in Stellar protocols.

#Dot Notation

Field names should always be used as strings. For example:

{
  "organization.name": "Stellar Development Foundation"
}

The dot notation is not an indication that the fields described should be contained in a nested object under a top-level key.

#Natural Person Fields

NameTypeDescription
family_name or last_namestringFamily or last name
given_name or first_namestringGiven or first name
additional_namestringMiddle name or other additional name
address_country_codestringcountry code for current address
state_or_provincestringname of state/province/region/prefecture
citystringname of city/town
postal_codestringPostal or other code identifying user's locale
addressstringEntire address (country, state, postal code, street address, etc...) as a multi-line string
mobile_numberstringMobile phone number with country code, in E.164 format unless specified differently on mobile_number_format field. It could be hashed in case mobile_number_format is defined as hash
mobile_number_formatstringExpected format of the mobile_number field. E.g.: E.164, hash, etc... In case this field is not specified, receiver should assume it's in E.164 format
email_addressstringEmail address
birth_datedateDate of birth, e.g. 1976-07-04
birth_placestringPlace of birth (city, state, country; as on passport)
birth_country_codestringISO Code of country of birth
tax_idstringTax identifier of user in their country (social security number in US)
tax_id_namestringName of the tax ID (SSN or ITIN in the US)
occupationnumberOccupation ISCO code
employer_namestringName of employer
employer_addressstringAddress of employer
language_codestringprimary language
id_typestringpassport, drivers_license, id_card, etc...
id_country_codestringcountry issuing passport or photo ID as ISO 3166-1 alpha-3 code
id_issue_datedateID issue date
id_expiration_datedateID expiration date
id_numberstringPassport or ID number
photo_id_frontbinaryImage of front of user's photo ID or passport
photo_id_backbinaryImage of back of user's photo ID or passport
notary_approval_of_photo_idbinaryImage of notary's approval of photo ID or passport
ip_addressstringIP address of customer's computer
photo_proof_residencebinaryImage of a utility bill, bank statement or similar with the user's name and address
sexstringmale, female, or other
proof_of_incomebinaryImage of user's proof of income document
proof_of_livenessbinaryvideo or image file of user as a liveness proof
referral_idstringUser's origin (such as an id in another application) or a referral code

#Financial Account Fields

These fields should be used to request or provide information about off-chain financial accounts. Because both natural persons and organizations can use the same types of financial accounts, these fields can be used to request or provide information about natural persons or organizations. The organization. prefix should be used when requesting or providing fields related to an organization.

Note that some of these fields are generic, such as bank_number, which could potentially be used to identify a bank in any country, and some fields are specific to a given country, such as cbu_number, which contains a bank number in addition to other pieces of information. In order to optimize for the user's experience, it is recommended that applications use fields that are the most familiar, which are often specific to a given country or financial system.

NameTypeDescription
bank_namestringName of the bank. May be necessary in regions that don't have a unified routing system.
bank_account_typestringchecking or savings
bank_account_numberstringNumber identifying bank account
bank_numberstringNumber identifying bank in national banking system (routing number in US)
bank_phone_numberstringPhone number with country code for bank
bank_branch_numberstringNumber identifying bank branch
external_transfer_memostringA destination tag/memo used to identify a transaction
clabe_numberstringBank account number for Mexico
cbu_numberstringClave Bancaria Uniforme (CBU) or Clave Virtual Uniforme (CVU).
cbu_aliasstringThe alias for a Clave Bancaria Uniforme (CBU) or Clave Virtual Uniforme (CVU).
mobile_money_numberstringMobile phone number in E.164 format with which a mobile money account is associated. Note that this number may be distinct from the same customer's mobile_number.
mobile_money_providerstringName of the mobile money service provider.
crypto_addressstringAddress for a cryptocurrency account
crypto_memostring(deprecated, use external_transfer_memo instead) A destination tag/memo used to identify a transaction

#Organization Fields

NameTypeDescription
organization.namestringFull organization name as on the incorporation
organization.VAT_numberstringOrganization VAT number
organization.registration_numberstringOrganization registration
organization.registration_datestringDate the organization was registered
organization.registered_addressstringOrganization registered address
organization.number_of_shareholdersnumberOrganization shareholder number
organization.shareholder_namestringCan be an organization or a person
organization.photo_incorporation_docbinaryImage of incorporation documents
organization.photo_proof_addressbinaryImage of a utility bill, bank statement with the organization's name and address
organization.address_country_codestringcountry code for current address
organization.state_or_provincestringname of state/province/region/prefecture
organization.citystringname of city/town
organization.postal_codestringPostal or other code identifying organization's locale
organization.director_namestringOrganization registered managing director
organization.websitestringOrganization website
organization.emailstringOrganization contact email
organization.phonestringOrganization contact phone

#Addresses

Address formatting varies widely from country to country and even within each country. See here for details. Rather than attempting to create a field for each possible part of an address in every country, this protocol takes a middle of the road approach. Address fields that are fairly universal can be encoded with the country_code, state_or_province, city, and postal_code fields. Full addresses, however, should be encoded as a single multi-line string in the address field. This allows any address in the world to be represented with a limited number of fields. If address parsing is necessary, parsing will be easier since the country, city, and postal code are already separate fields.

#Card fields

To pass card (such as credit card) details to the application, the client should pass card details via an object defined below. Note, that it's possible to either pass card details to the application, or the token, representing the card. This token may be fetched from a third-party source prior, for example, it can be a Stripe token, or any other service offering similar functionality may be used. When token is used, application should notify clients about the type of the token that it is expecting to receive. Usually, application would require either token, or set of: number, expiration_date, cvc and holder_name to be provided, but some applications may require extra fields.

NameTypeDescription
card.numberstringCard number
card.expiration_datedateExpiration month and year in YY-MM format (e.g. 29-11, November 2029)
card.cvcstringCVC number (Digits on the back of the card)
card.holder_namestringName of the card holder
card.networkstringBrand of the card/network it operates within (e.g. Visa, Mastercard, AmEx, etc.)
card.postal_codestringBilling address postal code
card.country_codestringBilling address country code in ISO 3166-1 alpha-2 code (e.g. US)
card.state_or_provincestringName of state/province/region/prefecture is ISO 3166-2 format
card.citystringName of city/town
card.addressstringEntire address (country, state, postal code, street address, etc...) as a multi-line string
card.tokenstringToken representation of the card in some external payment system (e.g. Stripe)

#Changelog

  • v1.18.0: Add mobile_money_number, mobile_money_provider, and bank_name fields to Financial Account Fields (#1498)
  • v1.17.0: Add mobile_number_format field to Natural Person Fields (#1481).
  • v1.16.0: Add external_transfer_memo field to Financial Account Fields (#1452).
  • v1.15.0: Add fields for card details (#1430).
  • v1.14.0: Add referral_id field (#1418).
  • v1.13.0: Add crypto related fields to financial account fields section. (#1382)
  • v1.12.0: Define financial account fields section. (#1367)
  • v1.11.0: Add bank_account_type for describing types of bank accounts. (#1344)
  • v1.10.0: Remove cvu_number, update cbu_number to also accept CVU numbers, and add cbu_alias to Natural Person KYC fields (#1339)
  • v1.9.0: Add cbu_number and cvu_number to Natural Person KYC fields (#1338)
  • v1.8.0: Add proof_of_liveness to Natural Person KYC field (#1323).
  • v1.7.0: Add proof_of_income to Natural Person KYC fields (#1310).
  • v1.6.0: Add clabe_number to Natural Person KYC fields (#1202).