# 자산 이전 결과(txid) 전송

## 블록체인에서 자산 이전이 실행된 후, 결과 (Transaction ID) 를 전송합니다.

<mark style="color:green;">`POST`</mark> `/v1/code/transfer/{BeneficiaryVaspEntityId}/txid`

가상 자산을 전송하는 VASP 는 블록체인 상에서 자산의 이전을 실행한 직후 해당 자산의 이전 결과 (Transaction ID) 를 본 API 를 호출해서 자산을 수신하는 VASP 로 전송해야 합니다.

{% hint style="danger" %}
Tx ID 또는 tx hash는 반드시 블록체인 **Node Output 데이터**를 사용해야 합니다.\
'0x'를 tx hash 앞에 추가하여 사용하는 경우 tx hash 불일치가 발생할 수 있습니다. \
따라서 Node Output에 없는 '0x'가 포함하지 않도록 주의해 주시기 바랍니다.
{% endhint %}

{% hint style="warning" %}
v1.7 부터는 블록체인 상에 Transaction ID 가 생성되면 트랜잭션이 완료되지 않더라도 자산을 수신하는 VASP 에 먼저 알려줍니다. 이후 블록체인 상에서 컨펌(Confirm) 이 진행되다가 실패하면 [자산 이전 종료 API](https://codevasp.gitbook.io/code-api-docs-ko/code-api) 를 호출해서 실패했음을 알려줍니다.
{% endhint %}

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

**Path Parameter**

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

**REQUEST Body Schema: application/jsonRequest**

* transferId(Required): '자산 이전 허가 요청' 에서 부여한 UUID 입니다. 해당하는 자산 이전 내역에 자산 이전 결과 (Transfer ID) 를 저장하기 위해 설정합니다.
* txid(Required): 가상 자산 이전을 위해 블록체인 상에 실행된 특정한 트랜잭션을 식별하기 위한 고유한  값입니다. 블록체인 API 에 의해서 생성되며 유일한 값입니다.
* vout(Optional): utxo타입 코인의 경우 복수의 블록체인 트랜잭션이 하나의 txid 를 공유하면서 그룹을 형성할 수 있습니다. 이때, 고유한 트랜잭션을 식별하기 위해 이 값을 사용합니다. 마찬가지로 블록체인 API 의 실행 결과물입니다.

```
{
  "transferId": "b09c8d00-8da9-11ec-b909-0242ac120002"
  "txid": "311BFF73D9B7969CCF1042186180159C724FAB59013A7A034A93E5FB9D6BAFE6",
  "vout": ""
}
```

**Response**

*200 OK*

*RESPONSE SCHEMA: application/json*

* transferId(Required): 모든 API 에서 자산 이전 트랜잭션을 구별하기 위한 ID 입니다.
* result(Required): 송금 정보 수신 결과 값입니다.
  * normal: 요청을 정상적으로 처리하여 전달받은 Transaction ID 를 저장 완료한 상태입니다.
  * error: 요청을 처리하는 VASP 에서 요청을 처리하지 못한 상태입니다.
* reasonType(Optional): result 값이 error 인 경우, 상세 이유를 구분하는 값입니다.
  * TXID\_ALREADY\_EXISTS: 이미 txid 가 저장된 자산 이전 내역에 대해서 다른 txid 를 저장하도록 요청받은 경우입니다. txid 가 한번 생성되면 실패할 수는 있지만 변경되지는 않습니다.
  * TRANSFER\_ALREADY\_FAILED: txid 를 저장하려는 TransferId 에 해당하는 자산 내역이 이미 실패한 경우 txid 를 저장할 수 없습니다.
  * UNKNOWN\_TRANSFER\_ID: Transfer ID 를 찾을 수 없는 경우입니다.
  * UNKNOWN: 현재 이 API 에서 발생할 것으로 예상되는 에러 사유가 없습니다.

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