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

NameKeySetting
Large Transfer
Fires when a single transaction moves at least a set USD amount.
large_transferUSD 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_dropPercent and window. Default 20% in 1 hour.
Gas Spike
Fires when the gas cost of a single transaction reaches a set USD amount.
gas_spikeUSD amount. The dashboard preset is $25.
Failed Transaction
Fires on any reverted (failed) transaction.
failed_txNone: any failure fires.
Inactivity
Fires when no transactions are seen within a lookback window. Useful for catching stuck or crashed agents.
inactivityWindow. Default 24 hours.
New Contract Interaction
Fires when an agent interacts with a contract address it has never transacted with before.
new_contractNone: 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_balanceUSD 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"
}
  • severity is info, warning or critical. Test alerts are info.
  • trigger.value depends on the type: the USD amount for large_transfer, gas_spike and idle_balance; the percent drop for balance_drop; hours since the last transaction for inactivity; null for failed_tx and new_contract.
  • trigger.unit currently reads usd for every type and trigger.threshold is always null, so read the value by type.
  • tx_hash is the transaction that fired the alert, or null for 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.

ChainWard reads Base directly and tells you what the chain shows: the answer, the reason, and the evidence. On-chain behavior only, so it can't see promises made off-chain. Free and public.