> For the complete documentation index, see [llms.txt](https://codevasp.gitbook.io/code-api-docs-ko/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://codevasp.gitbook.io/code-api-docs-ko/code-api/cancle-transfer.md).

# 자산 이전 종료

## 수신하는 VASP 에게 자산 이전 내역의 상태를 변경할 것을 요청합니다.

<mark style="color:orange;">`PUT`</mark> `/v1/code/transfer/{BeneficiaryVaspEntityId}/status`

본 API 는 자산을 이전하는 VASP 가 다음의 경우에 호출합니다.

1. 자산을 전송하는 VASP 가 '자산 이전 허가 요청' 에서 `verified` 응답을 받았으나, 내부 판단에 의해서 실제 블록체인 상에서 자산 이전을 실행하지 않고 프로세스를 종료할 경우 이를 상대 VASP 에 알려주기 위하여 사용합니다.
2. 블록체인 상에서 자산 이전 트랜잭션이 진행되다가 실패한 경우, 이를 상대 VASP 에 알려주기 위해 사용합니다.

{% hint style="warning" %}
[**자산 이전 허가 요청**](/code-api-docs-ko/code-api/undefined-2.md) 이후 1시간 이내에만, 요청이 가능합니다.
{% endhint %}

{% hint style="warning" %}
자산을 전송하는 VASP 에서 자산 이전 프로세스가 중단되거나 실패한 경우, 상대 VASP 는 이 상황을 알 수 없기 때문에 무한 대기 상태에 빠질 수 있습니다. 이를 방지하기 위해 상대 VASP 에 알려줘야 합니다.
{% endhint %}

{% hint style="info" %}
본 API 를 호출하는 VASP 는 반드시 대상 VASP 의 응답이 성공인지 실패인지 확인할 수 있어야 합니다. 만약, 오류를 수신하거나 요청 타임아웃이 발생한 경우에는 주기적인 재시도 로직을 수행해서 다시 요청을 보내도록 구현해야 합니다. 이를 위해서 같은 상태로의 변경 시도는 성공으로 간주합니다.
{% endhint %}

**Path Parameter**

* BeneficiaryVaspEntityId: 자산을 수신하는 주소를 소유하는 VASP 의 EntityID 로 반드시 입력해야 합니다.

**REQUEST Body Schema: application/jsonRequest**

* transferId(Required): '자산 이전 허가 요청' 에서 부여한 UUID 입니다.
* status(Required): 가상 자산이 사용자 계정에 반영되었는지에 대한 상태를 나타냅니다.
  * canceled: 블록체인 트랜잭션을 보내지 않고 취소한 상태 혹은 보냈는데 취소한 상태입니다. (영구히 취소된 경우)
* reasonType(Optional): `status` 가 `canceled` 일 때 이유를 보여줍니다. (reasonType 은 '가상 주소 조회' 와 '자산 이전 허가요청 ' API 와 같습니다. 필요한 항목만 선택해서 사용하시기 바랍니다.)
  * NOT\_FOUND\_ADDRESS: 가상 자산 주소를 찾을 수 없는 경우입니다.
  * NOT\_SUPPORTED\_SYMBOL: 거래할 수 없는 화폐 심볼입니다.
  * NOT\_KYC\_USER: 소유자가 KYC 인증을 진행하지 않은 경우입니다.
  * SANCTION\_LIST: 가상 자산 주소 또는 소유자가 수취 VASP 의 제재 대상입니다.
  * LACK\_OF\_INFORMATION: 자산 이전을 결정하는데 필요한 정보가 없을 경우입니다.
  * UNKNOWN: 그 밖에 다른 이유입니다.

```
{
  "transferId": "b09c8d00-8da9-11ec-b909-0242ac120002"
  "status": "canceled"
  "reasonType": "SANCTION_LIST"
}
```

**Response**

*200 OK*

*RESPONSE SCHEMA: application/json*

* transferId(Required): 모든 API 에서 자산 이전 트랜잭션을 구별하기 위한 고유 값입니다. (검증 결과에 CODE 가 생성)
* result(Required): 요청에 대한 처리 결과입니다.
  * normal: 요청을 정상적으로 처리하여, 전달받은 자산 이전 내역의 상태를 종료로 변경한 경우입니다. 이미 종료한 자산 이전 내역에 대해서 다시 종료를 요청하는 것을 허용합니다.
  * error: 상태 변경이 불가능한 경우입니다.
* reasonType(Optional): result 값이 error 인 경우 상세 이유를 구분하는 값입니다.
  * UNKNOWN\_TRANSFER\_ID: Transfer ID 를 찾을 수 없는 경우입니다.
  * ILLEGAL\_STATEFLOW: 허용되지 않는 상태 흐름입니다. 현재 상태에서 업데이트 하려는 상태로 변경이 허용되지 않는 경우입니다.
  * UNKNOWN: 기타 오류입니다. VerifyVASP 는 reasonType 을 반환하지 않기 때문에 여기에 해당합니다.

```
{
  "transferId": "b09c8d00-8da9-11ec-b909-0242ac120002",
  "result": "error"
  "reasonType": "UNKNOWN_TRANSFER_ID"
}
```
