POST request to your configured webhook URL with the event details.
Configuration
Configure your webhook URL in the Hashrails Dashboard to start receiving notifications.Headers
Every webhook request includes the following headers:| Header | Example | Description |
|---|---|---|
Content-Type | application/json | Payload content type |
x-webhook-event | transfer_request.completed | The event type |
x-webhook-timestamp | 1761132905 | Unix timestamp of the delivery |
x-webhook-signature | ac810d6feefc67c2eb09... | HMAC signature for verification |
user-agent | Hashrails-Webhook/1.0 | Webhook client identifier |
Signature Validation
Always validate the webhook signature to ensure the request is from Hashrails and hasn’t been tampered with.Transfer Request Events
The following events are sent throughout the lifecycle of a transfer request. Each event payload includes the full transfer request object.Event Reference
transfer_request.rate.fetching- Hashrails has started sourcing the best exchange rate for the transfer. The rate and destination amount will be0at this stage.transfer_request.rate.received- A rate has been determined and is ready for review. Therate.value,rate.expires_at, anddestination.amountfields are now populated.transfer_request.rate.expired- The rate expired before it was confirmed. Call the Refresh Quote endpoint to request a new rate.transfer_request.payment.awaiting- The rate has been confirmed and the transfer is awaiting payment. Thepayment_instructionsfield is now populated with the details needed to complete payment.transfer_request.payment.received- A payment has been received for this transfer. For split payments, thepaymentsarray will contain the received amount.transfer_request.payment.completed- Full payment has been confirmed and the transfer is being processed for settlement.transfer_request.completed- The transfer has been fully settled and funds have been delivered to the recipient. Thetransaction_hashfield is included for crypto settlements.transfer_request.cancelled- The transfer request has been cancelled. No further action will be taken.
Event Payloads
Click on each event below to see the full payload structure.- transfer_request.rate.fetching
- transfer_request.rate.received
- transfer_request.rate.expired
- transfer_request.payment.awaiting
- transfer_request.payment.received
- transfer_request.payment.completed
- transfer_request.completed
- transfer_request.cancelled
Sent when Hashrails begins fetching a rate for the transfer request.
Payload Fields
| Field | Type | Description |
|---|---|---|
event | string | The webhook event name |
id | string | Unique transfer request ID |
reference | string | Human-readable transfer reference |
type | string | Transfer type (onramp or offramp) |
status | string | Current internal status |
source | object | Source amount and currency |
destination | object | Destination amount and currency |
rate | object | Exchange rate and expiry time |
payment_instructions | object | Payment details for completing the transfer |
recipient | object | Recipient details (included on completion) |
payments | array | Payment records received for this transfer |
transaction_hash | string | Blockchain hash (included on completion for crypto) |
timestamp | number | Unix timestamp of the event |
webhook_id | string | Unique identifier for this webhook delivery |