Real-Time Signals
Push-based wallet and token events as they are indexed. Subscribe once; receive events when transfers match your filters.
Endpoint
WSS
wss://api.monadatlas.com/ws/signals
API key required. Use X-API-Key header or query param: wss://api.monadatlas.com/ws/signals?api_key=YOUR_KEY
Subscribe
After connecting, send a JSON message with method: "atlas_subscribe" and optional filters:
{
"method": "atlas_subscribe",
"params": {
"wallets": ["0xabc...", "0xdef..."],
"events": ["wallet_funded", "wallet_token_buy", "wallet_token_sell", "wallet_native_out"],
"tokens": ["0xtoken..."]
}
}
- wallets — Watch these addresses. Empty = all wallets (subject to limits).
- events — Event types to receive. Omit = all events.
- tokens — Filter by token contract. Empty = all tokens.
Event Types
| Event | Description |
|---|---|
wallet_funded | Native MON received (recipient) |
wallet_native_out | Native MON sent (sender) |
wallet_token_buy | ERC20/721/1155 received (recipient) |
wallet_token_sell | ERC20/721/1155 sent (sender) |
Push Payload
{
"id": 12345,
"event": "wallet_funded",
"direction": "in",
"wallet": "0xabc...",
"from": "0xfunding...",
"to": "0xabc...",
"tokenAddress": null,
"tokenId": null,
"amount": null,
"valueWei": "1000000000000000000",
"value_mon": "1.0",
"txHash": "0x...",
"blockNumber": 72400000,
"blockHash": "0x...",
"logIndex": null,
"eventIndex": 0,
"timestamp": "2026-05-04T12:00:00.000Z",
"transferType": "native_internal",
"chainId": 143,
"received_at": "2026-05-04T12:00:01.250Z",
"received_at_ms": 1746360001250,
"funding_age_ms": 1250,
"funding_age": "1s"
}
| Field | Description |
|---|---|
id | Transfer id (for deduplication) |
direction | "in" for wallet_funded/wallet_token_buy, "out" for outflows |
valueWei | Native value in wei (native transfers only) |
value_mon | Humanized MON amount (native transfers only) |
funding_age_ms | Milliseconds between block timestamp and signal push — measures how fresh the data is |
funding_age | Human-readable age (e.g. "1s", "3m 12s", "2h 15m") |
transferType | "native" (direct), "native_internal" (contract), "erc20", "erc721", "erc1155" |
received_at / received_at_ms | Server push timestamp (ISO and epoch ms) |
timestamp | Block timestamp when the transfer occurred on-chain |
chainId | Monad mainnet (143) |
blockHash, logIndex, eventIndex, tokenId | For correlation with on-chain data |
Example (Node.js)
const WebSocket = require('ws');
const ws = new WebSocket('wss://api.monadatlas.com/ws/signals?api_key=YOUR_KEY');
ws.on('open', () => {
ws.send(JSON.stringify({
method: 'atlas_subscribe',
params: {
wallets: ['0xYourWatchedWallet...'],
events: ['wallet_funded', 'wallet_token_buy']
}
}));
});
ws.on('message', (data) => {
const msg = JSON.parse(data);
if (msg.event) {
console.log('Transfer:', msg.event, msg.wallet, msg.txHash);
} else {
console.log('Subscribed:', msg);
}
});
Notes
- Indexed data: Events are pushed when transfers are indexed, not at block production. Slight delay vs raw chain.
- Reconnect: Resubscribe after reconnect; no server-side state is persisted.
- vs /ws:
/wsis standard eth_subscribe (blocks, logs)./ws/signalsis Atlas-specific wallet/token events.