> For the complete documentation index, see [llms.txt](https://docs.aquanow.io/cams/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aquanow.io/cams/webhooks/withdrawals.md).

# Withdrawals

### **Withdrawal Completed**

<mark style="color:green;">`POST`</mark>&#x20;

Notifies the status of an outgoing withdrawal.

{% hint style="info" %}
Allowed Values: `WITHDRAWAL_COMPLETED`
{% endhint %}

**Body**

```json
{
  "messageId": "123e4567-e89b-12d3-a456-426614174000",
  "messageType": "WITHDRAWAL_COMPLETED",
  "messageTime": "2023-12-14T01:24:03.102Z",
  "message": {  
    "transactionType": "WITHDRAWAL",
    "status": "WITHDRAWAL_COMPLETED",
    "withdrawalId": "a306b284-9467-4fdb-9096-9c5a1d38efda",
    "customerId": "3a4dcd44-adb0-51e2-a360-1033487b8e3c",
    "accountId": "79baa7ee-0f0c-4388-a0ba-1c17e1563df8",
    "withdrawalCurrency": "USD",
    "netWithdrawalQuantity": 180.00,
    "withdrawalFeeType": "FIXED",
    "withdrawalFeeRate": 0,
    "withdrawalFeeQuantity": 0.00,
    "withdrawalFeeCurrency": "USD",
    "memo": "Converted 180.00 USD to 720.00 AED at rate of 4.",
    "clientMemo": "client-sent-memo",
    "grossWithdrawalQuantity": 180.00,
    "tradeBalance": 193.9825,
    "availableToWithdraw": 193.9825,
    "requestedAt": "2025-08-13T19:52:52.317Z",
    "completedAt": "2025-08-13T19:55:52.078Z"
    }
}
```

#### Field Reference

**Event:** Notifies the status of an outgoing withdrawal. This notification triggers across all supported transactional rails, specifically including:

* **Crypto Withdrawals:** An outgoing transaction that transfers digital assets (such as native coins like BTC or stablecoins like USDC) from the platform over a public or private blockchain network to an external wallet address. (e.g. Transferring 0.5 BTC or 10 ETH to external blockchain wallets, or moving 50,000 USDC or USDT treasury stablecoins across networks).
* **Fiat Withdrawals:** An outgoing transaction that moves traditional, state-issued currency (such as **USD**, **EUR**, or **CAD**) from the platform ledger back into corporate banking rails using institutional networks like **Fedwire**, **SEPA**, or **EFT**. (e.g. Payouts of $100,000 USD sent over corporate banking systems like Fedwire, or moving EUR and CAD using SEPA or EFT rails).&#x20;

**`message` header**

<table><thead><tr><th width="153.30987548828125">Field</th><th width="165.40283203125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>messageId</code></td><td>UUID (string)</td><td>Unique identifier for this webhook message.</td></tr><tr><td><code>messageType</code></td><td>string</td><td>Event type identifier. Value: <code>WITHDRAWAL_COMPLETED</code>.</td></tr><tr><td><code>messageTime</code></td><td>ISO 8601 datetime</td><td>Timestamp when the webhook message was generated.</td></tr><tr><td><code>message</code></td><td>object</td><td>Payload containing withdrawal details (see below).</td></tr></tbody></table>

**`message` object**

<table data-search="false"><thead><tr><th width="235.1171875">Field</th><th width="167.9193115234375">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>transactionType</code></td><td>string</td><td>Type of transaction. Value: <code>WITHDRAWAL</code>.</td></tr><tr><td><code>status</code></td><td>string (enum)</td><td><p>Current status of the withdrawal. One of the following: </p><ul><li><code>WITHDRAWAL_FAILED</code> : Applicable to both. Crypto can fail due to gas/network errors; fiat can fail due to banking rejection or compliance holds.</li><li><code>WITHDRAWAL_PROCESSING</code> : Applicable to both. For crypto, it means it is broadcasted/confirming on-chain. For fiat, it represents bank wire processing windows.</li><li><code>WITHDRAWAL_COMPLETED</code> : Applicable to both. Signifies immutable settlement on the blockchain (crypto) or finalized bank clearance (fiat).</li></ul></td></tr><tr><td><code>withdrawalId</code></td><td>UUID (string)</td><td>Unique identifier for the withdrawal transaction.</td></tr><tr><td><code>customerId</code></td><td>UUID (string)</td><td>Identifier of the customer requesting the withdrawal.</td></tr><tr><td><code>accountId</code></td><td>UUID (string)</td><td>Identifier of the account debited by the withdrawal.</td></tr><tr><td><code>withdrawalCurrency</code></td><td>string</td><td>Currency code of the withdrawal (e.g. <code>USD</code>).</td></tr><tr><td><code>netWithdrawalQuantity</code></td><td>number</td><td>Amount withdrawn after fees.</td></tr><tr><td><code>withdrawalFeeType</code></td><td>string</td><td>Type of fee applied. Value: <code>FIXED</code>.</td></tr><tr><td><code>withdrawalFeeRate</code></td><td>number</td><td>Fee rate applied (0 for fixed fees).</td></tr><tr><td><code>withdrawalFeeQuantity</code></td><td>number</td><td>Fee amount charged for the withdrawal.</td></tr><tr><td><code>withdrawalFeeCurrency</code></td><td>string</td><td>Currency code of the fee.</td></tr><tr><td><code>memo</code></td><td>string</td><td><p>System-generated memo describing the withdrawal (e.g. conversion details). </p><p></p><p><strong>Note:</strong></p><p>This reference is dynamically generated by the Aquanow core system ledger. From a client perspective, developers and treasury apps use this internal string for systemic, end-to-end reconciliation across API audit trails and webhooks.</p></td></tr><tr><td><code>clientMemo</code></td><td>string</td><td>Client-provided memo/reference tag for the withdrawal.</td></tr><tr><td><code>grossWithdrawalQuantity</code></td><td>number</td><td>Total withdrawal amount before fees.</td></tr><tr><td><code>tradeBalance</code></td><td>number</td><td>Account's total trade balance after the withdrawal.</td></tr><tr><td><code>availableToWithdraw</code></td><td>number</td><td><p>Amount available for withdrawal after this transaction. </p><p></p><p>By definition:</p><ul><li><strong><code>tradeBalance</code></strong>  is the complete, nominal balance remaining allocated to the account for active trading or market-making immediately after the withdrawal is debited.</li><li><strong><code>availableToWithdraw</code></strong>  is the actual subset of remaining funds free to leave the platform. This amount may be lower than the tradeBalance if funds are temporarily locked due to active open orders, margin requirements, or risk holds.</li></ul></td></tr><tr><td><code>requestedAt</code></td><td>ISO 8601 datetime</td><td>Timestamp when the withdrawal was requested.</td></tr><tr><td><code>completedAt</code></td><td>ISO 8601 datetime</td><td>Timestamp when the withdrawal was completed.</td></tr></tbody></table>

### FIAT Withdrawal Failed

<mark style="color:green;">`POST`</mark>&#x20;

Notifies that an outgoing fiat withdrawal attempt has failed and could not be completed, along with the reason and the resulting account balances.

{% hint style="info" %}
Allowed Values: `WITHDRAWAL_FAILED`
{% endhint %}

**Body**

<div data-with-frame="true"><figure><img src="/files/FQukbIgGEVS6j5uZm24U" alt=""><figcaption></figcaption></figure></div>

#### **Field Reference**

**Event:** Notifies that an outgoing fiat withdrawal has failed and could not be completed.

**`message` header**

<table><thead><tr><th width="130.9453125">Field</th><th width="162.24609375">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>messageId</code></td><td>UUID (string)</td><td>Unique identifier for this webhook message.</td></tr><tr><td><code>messageTime</code></td><td>ISO 8601 datetime</td><td>Timestamp when the webhook message was generated.</td></tr><tr><td><code>messageType</code></td><td>string</td><td>Event type identifier. Value: <code>FIAT_WITHDRAWAL_FAILED</code>.</td></tr><tr><td><code>message</code></td><td>object</td><td>Payload containing withdrawal failure details (see below).</td></tr></tbody></table>

**`message` body**

<table data-search="false"><thead><tr><th width="188.62890625">Field</th><th width="167.16796875">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>withdrawalId</code></td><td>UUID (string)</td><td>Unique identifier for the withdrawal transaction.</td></tr><tr><td><code>customerId</code></td><td>UUID (string)</td><td>Identifier of the customer who requested the withdrawal.</td></tr><tr><td><code>accountId</code></td><td>UUID (string)</td><td>Identifier of the account debited (or intended to be debited) by the withdrawal.</td></tr><tr><td><code>clientMemo</code></td><td>string | null</td><td>Client-provided memo/reference tag for the withdrawal, if any.</td></tr><tr><td><code>errorMessage</code></td><td>string</td><td>Human-readable description of the failure reason (e.g. <code>"Withdrawal failed"</code>). <em>[CONFIRM: verify whether this field returns more specific failure reasons in other scenarios (e.g. insufficient funds, invalid destination), or if it is always this generic message.]</em></td></tr><tr><td><code>failedAt</code></td><td>ISO 8601 datetime</td><td>Timestamp when the withdrawal failed.</td></tr><tr><td><code>status</code></td><td>string (enum)</td><td>Current status of the withdrawal. Value: <code>WITHDRAWAL_FAILED</code>.</td></tr><tr><td><code>tradeBalance</code></td><td>number</td><td>Account's total trade balance after the failed withdrawal (funds returned/unreserved).</td></tr><tr><td><code>availableToWithdraw</code></td><td>number</td><td>Amount available for withdrawal after the failed attempt.</td></tr></tbody></table>
