# 자산 이전 종료

## 자산 이전 내역의 상태를 요청받은 상태로 변경합니다.

<mark style="color:orange;">`PUT`</mark> `/v1/vasp/transfer/status`

이 API 는 자산을 전송하는 VASP 에 의해서 다음의 경우에 호출됩니다.

* 블록체인 상에서 자산 이전 트랜잭션이 진행 중 실패한 경우 이를 상대 VASP 에 알려줘야 합니다.
* 자산을 전송하는 VASP 가 자산 이전 요청에 대해서 `verified` 응답을 받았으나 내부 판단에 의해 실제 블록체인 상에서 자산 이전을 실행하지 않고 프로세스를 종료할 경우 이를 상대 VASP 에 알려줘야 합니다.

**API 동작 명세**

1. 요청의 `transferId` 에 해당하는 자산 이전 내역을 찾아서, `status` 를 업데이트 합니다.
2. `canceled` 는 이전 `status` 가 `denied` 또는 완전히 종료되지 않은 상태를 취소하고 종료로 변경할 수 있습니다.
3. 만약, 이미 종료된 자산 이전 내역의 상태를 변경하려고 한다면 `ILLEGAL_STATEFLOW` 에러를 반환합니다.
4. 자산 이전 내역의 상태가 `canceled` 인 경우에 다시 `canceled` 로 변경하는 것을 허용합니다.

**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": "LACK_OF_INFORMATION"
}
```

**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": "ILLEGAL_STATEFLOW"
}
```


---

# 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/vasp-api/undefined-1.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.
