> For the complete documentation index, see [llms.txt](https://docs-kr.verifyvasp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-kr.verifyvasp.com/getting-started/vasp-api.md).

# VASP API 구현

> VerifyVASP 프로토콜을 통해 Travel Rule을 준수하기 위해, VerifyVASP Enclave를 제공합니다.
>
> Enclave 서버를 통해 전달받은 개인 정보에 대한 검증을 하기 위해 아래와 같은 API를 구현하여 연결합니다.

## 사용자 Address 검증 API 개발

### 개요

* VASP가 Beneficiary VASP 역할을 할 때, Originating VASP에 의해 호출되는 API입니다.
* VASP의 address (계좌번호 또는 지갑 주소)의 소유 여부를 검증합니다.
* Originating VASP에서 사용자 검증 API를 호출하기 전에, 사용자 Address 검증 API를 통해 **Beneficiary Address(지갑 주소, 계좌번호)에 대해 선 검증** 할 수 있습니다.

{% hint style="info" %}
**Enclave 환경 변수:**

<mark style="color:green;">**`VEGA_VERIFICATION_ACCOUNT_API_PATH`**</mark> 변수에, 사용자 계정 검증 API 엔드포인트를 명시합니다.
{% endhint %}

### 구현 사항

* 지갑 주소(Address) 와 수취인 이름 정보가 VASP 소유인지 확인해야 합니다.

### 요청/응답

* 요청
  * KeyType, beneficiaryVaspId, symbol, payload를 전달받아, 지갑 주소와 수취인 이름에 대해 검증 요청합니다.
  * payload에는 지갑 주소와 수취인 이름 정보를 IVMS101 메시징 프로토콜 형태로 전달합니다.
* 응답
  * 검증을 요청한 Symbol의 Addresses가 VASP 소유 주소인지의 여부를 반환합니다.
  * 검증을 요청한 수취인의 이름이 VASP 소유 지갑 주소에 일치하는 수취인 이름인지 확인합니다.
* 자세한 API 스펙은 아래 링크를 참조 바랍니다.

{% content-ref url="/pages/hJGSuvq5gg4cyqiyPryb" %}
[사용자 계정 검증 API](/reference/vasp-api-reference/account-api.md)
{% endcontent-ref %}

## 사용자 검증 API 개발

### 개요

* VASP가 Beneficiary VASP 역할을 할 때, Originating VASP에 의해 호출되는 API입니다.
* Beneficiary에 대한 검증 요청에 대하여 Beneficiary VASP는 사용자의 정보를 검증해야 합니다.

{% hint style="info" %}
**Enclave 환경 변수:**

<mark style="color:green;">**`VEGA_VERIFICATION_API_PATH`**</mark> 변수에, 사용자 검증 API 엔드포인트를 명시합니다.
{% endhint %}

### 구현 사항

* Beneficiary의 이름을 확인합니다.
* Beneficiary의 Address (지갑 주소 또는 계좌번호)를 확인합니다.
* KYC 인증이 된 사용자인지 확인합니다.
* AML 검증을 수행합니다.
* Originator에 대해 Sanction screening을 수행합니다.
  * VASP 자체적으로 사용 중인 sanction 관련 서비스를 이용해도 됩니다.
  * Originator에 대한 위험도를 체크하여 Sanction List에 있는 사용자일 경우, 검증 결과를 **DENIED**로 반환합니다.

### 요청/응답

* 요청
  * Asset information, Originator, Beneficiary에 대한 정보를 IVMS101 메시지 형식으로 전달하여, 사용자 검증 요청합니다.
* 응답
  * Beneficiary에 대한 유효성 검사 결과를 반환합니다.
  * **Beneficiary에 대한 추가 정보**를 IVMS101 형식으로 반환합니다.
    * 처음 요청받은 Beneficiary의 정보는 Originator가 입력한 이름과 계좌번호뿐이므로, Travel Rule을 만족하기 위해 Beneficiary 개인 정보(주민 번호, 주소, 생년월일 및 출생지 등)를 추가하여 반환합니다.
* 자세한 API 스펙은 아래 링크를 참조 바랍니다.

{% content-ref url="/pages/9PVveQpd6HcPSOHVNQAH" %}
[사용자 검증 API](/reference/vasp-api-reference/api.md)
{% endcontent-ref %}

## 트랜잭션 처리 상태 조회 API 개발

### 개요

* VASP가 Originating VASP 역할을 할 때, Beneficiary VASP에 의해 호출되는 API입니다.
* Originating VASP에서 VerifyVASP를 통해 Beneficiary 검증 후, 실제 블록체인으로 가상 자산을 전송하면 해당 트랜잭션의 ID (TxHash) 값을 VerifyVASP로 리포팅 해야 합니다.
* 하지만 어떠한 이유로든 트랜잭션 아이디 (Transaction hash, txHash) 리포팅이 정상적으로 수행되지 못했을 때, Beneficiary VASP에서 블록체인의 트랜잭션의 처리 상태를 역으로 조회할 수 있는 API입니다.

{% hint style="info" %}
**Enclave 환경 변수:**

<mark style="color:green;">**`VEGA_VERIFICATION_TRANSACTION_API_PATH`**</mark> 변수에, 트랜잭션 처리 상태 조회 API 엔드포인트를 명시합니다.
{% endhint %}

### 구현 사항

* 전달받은 Verification UUID에 대한, Transaction 처리 결과 (TxHash)를 제공해야 합니다.

### 요청/응답

* 요청
  * 이전 사용자 검증 요청했던 Verification UUID
* 응답
  * 전달받은 Verification UUID에 상응하는 트랜잭션의 처리 상태와 TxHash 정보를 반환합니다.
* 자세한 API 스펙은 아래 링크를 참조 바랍니다.

{% content-ref url="/pages/I6TJuBmRERXyGDQ6PyVo" %}
[트랜잭션 처리 상태 조회 API](/reference/vasp-api-reference/transaction-api.md)
{% endcontent-ref %}

## Callback API 개발

### 개요

* Enclave의 일부 API는 비동기로 동작합니다. 예를 들어 사용자 검증 API를 호출하면 검증 결과가 response로 바로 반환되는 것이 아니라 verificationUuid만 전달됩니다.
* 사용자 검증 요청은 비동기적으로 Beneficiary VASP로 전달되며, 결과 역시 비동기적으로 Originating VASP로 전달됩니다.
* 비동기적으로 전달되는 사용자 검증 결과를 받기 위해서는 Callback API를 구현하여 enclave 환경 변수로 입력해야 합니다.
* 선택적으로 구현할 수도 구현하지 않을 수도 있지만, 구현하지 않으면 VASP 내부 구현이 복잡해지므로 구현하는 것을 강력히 권장합니다.

{% hint style="info" %}
**Enclave 환경 변수:**

<mark style="color:green;">**`VEGA_VERIFICATION_CALLBACK_API_PATH`**</mark> 변수에, Callback API 엔드포인트를 명시합니다.
{% endhint %}

### 구현 사항

* 각각의 callbackType (VERIFICATION\_RESULT, TX\_REPORT, ERROR\_REPORT 등)에 대해 적절히 처리해야 합니다.
* response는 가급적 빨리 반환해야 합니다.

### 요청/응답

* 요청
  * 비동기 API의 처리 결과가 입력됩니다.
* 응답
  * 200 응답을 반환합니다.
* 자세한 API 스펙은 아래 링크를 참조 바랍니다.

{% content-ref url="/pages/KgjkPospnS2RlHkqkLZ3" %}
[Callback API](/reference/vasp-api-reference/callback-api.md)
{% endcontent-ref %}

## 암호화 키에 대한 복호화 API 개발

### 개요

* Enclave가 사용하는 데이터베이스에 대한 encryption key에 대하여, 이 API를 통하여 더 높은 수준의 암호화 키를 사용할 수 있습니다.
* Enclave에서 이 API를 통해, 개인 정보나 private key와 같은 민감 정보를 암호화할 때 사용하는 encryption key를 복호화 합니다.

{% hint style="info" %}
**Enclave 환경 변수:**

<mark style="color:green;">**`VEGA_DECRYPT_API_ENDPOINT`**</mark> 변수에, 암호화 키에 대한 복호화 API 엔드포인트를 명시합니다.
{% endhint %}

### 구현 사항

* 전달받은 암호화 키에 대해, 한 번 더 복호화 한 암호화키를 제공합니다.

### 요청/응답

* 요청
  * 암호화 키인 inputKey를 전달받습니다.
* 응답
  * inputKey에 대한 복호화 된 암호화 키를 반환합니다.
* 자세한 API 스펙은 아래 링크를 참조 바랍니다.

{% content-ref url="/pages/wOdXFHcrt9dxFPydtUsU" %}
[Database 암호화 키를 복호화 하는 API](/reference/vasp-api-reference/database-encryption-key-api.md)
{% endcontent-ref %}

## 화면 개발

* Travel Rule을 준수하기 위한 추가적인 화면 개발이 필요합니다.
* 최소한, Beneficiary VASP 선택, Beneficiary의 이름과 계좌번호를 입력받을 수 있는 화면 개발이 필요합니다.
