API Reference
Webhooks
Receive real-time notifications when events occur. Configure your endpoint URL in the dashboard.
📬 How webhooks are delivered
- Each event is sent as an HTTP POST to your configured URL with a JSON body.
- We use auto-retry so you don’t miss events. Respond with 200OK to confirm receipt; we retry until we get a successful response.
Authentication Methods
Validate every webhook request before processing the payload:
- Confirm the request comes from Blockfuze using one of the methods below.
- Only after validation should you trust and process the payload.
Signature verification (HMACSHA512)
- Each request includes a signature generated from your private keys in the
x-main-signatureandx-backup-signatureheaders. - Only the signatures you’ve set up are sent (e.g. just
x-main-signatureif you only created the main API key). - Important:
- Do not compare the signature against a serialized body, only use raw body bytes from the request, as serialization may change the structure of the body.
Static custom header (less secure)
- Configure a static custom header in webhook config (e.g. a secret in
your-custom-header). - In your handler, validate the header so you only process requests originating from Blockfuze.
Available Webhooks
Payload Fields
| Field | Type | Description |
|---|---|---|
balance | number | Current USDC account balance |
balanceCurrent USDC account balance
Example Body:
{ "balance": 125.5847 }
Payload Fields
| Field | Type | Description |
|---|---|---|
id | bigint | Unique deposit identifier |
txid | string | Blockchain transaction ID |
from | string | Sender address |
to | string | Recipient address |
coin | enum int of the crypto coin | |
cryptoAmount | decimal | Crypto deposit amount |
creditAmount | decimal | null | USDC amount credited to your account after fees, this property will be null if the deposit did not complete yet. |
depositAmount | decimal | null | USDC value of the deposit, this property will be null if the deposit did not complete yet. |
confirmations | integer | Blockchain confirmations |
depositStatus | enum int of deposit status | |
externalUserId | string | externalUserId you provided with DepositAddress endpoint. |
externalAvatarFull | string | null | External user avatar URL, this property is null only if you did not call UpdateExternalUser endpoint with AvatarUrl. |
externalDisplayName | string | null | External user display name, this property is null only if you did not call UpdateExternalUser endpoint with DisplayName. |
processed | boolean | By default this property is false, when you finish processing the deposit on your system call MarkProcessed endpoint to stop receiving updates about this deposit. |
lastUpdate | datetime | Last update datetime |
created | datetime | Deposit creation datetime |
idUnique deposit identifier
txidBlockchain transaction ID
fromSender address
toRecipient address
coinenum int of the crypto coin
cryptoAmountCrypto deposit amount
creditAmountUSDC amount credited to your account after fees, this property will be null if the deposit did not complete yet.
depositAmountUSDC value of the deposit, this property will be null if the deposit did not complete yet.
confirmationsBlockchain confirmations
depositStatusenum int of deposit status
externalUserIdexternalUserId you provided with DepositAddress endpoint.
externalAvatarFullExternal user avatar URL, this property is null only if you did not call UpdateExternalUser endpoint with AvatarUrl.
externalDisplayNameExternal user display name, this property is null only if you did not call UpdateExternalUser endpoint with DisplayName.
processedBy default this property is false, when you finish processing the deposit on your system call MarkProcessed endpoint to stop receiving updates about this deposit.
lastUpdateLast update datetime
createdDeposit creation datetime
Example Body:
{ "id": 12345, "txid": "0xabc123def456...", "from": "0x742d35Cc...", "to": "0x8ba1f109...", "coin": 0, "cryptoAmount": 0.12500006, "creditAmount": 1.5, "depositAmount": 1.5, "confirmations": 12, "depositStatus": 2, "externalUserId": "user_123", "externalAvatarFull": "https://cdn.example.com/avatar.png", "externalDisplayName": "John Doe", "processed": false, "lastUpdate": "2026-03-01T12:34:56.000Z", "created": "2026-03-01T10:15:30.000Z" }
Payload Fields
| Field | Type | Description |
|---|---|---|
id | bigint | Unique withdrawal identifier |
txid | string | Blockchain transaction ID |
from | string | null | Sender address |
to | string | Recipient address |
coin | enum int of the crypto coin | |
cryptoAmount | decimal | null | Crypto withdrawal amount, this value will be null when transaction was not sent yet. |
withdrawalAmount | decimal | null | USDC value of the withdrawal |
fee | decimal | null | USDC value of the blockchain fee that was paid |
confirmations | integer | Blockchain confirmations |
withdrawalStatus | enum int of WithdrawalStatus | |
externalWithdrawalId | string | externalWithdrawalId you provided with Withdrawal endpoint. This value is enforced as unique on our side to prevent duplicate withdrawals. |
externalUserId | string | externalUserId you provided with Withdrawal endpoint. |
externalAvatarFull | string | null | External user avatar URL, this property is null only if you did not call UpdateExternalUser endpoint with AvatarUrl. |
externalDisplayName | string | null | External user display name, this property is null only if you did not call UpdateExternalUser endpoint with DisplayName. |
processed | boolean | By default this property is false, when you finish processing the withdrawal on your system call MarkProcessed endpoint to stop receiving updates about this withdrawal. |
lastUpdate | datetime | Last update datetime |
created | datetime | Withdrawal creation datetime |
idUnique withdrawal identifier
txidBlockchain transaction ID
fromSender address
toRecipient address
coinenum int of the crypto coin
cryptoAmountCrypto withdrawal amount, this value will be null when transaction was not sent yet.
withdrawalAmountUSDC value of the withdrawal
feeUSDC value of the blockchain fee that was paid
confirmationsBlockchain confirmations
withdrawalStatusenum int of WithdrawalStatus
externalWithdrawalIdexternalWithdrawalId you provided with Withdrawal endpoint.
This value is enforced as unique on our side to prevent duplicate withdrawals.
This value is enforced as unique on our side to prevent duplicate withdrawals.
externalUserIdexternalUserId you provided with Withdrawal endpoint.
externalAvatarFullExternal user avatar URL, this property is null only if you did not call UpdateExternalUser endpoint with AvatarUrl.
externalDisplayNameExternal user display name, this property is null only if you did not call UpdateExternalUser endpoint with DisplayName.
processedBy default this property is false, when you finish processing the withdrawal on your system call MarkProcessed endpoint to stop receiving updates about this withdrawal.
lastUpdateLast update datetime
createdWithdrawal creation datetime
Example Body:
{ "id": 12345, "txid": "0xabc123def456...", "from": "0x742d35Cc...", "to": "0x8ba1f109...", "coin": 0, "cryptoAmount": 0.12500006, "withdrawalAmount": 1.5, "fee": 0.01, "confirmations": 12, "withdrawalStatus": 2, "externalWithdrawalId": "wd_abc123", "externalUserId": "user_123", "externalAvatarFull": "https://cdn.example.com/avatar.png", "externalDisplayName": "John Doe", "processed": false, "lastUpdate": "2026-03-01T12:34:56.000Z", "created": "2026-03-01T10:15:30.000Z" }
Enum Reference
Values used in webhook payloads (sent as integers):
Coin
012345891012131416171819202122232425262728293031DepositStatus
0Pending1Rejected2ConfirmedWithdrawalStatus
0Pending1Sending2Sent3Cancelled4ErrorBest Practices
- • Return a 2xx status code to acknowledge receipt
- • Verify webhook payloads match expected transaction IDs
- • Implement idempotency to handle duplicate deliveries