IVMS-101 Format Guidelines
The payload to be encrypted should look like below, the ivms101 payload is as a child inside the key name “ivms101”: { … }.
{
"ivms101": {
//...
}
}
Where the required information depends on Legal Person or Natural Person to make a transaction, the following structure may help you to fill the info.
One validated IVMS structure sent from Originator requires “Originator”, “Beneficiary”, “OriginatingVASP” inside, and the case is sensitive.
Following structure overviews the structure in IVMS-101, please note that the case is sensitive and name, value type (Object or Array) is also important.
{
"ivms101": {
"Originator": {
"originatorPersons": [
// LegalPerson or NaturalPerson
],
"accountNumber": ["ACCOUNT NUMBER"]
},
"Beneficiary": {
"beneficiaryPersons": [
// LegalPerson or NaturalPerson
],
"accountNumber": ["ACCOUNT NUMBER"]
},
"OriginatingVASP": {
"originatingVASP": {
"legalPerson": {
// LegalPerson
}
}
},
"BeneficiaryVASP": {
"beneficiaryVASP": {
"legalPerson": {
// LegalPerson
}
}
}
// option: transferPath (IntermediaryVasp)
// option: payloadMetadata (TransliterationMethodCode)
}
}
About Field - Originator, Beneficiary
We assume that you already have both originator person and beneficiary person info in your system, the verify target is beneficiary person, the travel rule verify request will focus on verify the beneficiary info.
As the OriginatingVASP, should make sure that you put the person info in beneficiary, and if the beneficiary and originator is the same person, you could directly use the same info for Originator and Beneficiary fields.
As the BeneficiaryVASP, the info in the Beneficiary field is to let you know the person who makes a transaction to your service.
Transaction target could be a natural person or legal person (company), it use the different structure in IVMS, please refer to the section:
- Example - Natural Person
- Example - Legal Person
About Field - OriginatingVASP
If you initiate the Before On-Chain verify flow, that means you are OriginatingVASP, please fill your company entity info into the corresponding field.
(For initiator) The above's example struct is following:
{
"ivms101": {
// Your company info (Because you're an originating VASP)
"OriginatingVASP": {
"originatingVASP": {
// required, you are an legal person
"legalPerson": {
"countryOfRegistration": "[2-Alpha Country Code]",
// required
"geographicAddress": [
{
"country": "[2-Alpha Country Code]",
"townName": "[Town Name]",
"addressType": "GEOG",
"addressLine": ["[Full Address]"]
}
],
"name": {
"nameIdentifier": [
{
// required
"legalPersonName": "[Your Company Name]",
"legalPersonNameIdentifierType": "LEGL"
}
]
},
"nationalIdentification": {
"countryOfIssue": "[2-Alpha Country Code]",
"nationalIdentifier": "[ID Code]",
"nationalIdentifierType": "LEGL",
"registrationAuthority": "[The name who (Government,Department,Company...etc) authorized this identity number]"
}
}
}
},
"Originator": {
// ...
},
"Beneficiary": {
// ...
}
}
}
Once you receive the Before On-Chain request (as receiver server), you have to put your company info to BeneficiaryVASP
and encrypt it back again.
{
"ivms101": {
// Your company info (Because you're an beneficiary VASP)
"BeneficiaryVASP": {
"beneficiaryVASP": {
// required, you are an legal person
"legalPerson": {
"countryOfRegistration": "[2-Alpha Country Code]",
// required
"geographicAddress": [
{
"country": "[2-Alpha Country Code]",
"townName": "[Town Name]",
"addressType": "GEOG",
"addressLine": ["[Full Address]"]
}
],
"name": {
"nameIdentifier": [
{
// required
"legalPersonName": "[Your Company Name]",
"legalPersonNameIdentifierType": "LEGL"
}
]
},
"nationalIdentification": {
"countryOfIssue": "[2-Alpha Country Code]",
"nationalIdentifier": "[ID Code]",
"nationalIdentifierType": "LEGL",
"registrationAuthority": "[The name who (Government,Department,Company...etc) authorized this identity number]"
}
}
}
},
"OriginatingVASP": {
"originatingVASP": {
// required, you are an legal person
"legalPerson": {
"countryOfRegistration": "[2-Alpha Country Code]",
// required
"geographicAddress": [
{
"country": "[2-Alpha Country Code]",
"townName": "[Town Name]",
"addressType": "GEOG",
"addressLine": ["[Full Address]"]
}
],
"name": {
"nameIdentifier": [
{
// required
"legalPersonName": "[Your Company Name]",
"legalPersonNameIdentifierType": "LEGL"
}
]
},
"nationalIdentification": {
"countryOfIssue": "[2-Alpha Country Code]",
"nationalIdentifier": "[ID Code]",
"nationalIdentifierType": "LEGL",
"registrationAuthority": "[The name who (Government,Department,Company...etc) authorized this identity number]"
}
}
}
},
"Originator": {
// ...
},
"Beneficiary": {
// ...
}
}
}
About Field - BeneficiaryVASP
if you initiate a travel rule request for After On-Chain, that means you are BeneficiaryVASP
, please fill your company entity info into the corresponding field.
The above's example struct is following:
{
"ivms101": {
// Your company info (Because you're an beneficiary VASP)
"BeneficiaryVASP": {
"beneficiaryVASP": {
// required, you are an legal person
"legalPerson": {
"countryOfRegistration": "[2-Alpha Country Code]",
// required
"geographicAddress": [
{
"country": "[2-Alpha Country Code]",
"townName": "[Town Name]",
"addressType": "GEOG",
"addressLine": ["[Full Address]"]
}
],
"name": {
"nameIdentifier": [
{
// required
"legalPersonName": "[Your Company Name]",
"legalPersonNameIdentifierType": "LEGL"
}
]
},
"nationalIdentification": {
"countryOfIssue": "[2-Alpha Country Code]",
"nationalIdentifier": "[ID Code]",
"nationalIdentifierType": "LEGL",
"registrationAuthority": "[The name who (Government,Department,Company...etc) authorized this identity number]"
}
}
}
},
"Originator": {
// ...
},
"Beneficiary": {
// ...
}
}
}
Once you receive the After On-Chain request (as receiver server), you have to put your company info to OriginatingVASP
and encrypt it back again.
{
"ivms101": {
// Your company info (Because you're an originating VASP)
"OriginatingVASP": {
"originatingVASP": {
// required, you are an legal person
"legalPerson": {
"countryOfRegistration": "[2-Alpha Country Code]",
// required
"geographicAddress": [
{
"country": "[2-Alpha Country Code]",
"townName": "[Town Name]",
"addressType": "GEOG",
"addressLine": ["[Full Address]"]
}
],
"name": {
"nameIdentifier": [
{
// required
"legalPersonName": "[Your Company Name]",
"legalPersonNameIdentifierType": "LEGL"
}
]
},
"nationalIdentification": {
"countryOfIssue": "[2-Alpha Country Code]",
"nationalIdentifier": "[ID Code]",
"nationalIdentifierType": "LEGL",
"registrationAuthority": "[The name who (Government,Department,Company...etc) authorized this identity number]"
}
}
}
},
"BeneficiaryVASP": {
"beneficiaryVASP": {
// required, you are an legal person
"legalPerson": {
"countryOfRegistration": "[2-Alpha Country Code]",
// required
"geographicAddress": [
{
"country": "[2-Alpha Country Code]",
"townName": "[Town Name]",
"addressType": "GEOG",
"addressLine": ["[Full Address]"]
}
],
"name": {
"nameIdentifier": [
{
// required
"legalPersonName": "[Your Company Name]",
"legalPersonNameIdentifierType": "LEGL"
}
]
},
"nationalIdentification": {
"countryOfIssue": "[2-Alpha Country Code]",
"nationalIdentifier": "[ID Code]",
"nationalIdentifierType": "LEGL",
"registrationAuthority": "[The name who (Government,Department,Company...etc) authorized this identity number]"
}
}
}
},
"Originator": {
// ...
},
"Beneficiary": {
// ...
}
}
}