Skip to content
LogoLogo

Wallet Webhook Events

BLOX sends these webhook events for the token deposits and the fiat withdrawals on your account. To get them, register an endpoint of type WALLET in the dashboard (Devtools → Webhooks).

For automatic withdrawal on deposit, these webhook events are the only notification. You do not send a request to start the fiat withdrawal, so no response gives you its status.

For registration, signature verification, retries, and URL rules, refer to Webhooks.

Events

EventBLOX sends it when
wallet.deposit.updatedA token deposit is confirmed on chain, BLOX credits the deposit, or the deposit is retried.
wallet.withdrawal.updatedThe status of a fiat withdrawal to your linked bank account changes.

BLOX sends wallet.deposit.updated two times for each deposit. The status field of the payload shows which event it is:

statusWhenresult
PROCESSINGThe deposit transaction is confirmed on chain. The tokens are not in your wallet balance yet.null
COMPLETEDBLOX credited the tokens to your wallet balance. BLOX also decided the result of the fiat withdrawal that the deposit started.The result of the fiat withdrawal, or null for an ordinary deposit address

Only the COMPLETED status shows that the tokens are in your wallet balance. BLOX usually credits the tokens a few minutes after confirmation. On Ethereum, this takes longer when network fees are high.

After a retry, BLOX can send a PROCESSING event after the COMPLETED event for the same deposit. If a deposit has the status COMPLETED in your records, do not change it to a different status.

BLOX sends both events also for a deposit that does not start a fiat withdrawal. Examples are a deposit to an ordinary deposit address and a deposit from an address that is not an allowed sender.

BLOX sends these events for deposits on all networks. This also applies to Solana. On Solana, txHash is the transaction signature (base58) and chainId is 101.

Envelope

{
  "eventId": "wallet.deposit.updated:5e9d0273-...:COMPLETED:COMPLETED",
  "event": "wallet.deposit.updated",
  "webhookType": "WALLET",
  "timestamp": "2026-08-07T09:34:22.000Z",
  "data": {}
}
FieldDescription
eventIdThe unique identifier of the event. Use it to process each event one time. Treat it as an opaque string.
eventThe event name
webhookTypeWALLET for these events
timestampThe time of the event, in ISO 8601 format
dataThe payload of the event. Its fields change with the event.

Each deposit status has its own event with its own eventId. A retried deposit has one more event. Use eventId as the key in your handler. If you get an eventId that you processed before, ignore the event.

Event data

wallet.deposit.updated

{
  "id": "5e9d0273-8a41-4c62-b0f7-1d3e8c95a460",
  "txHash": "0x5d5355...103ee3",
  "logIndex": 12,
  "chainId": 1,
  "tokenId": "a71c4e08-2f96-4b3d-85ae-6c0f7d21b943",
  "amount": "100000",
  "from": "0x9a3f7c21b8e04d6f5a19c2e70b48d3f61a5e9d02",
  "status": "COMPLETED",
  "confirmations": 24,
  "triggerAddress": "0x7c1a3e889d2b4f618a441f0b6d3c9a5588ab01cd",
  "destination": { "type": "BANK_ACCOUNT", "id": "b21f4c77-...", "name": "ACME SDN BHD" },
  "result": { "status": "FAILED", "statusReason": "sender_not_allowed", "withdrawal": null },
  "createdAt": "2026-08-07T09:30:44.000Z",
  "updatedAt": "2026-08-07T09:34:22.000Z"
}

The fields are the same as the fields of the deposit that GET /v1/wallet/deposits/{id} returns. For the full table and the status reason values, refer to that endpoint.

To get the result, read result.status. If the deposit went to an ordinary deposit address, result is null.

wallet.withdrawal.updated

{
  "withdrawalId": "c4a80f13-6d29-4e75-83b1-9f0c2a7e5d68",
  "status": "COMPLETED",
  "statusReason": null,
  "amount": "100000",
  "refId": "FW-20260807-0001",
  "reference": "ACME payout",
  "destination": { "type": "BANK_ACCOUNT", "id": "b21f4c77-...", "name": "ACME SDN BHD" },
  "depositId": "5e9d0273-8a41-4c62-b0f7-1d3e8c95a460",
  "createdAt": "2026-08-07T09:31:05.000Z",
  "updatedAt": "2026-08-07T09:34:22.000Z"
}
FieldTypeDescription
withdrawalIdstring (UUID)The id of the fiat withdrawal in GET /v1/wallet/fiat/withdrawals/{id}
statusstringPENDING, PROCESSING, COMPLETED, REJECTED, FAILED, CANCELLED
statusReasonstring | nullHas a value only for REJECTED, FAILED, and CANCELLED
amountstringThe amount in sen
refIdstringThe bank reference
referencestring | nullYour reference
destinationobject | nullThe linked bank account that gets the money
depositIdstring | nullThe deposit that started the fiat withdrawal, or null for a fiat withdrawal that you created

Use depositId to connect the two events. Only this field shows the difference between a fiat withdrawal that a deposit started and a fiat withdrawal that you created with POST /v1/wallet/fiat/withdrawals.