Alert Types
ChainWard has 7 alert types covering the common ways an on-chain AI agent goes wrong. Each alert can go to one or more channels.
Types
| Name | Key | Setting |
|---|---|---|
| Large Transfer Fires when a single transaction moves at least a set USD amount. | large_transfer | USD amount. The dashboard starts at $500. |
| Balance Drop Fires when an agent's total balance falls by a set percentage within a lookback window. | balance_drop | Percent and window. Default 20% in 1 hour. |
| Gas Spike Fires when the gas cost of a single transaction reaches a set USD amount. | gas_spike | USD amount. The dashboard preset is $25. |
| Failed Transaction Fires on any reverted (failed) transaction. | failed_tx | None: any failure fires. |
| Inactivity Fires when no transactions are seen within a lookback window. Useful for catching stuck or crashed agents. | inactivity | Window. Default 24 hours. |
| New Contract Interaction Fires when an agent interacts with a contract address it has never transacted with before. | new_contract | None: any new contract fires. |
| Idle Balance Fires when the balance stays above a set USD amount with no outgoing transactions for a set time. Catches unused money sitting in agent wallets. | idle_balance | USD amount and idle time. Default $50 for 24 hours. |
Through the API, a large transfer or gas spike alert with no threshold fires on every transaction, so set one. The window is the lookbackWindow field, for example "24 hours".
Delivery channels
- Discord webhook: Posts to a Discord channel through its webhook URL, as an embed with the transaction details.
- Telegram: Sends a message to a Telegram chat through the ChainWard bot. Provide your chat ID.
- Custom webhook: Sends a POST request with the JSON payload below to any public HTTPS URL you choose.
Example webhook payload
With a custom webhook, ChainWard sends a POST request with this JSON body:
{
"type": "large_transfer",
"severity": "warning",
"agent": {
"name": "My Trading Bot",
"wallet": "0xYourAgentWalletAddress",
"chain": "base"
},
"trigger": {
"value": 6250,
"unit": "usd",
"threshold": null,
"tx_hash": "0xabc123..."
},
"timestamp": "2026-03-03T14:30:00Z",
"dashboard_url": "https://chainward.ai/agents"
}severityisinfo,warningorcritical. Test alerts areinfo.trigger.valuedepends on the type: the USD amount forlarge_transfer,gas_spikeandidle_balance; the percent drop forbalance_drop; hours since the last transaction forinactivity;nullforfailed_txandnew_contract.trigger.unitcurrently readsusdfor every type andtrigger.thresholdis alwaysnull, so read the value bytype.tx_hashis the transaction that fired the alert, ornullfor alerts that are not about one transaction.
Testing alerts. Each alert has a Test button in the dashboard (or call
POST /api/alerts/:id/test). It sends a sample alert to your channels so you can check they work. Up to 5 tests a minute.