Agents
Alert Watchtower
Watches your tokens and explains every alert.
Give it a list of tokens and optionally a webhook URL. It returns what is happening right now on each token (recent signals with the brief that explains them) and, with a webhook, keeps watching: every new signal or brief is pushed to you as a signed message.
When to use it #
- You hold or follow a few tokens and want every alert explained.
- An app needs signed webhooks without building the signal engine.
Built for: Funds & market makers · Active traders
How it decides #
- Collects recent signals at or above your severity on your tokens, each with the brief that explains it.
- With a webhook URL it also creates a monitor, so new signals and briefs are pushed to you, signed.
Verdicts #
| Verdict | Meaning |
|---|---|
| ACTIVE | There are alerts in the window. |
| QUIET | Nothing at your severity. |
Input #
POST
/v1/agents/alert-watchtowerBody
tokensstring[]requiredwebhook_urlstringoptionalOptional public https URL for continuous alertsmin_severityinteger (1–3)optionaldefault 2hoursinteger (1–48)optionaldefault 24
Examples #
Real runs, captured from the live service.
ADA, LINK and SOL
Request
curl -X POST "https://coingraph.ai/api/v1/agents/alert-watchtower" \
-H "content-type: application/json" \
-d '{"tokens":["cardano","chainlink","solana"],"min_severity":2}'Response · real, captured 2026-10-06 23:24 UTC · long lists trimmed
{
"object": "agent_run",
"id": "run_fb42ac1558de083154fc",
"as_of": "2026-10-06T23:23:30.834Z",
"data": {
"run_id": "run_fb42ac1558de083154fc",
"agent": "alert-watchtower",
"agent_version": "1.0.0",
"as_of": "2026-10-06T23:23:30.834Z",
"verdict": "ACTIVE",
"summary": "7 alerts in the last 24h on 3 of 3 tokens; latest: LINK volume spike.",
"result": {
"tokens": [
"cardano",
"chainlink",
"solana"
],
"alerts": [
{
"at": "2026-10-06T20:15:51.450Z",
"token": "LINK",
"kind": "volume_spike",
"direction": "neutral",
"severity": 2,
"explained_by": null,
"details": {
"median_15m_24h": 170380,
"volume_usd_15m": 817977
}
},
{
"at": "2026-10-06T20:13:51.562Z",
"token": "LINK",
"kind": "volume_spike",
"direction": "neutral",
"severity": 2,
"explained_by": null,
"details": {
"median_15m_24h": 169891,
"volume_usd_15m": 812684
}
},
{
"at": "2026-10-06T16:45:52.401Z",
"token": "ADA",
"kind": "volume_spike",
"direction": "neutral",
"severity": 2,
"explained_by": null,
"details": {
"median_15m_24h": 461710,
"volume_usd_15m": 2646548
}
},
"… 4 more"
],
"per_token": [
{
"token": "cardano",
"alerts": 2
},
{
"token": "chainlink",
"alerts": 2
},
{
"token": "solana",
"alerts": 3
}
],
"watch": null
},
"reasons": [
{
"text": "LINK: volume spike (neutral, severity 2)",
"source": "coingraph:signals"
},
{
"text": "LINK: volume spike (neutral, severity 2)",
"source": "coingraph:signals"
},
{
"text": "ADA: volume spike (neutral, severity 2)",
"source": "coingraph:signals"
},
"… 2 more"
],
"warnings": [],
"links": {},
"disclaimer": "CoinGraph never trades, holds funds or gives financial advice. The caller decides.",
"hash": "11746c68721ec32b7e317e682d28dd8451633d03a8d3246945638a1b4475cd7d",
"verify_url": "https://coingraph.ai/api/v1/verify/run_fb42ac1558de083154fc"
},
"sources": []
}Result fields #
Inside data.result:
| Field | Contents |
|---|---|
alerts[] | Token, kind, direction, severity, time and the explaining brief. |
per_token | Counts per token. |
watch | The monitor id and how messages are signed (only with a webhook). |
i
Note
The monitor secret is returned once in the response and is not stored in the public run record.
Use it from Claude #
With CoinGraph connected (how), ask in plain words, or call the tool directly:
MCP tools/call
{
"name": "run_alert_watchtower",
"arguments": {
"tokens": [
"cardano",
"chainlink",
"solana"
],
"min_severity": 2
}
}The proof for any run: https://coingraph.ai/proof/run_…