# 자산 이전 종료

## 수신하는 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"
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://codevasp.gitbook.io/code-api-docs-ko/code-api/cancle-transfer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
