> For the complete documentation index, see [llms.txt](https://docs.ospree.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ospree.io/developers/travel-rule/api-endpoints/action-transfer.md).

# Action Transfer

<mark style="color:purple;">`PATCH`</mark> `/api/v2/travelrule/transfers/{transfer_id OR reference_id}/{action}`

This endpoint is used to take actions on a transfer depending on the current transfer status.

### **Path Parameters**

| Name           | Type   | Description                                                                                                                                                                       |
| -------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `transfer_id`  | string | <p>A system-generated identifier unique to each transaction </p><p></p><p>Example: <mark style="color:orange;"><code>0663cc41-ef29-7995-8000-2d9b414b3174</code></mark></p>       |
| `reference_id` | string | <p>A unique identifier provided by the originator when initiating the transfer. </p><p></p><p>Example: <mark style="color:orange;"><code>transfer20250312040414</code></mark></p> |
| `action`       | string | The action to be applied. See list of supported actions below.                                                                                                                    |

#### Transfer Status and Supported Actions

The allowed transfer actions depend on the protocol used and whether the transfer is outgoing or incoming. An outgoing transfer is initiated by the VASP to send a transfer request to a counterparty, while an incoming transfer is a transfer request received by the counterparty VASP. Each action taken—such as “accept,” “reject,” or “complete”—triggers a change in the transfer’s status, ensuring that the workflow reflects the real-time state of the transaction.

<table><thead><tr><th width="135.314453125">Actions</th><th width="153.62109375">Status</th><th>Description</th></tr></thead><tbody><tr><td>-</td><td>INITIATED</td><td>The transfer request is sent to the beneficiary VASP using the Create Transfer endpoint.</td></tr><tr><td>-</td><td>REVIEW</td><td>The transfer request is being reviewed by the beneficiary VASP.</td></tr><tr><td>cancel</td><td>CANCELED</td><td>The originator VASP canceled the transfer request using the Action Transfer endpoint.</td></tr><tr><td>reject</td><td>REJECTED</td><td>The beneficiary VASP rejected the originator VASP’s request, providing a reason and indicating whether a retry is allowed, using the Action Transfer endpoint.</td></tr><tr><td>accept</td><td>ACCEPTED</td><td>The beneficiary VASP accepted the transfer request, allowing the originator VASP to proceed with executing the crypto transaction using the Action Transfer endpoint.</td></tr><tr><td>complete</td><td>COMPLETED</td><td>The originator VASP has completed the execution of the crypto transaction using the Action Transfer endpoint.</td></tr></tbody></table>

### Request Body

| Name               | Type   | Description                                                                                             | Required                     |
| ------------------ | ------ | ------------------------------------------------------------------------------------------------------- | ---------------------------- |
| `reject_error`     | string | <p>The rejection error code of the transfer request. <br><br>See below for the list of error codes.</p> | True if action is "reject"   |
| `message`          | string | Additional information on why transfer request is rejected.                                             | True if action is "reject"   |
| `transaction_hash` | string | The blockchain transaction hash of the completed crypto transaction.                                    | True if action is "complete" |

## Understanding Travel Rule Transfer Statuses

The status of a Travel Rule transfer evolves as the transfer progresses through different stages. Importantly, the status can differ depending on the point of view:

Originator’s View - The sender (originator) sees the status reflecting the current action they have completed or are awaiting confirmation on. Beneficiary’s View - The recipient (beneficiary) sees a status representing what is pending on their side, such as needing to review, accept, or reject the transfer.

This dual perspective ensures that each party clearly understands their respective responsibilities at any given stage.

### Sample Requests

{% tabs %}
{% tab title=""reject" transfer request" %}

```json
{
  "reject_error": "REJECTED",
  "message": "Rejected without reason"
}
```

{% endtab %}

{% tab title=""complete" transfer" %}

```json
{
  "transaction_hash": "80003fee6bcbb2726b4d6466d690fce6caaa03771aada747eb0651637514b893"
}
```

{% endtab %}
{% endtabs %}

### **Response**

{% tabs %}
{% tab title="200 - "accept"" %}

```json
{
  "status": "success",
  "data": {
    "transfer_id": "0663cc41-ef29-7995-8000-2d9b414b3174",
    "reference_id": "reference-transfer-01",
    "amount": 1,
    "amount_usd": 101234.00,
    "dti": "4H95J0R2X",
    "chain": "bitcoin",
    "symbol": "BTC",
    "protocol": "flow",
    "originator_vasp_id": "UVWDEP",
    "beneficiary_vasp_id": "ABCXYZ",
    "originator_address": "14qViLJfdGaP4EeHnDyJbEGQysnCpwk3gd",
    "originator_address_is_self_hosted": false,
    "beneficiary_address": "1F1tAaz5x1HUXrCNLbtMDqcw6o5GNn4xqX",
    "beneficiary_address_is_self_hosted": false,
    "routing_number": "1234XYZ",
    "originator_account_reference_id": "account5678",
    "beneficiary_account_reference_id": "account1234",
    "transaction_hash": null,
    "transfer_status": "ACCEPTED",
    "transfer_type": "INSTRUCTION"
  }
}
```

{% endtab %}

{% tab title="200 - "reject"" %}

```json
{
  "status": "success",
  "data": {
    "transfer_id": "0663cc41-ef29-7995-8000-2d9b414b3174",
    "reference_id": "reference-transfer-01",
    "amount": 1,
    "amount_usd": 101234.00,
    "dti": "4H95J0R2X",
    "chain": "bitcoin",
    "symbol": "BTC",
    "protocol": "flow",
    "beneficiary_vasp_id": "ABCXYZ",
    "originator_address": "14qViLJfdGaP4EeHnDyJbEGQysnCpwk3gd",
    "originator_address_is_self_hosted": false,
    "beneficiary_address": "1F1tAaz5x1HUXrCNLbtMDqcw6o5GNn4xqX",
    "beneficiary_address_is_self_hosted": false,
    "routing_number": "1234XYZ",
    "originator_account_reference_id": "account5678",
    "beneficiary_account_reference_id": "account1234",
    "transaction_hash": null,
    "transfer_status": "REJECTED",
    "transfer_type": "INSTRUCTION"
  }
}
```

{% endtab %}

{% tab title="200 - "cancel"" %}

```json
{
  "status": "success",
  "data": {
    "transfer_id": "0663cc41-ef29-7995-8000-2d9b414b3174",
    "reference_id": "reference-transfer-01",
    "amount": 1,
    "amount_usd": 101234.00,
    "dti": "4H95J0R2X",
    "chain": "bitcoin",
    "symbol": "BTC",
    "protocol": "flow",
    "beneficiary_vasp_id": "ABCXYZ",
    "originator_address": "14qViLJfdGaP4EeHnDyJbEGQysnCpwk3gd",
     "originator_address_is_self_hosted": false,
    "beneficiary_address": "1F1tAaz5x1HUXrCNLbtMDqcw6o5GNn4xqX",
    "beneficiary_address_is_self_hosted": false,
    "routing_number": "1234XYZ",
    "originator_account_reference_id": "account5678",
    "beneficiary_account_reference_id": "account1234",
    "transaction_hash": null,
    "transfer_status": "CANCELED",
    "transfer_type": "INSTRUCTION"
  }
}
```

{% endtab %}

{% tab title="200 - "complete"" %}

```json
{
  "status": "success",
  "data": {
    "transfer_id": "0663cc41-ef29-7995-8000-2d9b414b3174",
    "reference_id": "reference-transfer-01",
    "amount": 1,
    "amount_usd": 101234.00,
    "dti": "4H95J0R2X",
    "chain": "bitcoin",
    "symbol": "BTC",
    "protocol": "flow",
    "beneficiary_vasp_id": "ABCXYZ",
    "originator_address": "14qViLJfdGaP4EeHnDyJbEGQysnCpwk3gd",
    "originator_address_is_self_hosted": false,
    "beneficiary_address": "1F1tAaz5x1HUXrCNLbtMDqcw6o5GNn4xqX",
    "beneficiary_address_is_self_hosted": false,
    "routing_number": "1234XYZ",
    "originator_account_reference_id": "account5678",
    "beneficiary_account_reference_id": "account1234",
    "transaction_hash": "80003fee6bcbb2726b4d6466d690fce6caaa03771aada747eb0651637514b893",
    "transfer_status": "COMPLETED",
    "transfer_type": "INSTRUCTION"
  }
}
```

{% endtab %}
{% endtabs %}
