04 - IVMS101-part1
CodeVASP uses the IVMS101 standard to exchange personal information related to virtual asset transaction. https://intervasp.org/
- A field name of a message is expressed with camelCase whose first character starts with lowercase. But,
Originator,Beneficiary,OriginatorVASP, andBeneficiaryVASPobjects corresponding to Entity in ivms101 are expressed with PascalCase. - The values of all fields are not case-sensitive unless otherwise specified.
- The values of all fields are always expressed with a UTF-8 encoded string. (including boolean, integer, real number, etc.)
- In principle, the values of all fields shall be written in English except when Local Language is permitted.
- Please refer to complete natural person example json in complete-example.json file.
- Please refer to complete legal person example json in complete-example-legal-person.json file.
- Complete json schema is provided in json-schema.json file.
- You may use https://www.jsonschemavalidator.net/ to validate your json format.
- Select schema: IVMS101 by CodeVASP Protocol
Asset Transfer Authorization
Initial IVMS101 from an originator VASP
As an originator VASP, you need to send following to beneficiary VSAP. You should know the entityId of beneficiary from CodeVASP, however, you still do not know their VASP information, thus, only send following objects.
{
"Originator": {...},
"Beneficiary": {...},
"OriginatingVASP": {...}
}
Response IVMS101 from a beneficiary VASP
When beneficiary VASP response to originator, it should complete the IVMS101 format as following.
{
"Originator": {...},
"Beneficiary": {...},
"OriginatingVASP": {...},
"BeneficiaryVASP": {...}
}
You may also include more Beneficiary information in Beneficiary Object such as customerIdentification.
Asset Transfer Authorization IVMS101 Request
- ivms101(Required): This is an object defined according to the IVMS101 international standard for each subject involved in the transfer of virtual assets, such as
Beneficiary,BeneficiaryVASP,Originator, andOriginatorVASPas per the IVMS101 message standard. TheOriginators name, asset address,Beneficiary's asset address, andOriginatingVASPinformation in the 'Asset Transfer Authorization Request' shall be included, andBeneficiaryname is optional.- Originator(Required): Refers to the account holder who allows the Virtual Asset(VA) transfer from that account, the natural or legal person that places the order with the originating VASP to perform the VA transfer.
- originatorPersons(Required): There are two types of objects,
naturalPerson(individual) andlegalPerson(corporate), and forlegalPerson, bothlegalPerson(corporation) andnaturalPerson(representative) information shall be set. This is an array object, and an element of the array shall define eithernaturalPersonorlegalPerson. For details, please refer to the [IVMS101 part2].- naturalPerson(Required): This is an object for setting information on a natural person, and the
nameinformation shall be set as required.- name(Required):
- nameIdentifier: Enter the legal name. If a transaction is made between VASPs in Korea, enter in Korean. If a transaction is made with VASPs outside Korea, enter in English. Please refer to the [IVMS101 part2].
- primaryIdentifier: If you cannot enter or separate the last name, enter the first name and last name together in order.
- secondaryIdentifier: Enter the first name. If first name and last name cannot be separated, omit them.
- nameIdentifierType: Fixed as
LEGL(legal)
- localNameIdentifier: If a transaction is made with VASPs outside Korea, this is defined to send a local name additionally.
- primaryIdentifier: Enter the last name in a local name separated by first name and last name. If they cannot be separated, enter the first name and last name together in order.
- secondaryIdentifier: Enter the first name in a local name separated by first name and last name. If they cannot be separated, omit them.
- nameIdentifierType: Fixed as
LEGL(legal)
- nameIdentifier: Enter the legal name. If a transaction is made between VASPs in Korea, enter in Korean. If a transaction is made with VASPs outside Korea, enter in English. Please refer to the [IVMS101 part2].
- dateAndPlaceOfBirth (Required):
- dateOfBirth: Enter date of birth in
1990-01-01format.
- dateOfBirth: Enter date of birth in
- customerIdentification(Optional): This is an identifier (UID or IDX), with which a VASP can identify an originator who transfers the assets
- name(Required):
- legalPerson(Optional): This is an object for setting information on an legal person, and the name object shall be set as required.
- name(Required):
- nameIdentifier: Enter the name of a legal person in the registration. If a transaction is made between domestic VASPs, enter it in Korean or in English, and If a transaction is made with VASPs outside of Korea, enter in English.
- legalPersonName: Legal person name
- legalPersonNameIdentifierType: Fixed as
LEGL(legal)
- nameIdentifier: Enter the name of a legal person in the registration. If a transaction is made between domestic VASPs, enter it in Korean or in English, and If a transaction is made with VASPs outside of Korea, enter in English.
- customerIdentification(Optional): This is a unique identifier (UID or IDX), with which a VASP can identify an originator who transfers the assets
- name(Required):
- naturalPerson(Required): This is an object for setting information on a natural person, and the
- accountNumber(Required): This is a wallet address which transfers the assets. If tag or memo value is required, separate them with
:and make one string. Please refer to [Verify Wallet Address].
- originatorPersons(Required): There are two types of objects,
- Beneficiary(Required): Fill in the information about the individual or legal entity and their representative who will receive the assets. When sending a request, you must include the
Beneficiaryinformation, which consists of the name and wallet address. The wallet address information is mandatory, the name information is optional if thetradePricedoes not exceed the Travel Rule threshold, but required if it does. The name information is Required whenisExceedingThresholdis true, and Optional whenisExceedingThresholdis false. ※ Considering the market volatility and global regulations, we recommend applying the Travel Rule to all transactions. In this case, set theisExceedingThresholdas False and enter the beneficiary's name.- beneficiaryPersons(Required): The
Beneficiaryobject must include a sub-object calledbeneficiaryPersons. The structure ofbeneficiaryPersonsis the same asoriginatorPersons. It can be divided intonaturalPersonorlegalPerson. When comparing the name entered with the actual name of the recipient, if the names do not match, the receiving VASP sends a denied response.- naturalPerson(Required or Optional): This is an object used to set information about an individual. It is Required when
isExceedingThresholdis true, and Optional whenisExceedingThresholdis false. - legalPerson(Required or Optional): This is an object used to set information about a legal entity. It is Required when
isExceedingThresholdis true, and Optional whenisExceedingThresholdis false.
- naturalPerson(Required or Optional): This is an object used to set information about an individual. It is Required when
- accountNumber(Required): This is a wallet address to which the assets are transferred If tag or memo value is required, separate them with
:and make one string.
- beneficiaryPersons(Required): The
- OriginatingVASP(Required): Refers to the VASP which initiates the Virtual Asset(VA) transfer and transfers the VA upon receiving the request for a VA transfer on behalf of the originator.
- originatingVASP(Required):
- legalPerson(Required): This is the information on the legal person of a VASP to whom you want to transfer an asset
- name(Required):
- nameIdentifier: Name information following international notation. (English name)
- legalPersonName: English legal person name
- legalPersonNameIdentifierType: Fixed as
LEGLlegal)
- nameIdentifier: Name information following international notation. (English name)
- geographicAddress(Optional): location in the registration documents of a legal person. You shall enter one of the legal person's registration number and address.
- addressType: Enter
GEOG. - townName: Enter the state/province name.
- addressLine: Enter the townName sub-address in the array format array of a string.
- country: This is a two-letter country code determined by ISO-3166-1 alpha-2. e.g.)
KR,JP,US, etc.
- addressType: Enter
- nationalIdentification(Optional): This is a legal person identification number which has been certified by the country i.e.a business registration number. You shall enter either the legal person's address or registration number.
- nationalIdentifier: Business registration number
- nationalIdentifierType:
RAID(Registration authority identifier) - registrationAuthority: 8 digits code. Please refer to [Registration Authority Section][IVMS101 part2]
- countryOfRegistration(Required): country of registration. This is a two-letter country code determined by ISO-3166-1 alpha-2. e.g.)
KR,JP,US, etc.
- name(Required):
- legalPerson(Required): This is the information on the legal person of a VASP to whom you want to transfer an asset
- originatingVASP(Required):
- Originator(Required): Refers to the account holder who allows the Virtual Asset(VA) transfer from that account, the natural or legal person that places the order with the originating VASP to perform the VA transfer.
Asset Transfer Authorization IVMS101 Response
- ivms101(Required): This is an object defined according to the IVMS101 international standard for each subject involved in the transfer of virtual assets, such as
Beneficiary,BeneficiaryVASP,Originator, andOriginatorVASPas per the IVMS101 message standard. For theOriginator,OriginatingVASPinformation In 'Asset Transfer Authorization Response', copy the data of the request, and enter theBeneficiaryandBeneficiaryVASPdata.- Originator(Required): This is information on the originator (individual) or legal person and representative who wants to transfer the assets, and the request value is copied and used.
- Beneficiary(Required): information on the originator (individual) or legal person and representative to whom the assets are transferred. You shall enter and send the name and address of an asset in the 'Asset Transfer Authorization Response'.
- beneficiaryPersons(Required): This shall be included in the
Beneficiaryobject, which is the parent object, and since the structure is the same asoriginatorPersons, please refer to theoriginatorPersonsdescription in the request.- naturalPerson(Required): This is an object for setting information on an individual, and the
nameinformation shall be set as required. - legalPerson(Optional): This is an object for setting information on a legal person, and the
nameinformation shall be set as required.
- naturalPerson(Required): This is an object for setting information on an individual, and the
- accountNumber(Required): This is a wallet address which transfers the assets. If tag or memo value is required, separate them with
:and make one string. Please refer to [Verify Wallet Address].
- beneficiaryPersons(Required): This shall be included in the
- OriginatingVASP(Required): Copy and use the value of the request as the information on the originating VASP to which you want to transfer the asset.
- BeneficiaryVASP(Required): This is the information on a beneficiary's VASP to which assets are transferred. Since the structure is the same as
OriginatingVASP, please refer to theOriginatingVASPdescription in the request.
Asset Transfer Data Request
The asset transfer data request, in contrast to the asset transfer authorization request, is a method to obtain travel rule data from the counterparty when an anonymous deposit has occurred following an already executed on-chain transaction.
Initial IVMS101 from a Beneficiary VASP
As a Beneficiary VASP, the following object needs to be sent to the Originator VASP. The entityId of the Originator VASP is already known through the TXID lookup, but the information of the sender is unknown, so it is sent as follows.
{
"Beneficiary": {...},
"BeneficiaryVASP": {...}
}
Response IVMS101 from an Originator VASP
As the Originator VASP, you respond to the Beneficiary VASP's request by adding the Originator and OriginatorVASP objects.
{
"Originator": {...},
"OriginatingVASP": {...},
"Beneficiary": {...},
"BeneficiaryVASP": {...}
}
Asset Transfer Data Request IVMS101 Request
- ivms101(Required): This is an object defined according to the IVMS101 international standard for each subject involved in the transfer of virtual assets, such as
Beneficiary,BeneficiaryVASP,Originator, andOriginatorVASPas per the IVMS101 message standard. TheBeneficiaryandBeneficiaryVASPinformation in the 'Asset Transfer Data Request' shall be included.- Beneficiary(Required): Enter information about the recipient (individual) or the corporation and its representative receiving the assets. When sending a request, you must include
Beneficiaryinformation, which consists of ① name and ② wallet address. The wallet address information is mandatory.- beneficiaryPersons(Required): There are two types of objects:
naturalPerson(individual) andlegalPerson(corporation). In the case of a corporation, you need to set bothlegalPerson(corporation) andnaturalPerson(representative) information. It is an array object, and each element of the array must define eithernaturalPersonorlegalPerson.- naturalPerson(Required): This is an object for setting information on a natural person, and the
nameinformation shall be set as required.- name(Required):
- nameIdentifier: Enter the legal name. If a transaction is made between VASPs in Korea, enter in Korean. If a transaction is made with VASPs outside Korea, enter in English. Please refer to the [IVMS101 part2].
- primaryIdentifier: If you cannot enter or separate the last name, enter the first name and last name together in order.
- secondaryIdentifier: Enter the first name. If first name and last name cannot be separated, omit them.
- nameIdentifierType: Fixed as
LEGL(legal)
- localNameIdentifier: If a transaction is made with VASPs outside Korea, this is defined to send a local name additionally.
- primaryIdentifier: Enter the last name in a local name separated by first name and last name. If they cannot be separated, enter the first name and last name together in order.
- secondaryIdentifier: Enter the first name in a local name separated by first name and last name. If they cannot be separated, omit them.
- nameIdentifierType: Fixed as
LEGL(legal)
- nameIdentifier: Enter the legal name. If a transaction is made between VASPs in Korea, enter in Korean. If a transaction is made with VASPs outside Korea, enter in English. Please refer to the [IVMS101 part2].
- customerIdentification(Optional): This is an identifier (UID or IDX), with which a VASP can identify a beneficiary who received the assets.
- name(Required):
- legalPerson(Optional): This is an object for setting information on an legal person, and the name object shall be set as required.
- name(Required):
- nameIdentifier: Enter the name of a legal person in the registration. If a transaction is made between domestic VASPs, enter it in Korean or in English, and If a transaction is made with VASPs outside of Korea, enter in English.
- legalPersonName: Legal person name
- legalPersonNameIdentifierType: Fixed as
LEGL(legal)
- nameIdentifier: Enter the name of a legal person in the registration. If a transaction is made between domestic VASPs, enter it in Korean or in English, and If a transaction is made with VASPs outside of Korea, enter in English.
- customerIdentification(Optional): This is a unique identifier (UID or IDX), with which a VASP can identify a beneficiary who received the assets.
- name(Required):
- naturalPerson(Required): This is an object for setting information on a natural person, and the
- accountNumber(Required): This is a wallet address which received the assets. If tag or memo value is required, separate them with
:and make one string.
- beneficiaryPersons(Required): There are two types of objects:
- BeneficiaryVASP(Required): Information of the VASP that received the assets.
- beneficiaryVASP(Required):
- legalPerson(Required): Information of the corporation of the VASP that received the assets.
- name(Required):
- nameIdentifier: Name information following international notation. (English name)
- legalPersonName: English legal person name
- legalPersonNameIdentifierType: Fixed as
LEGLlegal)
- nameIdentifier: Name information following international notation. (English name)
- geographicAddress(Optional): location in the registration documents of a legal person. You shall enter one of the legal person's registration number and address.
- addressType: Enter
GEOG. - townName: Enter the state/province name.
- addressLine: Enter the townName sub-address in the array format array of a string.
- country: This is a two-letter country code determined by ISO-3166-1 alpha-2. e.g.)
KR,JP,US, etc.
- addressType: Enter
- nationalIdentification(Optional): This is a legal person identification number which has been certified by the country i.e.a business registration number. You shall enter either the legal person's address or registration number.
- nationalIdentifier: Business registration number
- nationalIdentifierType:
RAID(Registration authority identifier) - registrationAuthority: 8 digits code. Please refer to [Registration Authority Section][IVMS101 part2]
- countryOfRegistration(Required): country of registration. This is a two-letter country code determined by ISO-3166-1 alpha-2. e.g.)
KR,JP,US, etc.
- name(Required):
- legalPerson(Required): Information of the corporation of the VASP that received the assets.
- beneficiaryVASP(Required):
- Beneficiary(Required): Enter information about the recipient (individual) or the corporation and its representative receiving the assets. When sending a request, you must include
Asset Transfer Data Request IVMS101 Response
- ivms101(Required): In the response object, the
OriginatorandOriginatingVASPinformation is created from the data found through the TXID. TheBeneficiaryandBeneficiaryVASPdata are used as they are from the request object.- Originator(Required): Refers to the account holder who allows the Virtual Asset(VA) transfer from that account, the natural or legal person that places the order with the originating VASP to perform the VA transfer.
- originatorPersons(Required): There are two types of objects,
naturalPerson(individual) andlegalPerson(corporate), and forlegalPerson, bothlegalPerson(corporation) andnaturalPerson(representative) information shall be set. This is an array object, and an element of the array shall define eithernaturalPersonorlegalPerson. For details, please refer to the [IVMS101 part2].- naturalPerson(Required): This is an object for setting information on a natural person, and the
nameinformation shall be set as required.- name(Required):
- nameIdentifier: Enter the legal name. If a transaction is made between VASPs in Korea, enter in Korean. If a transaction is made with VASPs outside Korea, enter in English. Please refer to the [IVMS101 part2].
- primaryIdentifier: If you cannot enter or separate the last name, enter the first name and last name together in order.
- secondaryIdentifier: Enter the first name. If first name and last name cannot be separated, omit them.
- nameIdentifierType: Fixed as
LEGL(legal)
- localNameIdentifier: If a transaction is made with VASPs outside Korea, this is defined to send a local name additionally.
- primaryIdentifier: Enter the last name in a local name separated by first name and last name. If they cannot be separated, enter the first name and last name together in order.
- secondaryIdentifier: Enter the first name in a local name separated by first name and last name. If they cannot be separated, omit them.
- nameIdentifierType: Fixed as
LEGL(legal)
- nameIdentifier: Enter the legal name. If a transaction is made between VASPs in Korea, enter in Korean. If a transaction is made with VASPs outside Korea, enter in English. Please refer to the [IVMS101 part2].
- customerIdentification(Optional): This is an identifier (UID or IDX), with which a VASP can identify an originator who transfers the assets
- name(Required):
- legalPerson(Optional): This is an object for setting information on an legal person, and the name object shall be set as required.
- name(Required):
- nameIdentifier: Enter the name of a legal person in the registration. If a transaction is made between domestic VASPs, enter it in Korean or in English, and If a transaction is made with VASPs outside of Korea, enter in English.
- legalPersonName: Legal person name
- legalPersonNameIdentifierType: Fixed as
LEGL(legal)
- nameIdentifier: Enter the name of a legal person in the registration. If a transaction is made between domestic VASPs, enter it in Korean or in English, and If a transaction is made with VASPs outside of Korea, enter in English.
- customerIdentification(Optional): This is a unique identifier (UID or IDX), with which a VASP can identify an originator who transfers the assets
- name(Required):
- naturalPerson(Required): This is an object for setting information on a natural person, and the
- accountNumber(Required): This is a wallet address of originator. If tag or memo value is required, separate them with
:and make one string.
- originatorPersons(Required): There are two types of objects,
- OriginatingVASP(Required): Refers to the VASP which initiates the Virtual Asset(VA) transfer and transfers the VA upon receiving the request for a VA transfer on behalf of the originator.
- originatingVASP(Required):
- legalPerson(Required): This is the information on the legal person of a VASP to whom you want to transfer an asset
- name(Required):
- nameIdentifier: Name information following international notation. (English name)
- legalPersonName: English legal person name
- legalPersonNameIdentifierType: Fixed as
LEGLlegal)
- nameIdentifier: Name information following international notation. (English name)
- geographicAddress(Optional): location in the registration documents of a legal person. You shall enter one of the legal person's registration number and address.
- addressType: Enter
GEOG. - townName: Enter the state/province name.
- addressLine: Enter the townName sub-address in the array format array of a string.
- country: This is a two-letter country code determined by ISO-3166-1 alpha-2. e.g.)
KR,JP,US, etc.
- addressType: Enter
- nationalIdentification(Optional): This is a legal person identification number which has been certified by the country i.e.a business registration number. You shall enter either the legal person's address or registration number.
- nationalIdentifier: Business registration number
- nationalIdentifierType:
RAID(Registration authority identifier) - registrationAuthority: 8 digits code. Please refer to [Registration Authority Section][IVMS101 part2]
- countryOfRegistration(Required): country of registration. This is a two-letter country code determined by ISO-3166-1 alpha-2. e.g.)
KR,JP,US, etc.
- name(Required):
- legalPerson(Required): This is the information on the legal person of a VASP to whom you want to transfer an asset
- originatingVASP(Required):
- Beneficiary(Required): Information of the recipient who received the assets. The object from the request are copied and used as they are.
- BeneficiaryVASP(Required): Information of the VASP that received the assets. The object from the request are copied and used as they are.
- Originator(Required): Refers to the account holder who allows the Virtual Asset(VA) transfer from that account, the natural or legal person that places the order with the originating VASP to perform the VA transfer.