복잡한 IVMS101표준의 필수값을 '자산 이전 허가 요청' 케이스별로 알아보겠습니다. '가상자산 주소 조회'는 필수값이 훨씬 간단하기 때문에, API 문서에서 확인해 주세요.

IVMS101 이해하기

IVMS101은 위의 이미지와 같이 매우 복잡한 구조로 형성이 되어 있습니다. 위의 구조도 하나의 예시 일뿐, 'naturalPerson'/'legalPerson'인지에 따라 혹은 'localNameIdentifier'를 사용하는지 등에 따라 상황별로 다양한 경우의 수가 나올 수 있습니다.

송수신 케이스별로 필수 값이 달라지기 때문에, 각 시나리오를 잘 이해하고 그에 맞게 필요한 항목들을 잘 입력하는 것이 중요합니다.

구조가 복잡해 보이지만 결국 'Originator', 'Beneficiary', 'OriginatingVASP', 'BeneficiaryVASP' 4개의 객체만 잘 작성할 수 있다면 문제 없습니다. 송신 측 VASP는 IVMS101 표준에 따라 'payload'에 'Originator', 'Beneficiary', 'OriginatingVASP' 세 가지 정보를 잘 담아 요청을 보내고, 수신 측 VASP는 요청에 담겨온 세 가지 정보에 'BeneficiaryVASP' 정보를 더해 반환하면 프로세스가 완료됩니다.

지금부터 대표적인 케이스별 IVMS101 필수 객체를 알아보겠습니다. 작성법은 IVMS101타입 페이지를 참고해주세요.

송신(출고)할 때

'Originator': 'naturalPerson'

송신인이 개인인 경우 'name' 객체 아래 ❗ 'nameIdentifier' 객체는 필수❗, 'localNameIdentifier'는 옵션입니다. 'nameIdentifier'는 항상 존재해야 하기 때문에, 입력할 이름이 없는 경우 공란으로 작성해 주세요.

일반적으로 'nameIdentifier'에는 영문 이름을, 'localNameIdentifier'에는 한글 이름(혹은 그 외의 현지어 이름)을 담아 전송합니다.

🚧

다만, 한국 VASP 간 통신 시에는 'nameIdentifier'에 한글 이름, 'localNameIdentifier'에 영문 이름을 전송하기로 약속되어 있습니다. 자세한 내용은 이름(nameIdentifier) 표기법에서 확인할 수 있습니다.

{
  "Originator": {
    "originatorPersons": [
      {
        "naturalPerson": {
          "name": {
            "nameIdentifier": [
              {
                "primaryIdentifier": "",
                "secondaryIdentifier": "",
                "nameIdentifierType": ""
              }
            ],
            "localNameIdentifier": [
              {
                "primaryIdentifier": "로버트 반스",
                "secondaryIdentifier": "",
                "nameIdentifierType": "LEGL"
              }
            ]
          },
          "dateAndPlaceOfBirth": {
            "dateOfBirth": "1990-01-01",
            "placeOfBirth": "LA"
          },
          "customerIdentification": "customernumber in Max 50 Text",
          "countryOfResidence": "US"
        }
      }
    ],
    "accountNumber": [
      "rJChk8e71gxVhyJSr1srzZxWhVisWMMYKZ:tag or memo"
    ]
  },
  "Beneficiary": {
  },
  "OriginatingVASP": {
  }
}

'Originator: 'legalPerson'

송신인이 법인인 경우 'originatorPersons' 객체 하위에 ❗'legalPerson'과 적어도 하나의 'naturalPerson'이 필수❗입니다. 'legalPerson'에는 법인의 정보를 담고, 'naturalPerson'에는 법인 대표자의 정보를 담습니다.

이 경우에도 마찬가지로 'name' 객체 아래 ❗ 'nameIdentifier' 객체는 필수❗, 'localNameIdentifier'는 옵션입니다. 'nameIdentifier'는 항상 존재해야 하기 때문에, 입력할 이름이 없는 경우 공란으로 작성해 주세요.

법인의 대표자가 여러 명인 경우 'beneficiaryPersons' 객체 array에 'naturalPerson'객체를 필요한 만큼 추가합니다.

'nameIdentifier'에는 영문 이름을, 'localNameIdentifier'에는 한글 이름(혹은 그 외의 현지어 이름)을 담아 전송합니다.

🚧

마찬가지로, 한국 VASP 간 통신 시에는 대표자 정보 'naturalPerson'의 'nameIdentifier'에 한글 이름, 'localNameIdentifier'에 영문 이름을 전송합니다. 자세한 내용은 이름(nameIdentifier) 표기법에서 확인할 수 있습니다.

