> ## Documentation Index
> Fetch the complete documentation index at: https://docs.velafi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# On-Ramp Withdrawal Event

> Reference for the ON_RAMP_WITHDRAW_WEBHOOK payload VelaFi sends when the crypto from a completed API on-ramp order has been withdrawn to the order's destination wallet.

For on-ramp (`BUY`) orders created through the API with a destination network and wallet address, VelaFi can withdraw the purchased crypto to that address after the order completes. When the withdrawal succeeds, VelaFi sends a signed HTTP POST request to your `ON_RAMP_WITHDRAW_WEBHOOK` endpoint. Verify the `signature` header and respond with `{"callbackStatus": "SUCCESS"}` to acknowledge receipt.

> [!NOTE]
>
> Automatic withdrawal to a destination address is enabled per account by VelaFi, and not every order is withdrawn automatically. Orders that are not withdrawn automatically do not trigger this webhook. Automatic withdrawals also trigger [`CRYPTO_WITHDRAW_WEBHOOK`](https://docs.velafi.com/api-reference/webhooks/crypto-withdraw-message-push) if you subscribe to it.

## Request Headers

| Header | Description |
| - | - |
| `signature` | RSA-SHA256 signature of the raw request body, hex-encoded. Use your webhook's `publicKey` to verify. See [Webhook Setup](https://docs.velafi.com/api-reference/webhooks/webhook-setup.md). |
| `Content-Type` | `application/json` |

## Payload Fields

**webhookId** `string`

The ID of the webhook the event was queued for.

**eventType** `string`

Always `ON_RAMP_WITHDRAW_WEBHOOK` for this event type.

**orderId** `string`

ID of the on-ramp order.

**userId** `string`

Your VelaFi account (user) ID.

**clientId** `string`

Your client-supplied order identifier. Omitted if you did not supply one.

**network** `string`

Network of the withdrawal, as set on the order.

**address** `string`

Destination wallet address, as set on the order.

**crypto** `string`

Cryptocurrency of the order, e.g. `USDT`.

**amount** `string`

Crypto amount of the order (the same value as `cryptoAmount` in `ORDER_WEBHOOK`).

**txHash** `string`

On-chain transaction hash of the withdrawal. Omitted if not available.

**status** `string`

Always `succeeded`. Failed withdrawals do not trigger this webhook.

**timestamp** `string`

Unix timestamp (milliseconds) at which this delivery attempt was signed.

## Example Payload

```json Incoming POST body theme={null}
{
  "webhookId": "ebab8a9663704e7cbbebe672c7c67912",
  "eventType": "ON_RAMP_WITHDRAW_WEBHOOK",
  "orderId": "473130522693193728",
  "userId": "455472",
  "clientId": "W658784738723",
  "network": "POL",
  "address": "0x9876543210fedcba9876543210fedcba98765432",
  "crypto": "USDT",
  "amount": "11.5",
  "txHash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
  "status": "succeeded",
  "timestamp": "1735280590000"
}
```

## Required Response

Return an HTTP `2xx` status (for example `200`) with the following JSON body to acknowledge receipt:

```json Your response theme={null}
{
  "callbackStatus": "SUCCESS"
}
```

> [!NOTE]
>
> The same event can arrive more than once, so deduplicate on `orderId`. See [Delivery and Retries](https://docs.velafi.com/api-reference/webhooks/webhook-setup.md#delivery-and-retries).


## Related topics

- [Crypto Withdrawal Event](https://docs.velafi.com/api-reference/webhooks/crypto-withdraw-message-push.md)
- [Webhooks](https://docs.velafi.com/docs/guides/webhooks.md)
- [Webhook Setup](https://docs.velafi.com/api-reference/webhooks/webhook-setup.md)
- [Global Payment Event](https://docs.velafi.com/api-reference/webhooks/fiat-fiat-order-message-push.md)
- [Funding Event](https://docs.velafi.com/api-reference/webhooks/funding-records-message-push.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.