Notification Channel
Authenticated deposit, withdrawal, transfer, and subaccount notification stream
Channel name: notification
Authentication
You must send a successful auth message before subscribing.
{ "op": "sub", "channel": "notification" }No params field is required. The stream is account-scoped; you receive notifications for your account and its subaccounts.
Message Types
This channel emits update messages only; there is no snapshot.
{
"channel": "notification",
"type": "update",
"data": {
"notification_type": "deposit.confirmed",
"timestamp": 1234567890,
"payload": {
"asset": "USDC",
"amount": "1000.00",
"tx_hash": "0xabcd...",
"block_time": 1234567890
}
},
"gsn": 12345,
"ts": "1234567890000000000"
}deposit.received notifications are unsequenced (sent before the deposit is confirmed on-chain) and carry gsn: 0.
Notification Types
notification_type | Payload | Description |
|---|---|---|
deposit.received | DepositPayload | Deposit detected, pending confirmation |
deposit.confirmed | DepositPayload | Deposit confirmed on-chain |
withdrawal.completed | WithdrawalPayload | Withdrawal settled on-chain |
withdrawal.failed | WithdrawalPayload | Withdrawal failed |
subaccount.created | SubaccountPayload | Subaccount created |
subaccount.frozen | SubaccountPayload | Subaccount frozen |
subaccount.unfrozen | SubaccountPayload | Subaccount unfrozen |
subaccount.deleted | SubaccountPayload | Subaccount deleted |
transfer.sent | TransferPayload | Transfer submitted, pending on-chain settlement |
transfer.received | TransferPayload | Transfer submitted, pending on-chain settlement |
transfer.completed | TransferPayload | Transfer settled on-chain |
transfer.failed | TransferPayload | Transfer failed on-chain |
Transfer notifications fire on internal fund transfers between accounts under the same main account (e.g. main-to-sub, sub-to-sub). transfer.sent and transfer.received fire immediately when the transfer is accepted (sender's balance is reserved). transfer.completed or transfer.failed fires once the on-chain transaction settles - both sender and receiver receive this notification.
{
"channel": "notification",
"type": "update",
"data": {
"notification_type": "transfer.sent",
"timestamp": 1700000000,
"payload": {
"from": "0x1234...sender",
"to": "0x5678...receiver",
"asset": "USDC",
"amount": "500.00"
}
},
"gsn": 6000,
"ts": "1700000000000000000"
}Fields
Envelope
| Field | Type | Description |
|---|---|---|
channel | string | Channel name ("notification") |
type | string | Message type ("update") |
data | object | Notification data payload (see below) |
gsn | number | Global sequence number (0 for deposit.received) |
ts | string | Event timestamp in nanoseconds |
Data Payload
| Field | Type | Description |
|---|---|---|
notification_type | string | One of the notification types above |
timestamp | number | Event time in Unix seconds. Optional — omitted for deposit.received; fall back to the envelope ts (nanoseconds) in that case. |
payload | object | Type-specific payload (see below) |
DepositPayload / WithdrawalPayload
| Field | Type | Description |
|---|---|---|
asset | string | Asset symbol (e.g. "USDC") |
amount | string | Amount |
tx_hash | string | On-chain transaction hash |
nonce | number | Withdrawal nonce (WithdrawalPayload only) |
block_time | number | Block timestamp in Unix seconds |
SubaccountPayload
| Field | Type | Description |
|---|---|---|
main_address | string | Main account address |
subaccount_address | string | Subaccount address |
tx_hash | string | On-chain transaction hash |
block_time | number | Block timestamp in Unix seconds |
TransferPayload
| Field | Type | Description |
|---|---|---|
from | string | Sender account address |
to | string | Receiver account address |
asset | string | Asset symbol (e.g. "USDC") |
amount | string | Transfer amount |
tx_hash | string | On-chain transaction hash (transfer.completed/failed only) |
block_time | number | Block timestamp in Unix seconds (transfer.completed/failed only) |