Format des alertes
Quand un événement on-chain correspond à une règle, Aicscan crée une alerte (un match), puis une notification par canal de la règle. Vous retrouvez la même alerte sous trois formes :
| Où | Forme | Page |
|---|---|---|
GET /v1/matches |
Alerte structurée : règle, événement on-chain complet, prise en charge. | Lister les alertes |
| Webhook, temps réel | Message prêt à afficher : type, étape, gravité, titre et texte. | Webhooks, Temps réel |
GET /v1/notifications |
Un envoi sur un canal, avec son état et ses tentatives. | Lister les notifications |
Étapes d’une alerte#
stage |
Quand |
|---|---|
unconfirmed |
La transaction est incluse dans un bloc, pas encore confirmé. Envoyée seulement si la règle fait une alerte immédiate. |
confirmed |
Le bloc a atteint le nombre de confirmations de la chaîne. |
cancelled |
Le bloc a été retiré par une réorganisation : l’alerte non confirmée est annulée, aucune action n’est requise. |
escalation |
Alerte critique toujours sans prise en charge 5 minutes après son envoi : un rappel part vers les canaux d’escalade de l’espace (role: "escalation"), à défaut vers le canal d’origine. Le texte commence par ⏰ ESCALADE. |
Une même alerte peut donc donner deux messages (unconfirmed puis confirmed, ou unconfirmed puis cancelled). Dans GET /v1/matches, phase vaut immediate (vue avant confirmation) ou confirmed.
Les canaux reçoivent aussi d’autres messages que les alertes, distingués par type : digest (récapitulatif d’alertes regroupées), test (message de test), security (changement sensible dans l’espace, par exemple la suppression d’une règle ou d’un canal), summary (résumé quotidien ou hebdomadaire) et service (avis d’interruption ou de reprise du service). Ignorez les types que vous ne traitez pas.
Gravité et priorité#
severity |
priority |
|---|---|
critical |
30 et plus |
warning |
20 à 29 |
info |
moins de 20 |
Message envoyé aux canaux#
Le message est du texte brut, rédigé dans la langue du canal (locale). Sa première ligne est le titre (title) ; le texte complet est dans text. Exemple en anglais pour une règle large_transfer :
🔴 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-5d6e7f8091a2Le même message en français :
🔴 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- La première ligne commence par la gravité (
CRITICAL,WARNING,INFO) ou parCANCELLEDpour une annulation, suivie du nom de la règle et du sens. - La deuxième ligne donne l’étape :
UNCONFIRMED · waiting for 15 confirmations,Confirmed · 15 confirmations. - L’équivalent en dollars (et en francs CFA en français) n’apparaît que pour les stablecoins.
- Le lien « Details » mène toujours au domaine
aicscan.io. Aucun message ne contient de lien vers un autre domaine, ni de demande de connexion, de signature ou d’envoi de fonds.
Ne pas analyser le texte
Le texte est fait pour être lu par une personne et peut évoluer. Pour un traitement automatique, utilisez les champs structurés (type, stage, severity) puis lisez l’alerte complète avec GET /v1/matches (montant brut, adresses, hash de transaction, numéro de bloc).
Alerte structurée#
{
"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 indique la prise en charge de l’alerte par un membre de l’espace (by, at) ; null tant que personne ne l’a prise en charge. Le statut de l’événement (status) vaut pending, confirmed ou orphaned (bloc retiré par une réorganisation).