{
  "Originator": {
    "originatorPersons": [
      {
        "legalPerson": {
          "name": {
            "nameIdentifier": [
              {
                "legalPersonName": "Coinone Inc.",
                "legalPersonNameIdentifierType": "LEGL"
              }
            ]
          },
          "nationalIdentification": {
            "nationalIdentifier": "XXXXXXXXXXXXXXXXXXXX",
            "nationalIdentifierType": "LEIX"
          },
          "customerIdentification": "customernumber in Max 50 Text",
          "countryOfRegistration": "KR"
        }
      },
      {
        "naturalPerson": {
          "name": {
            "nameIdentifier": [
              {
                "primaryIdentifier": "",
                "secondaryIdentifier": "",
                "nameIdentifierType": ""
              }
            ],
            "localNameIdentifier": [
              {
                "primaryIdentifier": "로버트 반스",
                "secondaryIdentifier": "",
                "nameIdentifierType": "LEGL"
              }
            ]
          }
        }
      },
      {
        "naturalPerson": {
          "name": {
            "nameIdentifier": [
              {
                "primaryIdentifier": "Barnes",
                "secondaryIdentifier": "Robert",
                "nameIdentifierType": "LEGL"
              }
            ],
            "localNameIdentifier": [
              {
                "primaryIdentifier": "로버트 반스",
                "secondaryIdentifier": "",
                "nameIdentifierType": "LEGL"
              }
            ]
          }
        }
      }
    ],
    "accountNumber": [
      "rJChk8e71gxVhyJSr1srzZxWhVisWMMYKZ:tag or memo"
    ]
  },
  "Beneficiary": {
  },
  "OriginatingVASP": {
    
  }
}

'Beneficiary': 'naturalPerson'

수신인이 개인인 경우 ''name' 객체 아래 ❗ 'nameIdentifier' 객체는 필수❗, 'localNameIdentifier'는 옵션입니다. 'nameIdentifier'는 항상 존재해야 하기 때문에, 입력할 이름이 없는 경우 공란으로 작성해 주세요.

일반적으로 'nameIdentifier'에는 영문 이름을, 'localNameIdentifier'에는 한글 이름(혹은 그 외의 현지어 이름)을 담아 전송합니다.

🚧

다만, 한국 VASP 간 통신 시에는 'nameIdentifier'에 한글 이름, 'localNameIdentifier'에 영문 이름을 전송하기로 약속되어 있습니다. 자세한 내용은 이름(nameIdentifier) 표기법에서 확인할 수 있습니다.

{
  "Originator": {
  },
  "Beneficiary": {
    "beneficiaryPersons": [
      {
        "naturalPerson": {
          "name": {
            "nameIdentifier": [
              {
                "primaryIdentifier": "",
                "secondaryIdentifier": "",
                "nameIdentifierType": ""
              }
            ],
            "localNameIdentifier": [
              {
                "primaryIdentifier": "앨리스 스미스",
                "secondaryIdentifier": "",
                "nameIdentifierType": "LEGL"
              }
            ]
          },
          "dateAndPlaceOfBirth": {
            "dateOfBirth": "1990-01-01",
            "placeOfBirth": "LA"
          },
          "customerIdentification": "customernumber in Max 50 Text",
          "countryOfResidence": "US"
        }
      }
    ],
    "accountNumber": [
      "rHcFoo6a9qT5NHiVn1THQRhsEGcxtYCV4d:tag or memo"
    ]
  },
  "OriginatingVASP": {
    
  }
}

'Beneficiary': 'legalPerson'

수신인이 법인인 경우 'originatorPersons' 객체 하위에 ❗'legalPerson'과 적어도 하나의 'naturalPerson'❗이 필수입니다. 'legalPerson'에는 법인의 정보를 담고, 'naturalPerson'에는 법인 대표자의 정보를 담습니다.

이 경우에도 마찬가지로'name' 객체 아래 ❗ 'nameIdentifier' 객체는 필수❗, 'localNameIdentifier'는 옵션입니다. 'nameIdentifier'는 항상 존재해야 하기 때문에, 입력할 이름이 없는 경우 공란으로 작성해 주세요.

법인의 대표자가 여러 명인 경우 'beneficiaryPersons' 객체 array에 'naturalPerson' 객체를 필요한 만큼 추가합니다.

'nameIdentifier'에는 영문 이름을, 'localNameIdentifier'에는 한글 이름(혹은 그 외의 현지어 이름)을 담아 전송합니다.

🚧

마찬가지로, 한국 VASP 간 통신 시에는 대표자 정보 'naturalPerson'의 'nameIdentifier'에 한글 이름, 'localNameIdentifier'에 영문 이름을 전송합니다. 자세한 내용은 이름(nameIdentifier) 표기법에서 확인할 수 있습니다.

