Alert format
When an on-chain event matches a rule, Aicscan creates an alert (a match), then one notification per channel of the rule. You find the same alert in three forms:
| Where | Form | Page |
|---|---|---|
GET /v1/matches |
Structured alert: rule, full on-chain event, acknowledgement. | List alerts |
| Webhook, real time | Ready-to-display message: type, stage, severity, title and text. | Webhooks, Real time |
GET /v1/notifications |
One delivery on one channel, with its status and attempts. | List notifications |
Alert stages#
stage |
When |
|---|---|
unconfirmed |
The transaction is in a block that is not confirmed yet. Only sent when the rule makes an immediate alert. |
confirmed |
The block reached the chain's number of confirmations. |
cancelled |
A reorganization removed the block: the unconfirmed alert is cancelled, no action is needed. |
escalation |
Critical alert still not acknowledged 5 minutes after it was sent: a reminder goes to the workspace's escalation channels (role: "escalation"), or to the original channel if there is none. The text starts with ⏰ ESCALADE. |
One alert can therefore produce two messages (unconfirmed then confirmed, or unconfirmed then cancelled). In GET /v1/matches, phase is immediate (seen before confirmation) or confirmed.
Channels also receive other messages than alerts, told apart by type: digest (summary of grouped alerts), test (test message), security (sensitive change in the workspace, such as a deleted rule or channel), summary (daily or weekly summary) and service (notice of a service interruption or recovery). Ignore the types you do not handle.
Severity and priority#
severity |
priority |
|---|---|
critical |
30 and above |
warning |
20 to 29 |
info |
below 20 |
Message sent to channels#
The message is plain text, written in the channel's language (locale). Its first line is the title (title); the full text is in text. Example in English for a large_transfer rule:
🔴 CRITICAL · Treasury: large USDT outflows · outgoing
✅ Confirmed · 15 confirmations
Chain: BNB Chain
Address: Treasury (0x8894…d4e3)
Amount: 250,000 USDT (≈ $250,000)
To: 0x77cd…01e2 (unknown)
Block 45,123,456
Details: https://aicscan.io/e/0193a1c9-3e02-7f3a-9b4c-5d6e7f8091a2The same message in French:
🔴 CRITIQUE · Treasury: large USDT outflows · sortant
✅ Confirmée · 15 confirmations
Chaîne : BNB Chain
Adresse : Treasury (0x8894…d4e3)
Montant : 250 000 USDT (≈ 250 000 $ · ≈ 148 millions FCFA)
Vers : 0x77cd…01e2 (inconnue)
Bloc 45 123 456
Détails : https://aicscan.io/e/0193a1c9-3e02-7f3a-9b4c-5d6e7f8091a2- The first line starts with the severity (
CRITICAL,WARNING,INFO) or withCANCELLEDfor a cancellation, followed by the rule name and the direction. - The second line gives the stage:
UNCONFIRMED · waiting for 15 confirmations,Confirmed · 15 confirmations. - The dollar equivalent (and CFA francs in French) only appears for stablecoins.
- The "Details" link always points to the
aicscan.iodomain. No message contains a link to another domain, nor a request to log in, sign or send funds.
Do not parse the text
The text is meant to be read by a person and can change. For automated processing, use the structured fields (type, stage, severity), then read the full alert with GET /v1/matches (raw amount, addresses, transaction hash, block number).
Structured alert#
{
"id": "0193a1c9-3f10-7d42-8a1b-2c3d4e5f6a7b",
"phase": "confirmed",
"created_at": "2026-11-14T09:30:13.590Z",
"rule": { "id": "0193a1b4-2e7f-7a10-9b3c-4d5e6f708192", "name": "Treasury: large USDT outflows", "severity": "critical" },
"event": {
"id": "0193a1c9-3e02-7f3a-9b4c-5d6e7f8091a2",
"chain_id": 56,
"block_number": 45123456,
"block_hash": "0x5f1c0a7e9d3b2c4a6e8f0d1b3c5a7e9f1d3b5c7a9e1f3d5b7c9a1e3f5d7b9c1a",
"block_timestamp": "2026-11-14T09:30:12Z",
"tx_hash": "0x9a8b7c6d5e4f30211203f4e5d6c7b8a99a8b7c6d5e4f30211203f4e5d6c7b8a9",
"source": "log",
"source_index": 211,
"type": "erc20_transfer",
"contract": "0x55d398326f99059ff775485246999027b3197955",
"from": "0x8894e0a0c962cb723c1976a4421c95949be2d4e3",
"to": "0x77cd0000000000000000000000000000000001e2",
"token": "0x55d398326f99059ff775485246999027b3197955",
"amount": "250000000000000000000000",
"status": "confirmed",
"payload": {},
"created_at": "2026-11-14T09:30:13.402Z"
},
"acknowledged": null
}acknowledged tells whether a workspace member acknowledged the alert (by, at); null until someone does. The event status is pending, confirmed or orphaned (block removed by a reorganization).