{
  "Originator": {
  },
  "Beneficiary": {
    "beneficiaryPersons": [
      {
        "legalPerson": {
          "name": {
            "nameIdentifier": [
              {
                "legalPersonName": "Korbit Inc.",
                "legalPersonNameIdentifierType": "LEGL"
              }
            ]
          },
          "nationalIdentification": {
            "nationalIdentifier": "XXXXXXXXXXXXXXXXXXXX",
            "nationalIdentifierType": "LEIX"
          },
          "customerIdentification": "customernumber in Max 50 Text",
          "countryOfRegistration": "KR"
        }
      },
      {
        "naturalPerson": {
          "name": {
            "nameIdentifier": [
              {
                "primaryIdentifier": "",
                "secondaryIdentifier": "",
                "nameIdentifierType": ""
              }
            ],
            "localNameIdentifier": [
              {
                "primaryIdentifier": "앨리스 스미스",
                "secondaryIdentifier": "",
                "nameIdentifierType": "LEGL"
              }
            ]
          }
        }
      },
      {
        "naturalPerson": {
          "name": {
            "nameIdentifier": [
              {
                "primaryIdentifier": "Smith",
                "secondaryIdentifier": "Alice",
                "nameIdentifierType": "LEGL"
              }
            ],
            "localNameIdentifier": [
              {
                "primaryIdentifier": "앨리스 스미스",
                "secondaryIdentifier": "",
                "nameIdentifierType": "LEGL"
              }
            ]
          }
        }
      }
    ],
    "accountNumber": [
      "rHcFoo6a9qT5NHiVn1THQRhsEGcxtYCV4d:tag or memo"
    ]
  },
  "OriginatingVASP": {

  }
}

'OriginatingVASP'

'OriginatingVASP' 객체에는 송신측 VASP의 정보를 담아 전달합니다.

'legalPerson'하위에 'name'과 'countryOfRegistration'이 필수이며, 'geographicAddress'와 'nationalIdentification' 중 한 가지는 반드시 입력해야 합니다.

🍀

'nationalIdentification'을 사용할 때는, 식별 번호를 발급한 기관 정보를 뜻하는 'registrationAuthority'를 입력해주면 좋습니다. GLEIF 홈페이지 하단에서 'GLEIF Registration Authorities List' 파일을 다운받아 국가, 등록번호 타입과 매칭되는 Authority Code를 찾아 입력해주세요.

{
  "Originator": {
  },
  "Beneficiary": {
  },
  "OriginatingVASP": {
    "originatingVASP": {
      "legalPerson": {
        "name": {
          "nameIdentifier": [
            {
              "legalPersonName": "Korbit Inc.",
              "legalPersonNameIdentifierType": "LEGL"
            }
          ]
        },
        "geographicAddress": [
          {
            "addressType": "GEOG",
            "streetName": "Example Street",
            "buildingNumber": "123",
            "buildingName": "Example Building",
            "postcode": "00000",
            "townName": "Seoul",
            "addressLine": [
              "100 Teheran-ro 1-gil, Gangnam-gu",
              "10th floor"
            ],
            "countrySubDivision": "N/A",
            "country": "KR"
          }
        ],
        "nationalIdentification": {
          "nationalIdentifier": "EXAMPLE-TAX-ID",
          "nationalIdentifierType": "RAID",
          "registrationAuthority": "RA000657"
        },
        "countryOfRegistration": "KR"
      }
    }
  }
}

수신(입고)할 때

'BeneficiaryVASP'

수신 측 VASP는 '자산 이전 허가 요청'에 담겨있는 'Originator', 'Beneficiary', 'OriginatingVASP' 정보에 자신들의 'BenficiaryVASP' 정보를 추가해 전송합니다.

'legalPerson'하위에 'name'과 'countryOfRegistration'이 필수이며, 'geographicAddress'와 'nationalIdentification' 중 한 가지는 반드시 입력해야 합니다.

🍀

'nationalIdentification'을 사용할 때는, 식별 번호를 발급한 기관 정보를 뜻하는 'registrationAuthority'를 입력해주면 좋습니다. GLEIF 홈페이지 하단에서 'GLEIF Registration Authorities List' 파일을 다운받아 국가, 등록번호 타입과 매칭되는 Authority Code를 찾아 입력해주세요.

{
  "Originator": {
  },
  "Beneficiary": {
  },
  "OriginatingVASP": {
  },
  "BeneficiaryVASP": {
    "beneficiaryVASP": {
      "legalPerson": {
        "name": {
          "nameIdentifier": [
            {
              "legalPersonName": "Coinone Inc.",
              "legalPersonNameIdentifierType": "LEGL"
            }
          ]
        },
        "geographicAddress": [
          {
            "addressType": "GEOG",
            "streetName": "Example Street",
            "buildingNumber": "456",
            "buildingName": "Example Building",
            "postcode": "00000",
            "townName": "Seoul",
            "addressLine": [
              "100 Teheran-ro 1-gil, Gangnam-gu",
              "10th floor"
            ],
            "countrySubDivision": "N/A",
            "country": "KR"
          }
        ],
        "nationalIdentification": {
          "nationalIdentifier": "6948624434",
          "nationalIdentifierType": "RAID",
          "registrationAuthority": "RA000657"
        },
        "countryOfRegistration": "KR"
      }
    }
  }
}