API guide 4
Webhook Events
Every event AlgoLens can send, exactly when each one fires, and the fields you receive with it.
4.1The envelope
Every delivery has the same three keys. Only data changes from event to event, and it is always the call the event is about.
{
"event": "call.high",
"data": { "id": "…", "symbol": "EXAMPLE", "currentMultiple": 2.4, "…": "…" },
"timestamp": 1788000000
}For how requests are signed and delivered, see Webhooks.
4.2Event reference
Subscribe to any combination when you create an endpoint. Events are evaluated each time your calls are re-priced.
| Event | Fires when |
|---|---|
call.created | A new call is logged for you, or a retired call is opened again. |
call.win | The call's peak reaches 2x its called market cap and it becomes a win. |
call.milestone | The peak crosses 2x, 3x, 5x, 10x, 25x, 50x or 100x. If one update crosses several, only the highest is sent. Adds a milestone field. |
call.high | A new post-call high market cap is recorded. |
call.promoted | The call moves up a lane: Bad to Watch, Watch to Strong, or Bad to Strong. |
call.demoted | The call moves down a lane: Strong to Watch, Watch to Bad, or Strong to Bad. |
call.strong | The call enters the Strong lane. Adds lane and previousLane. |
call.watch | The call enters the Watch lane. Adds lane and previousLane. |
call.bad | The call enters the Bad lane. Adds lane and previousLane. |
call.retrace | The call falls to 60% of its peak or lower, a drop of 40% or more from its high. |
call.no_pair | No live trading pair can be found after three checks in a row. This can mean the token was delisted. It is sent again only if a pair comes back and is lost again. |
call.dormant | The call falls below 0.3x its called market cap, after its first hour, and is marked dormant. See Call lifecycle. |
call.wake | A dormant call recovers to 0.3x or higher and is active again. |
call.resignalled | A dormant call is signalled as a Strong Buy again and wakes up. Sent instead of call.wake in that case. |
call.dismissed | You dismissed the call. The data is its last known state. |
4.3Strong, Watch and Bad lanes
Every call sits in one lane, decided by its current multiple: current market cap divided by market cap when it was called.
| Lane | Current multiple | Event when a call enters it |
|---|---|---|
| Strong | 1.6x or more | call.strong |
| Watch | 1.0x up to 1.6x | call.watch |
| Bad | Below 1.0x | call.bad |
- A new call starts at exactly
1.0x, so it begins in Watch.call.createdis sent for it, notcall.watch. The lane events only fire when a call moves between lanes. - A lane change sends two events: the lane you entered (
call.strong,call.watchorcall.bad) and the direction (call.promotedorcall.demoted). Subscribe to whichever fits your logic. You do not need both. - The three lane events include
laneandpreviousLane, each one ofstrong,watchorbad. - A call can skip a lane in one update, for example from Bad straight to Strong.
{
"event": "call.bad",
"data": {
"id": "5b0c7a3e-1f0e-4c1d-9a55-0d2f6e8f7a10",
"symbol": "EXAMPLE",
"currentMultiple": 0.92,
"peakMultiple": 1.35,
"lane": "bad",
"previousLane": "watch"
},
"timestamp": 1788000000
}The example is shortened. A real delivery carries the full call.
4.4The call object
data is the call at the moment the event was raised. Times are ISO 8601 strings in UTC. Market caps are in US dollars.
| Field | Type | Description |
|---|---|---|
id | string | Unique call ID. Stable across the call's life. |
chain | string | Chain key, such as solana. |
address | string | Token address on that chain. |
name | string | Token name. |
symbol | string | Token symbol. |
calledMarketCap | number | Market cap when the call was made. The base for every multiple. |
calledScore | number | The signal score when the call was made. |
calledAt | string | When the call was made. |
currentMarketCap | number | Latest market cap reading. |
currentMultiple | number | currentMarketCap divided by calledMarketCap. Decides the lane. |
peakMarketCap | number | Highest market cap recorded since the call. |
peakMultiple | number | The credited peak divided by calledMarketCap. |
creditedPeakMarketCap | number | The peak AlgoLens credits the call with. It can be lower than peakMarketCap when a peak is unverified. |
peakAt | string | When the peak was recorded. |
peakUnverified | boolean | True while the recorded peak is not yet confirmed. |
isWin | boolean | True once the peak multiple has reached 2x. |
roundTripped | boolean | A win that has since fallen back below 1.6x. |
dormant | boolean | Whether the call is dormant. |
dormantAt | string | null | When it went dormant, if it did. |
noPair | boolean | True when no live trading pair can be found. |
resignalledAt | string | null | When a dormant call was last signalled again. |
entrySignals | object | null | Measurements captured when the call was made. The contents can be extended over time. |
milestone | number | call.milestone only. The rung crossed. |
lane, previousLane | string | Lane events only. One of strong, watch or bad. |
4.5Full example
A call.milestone delivery for a call that has just passed 3x. The values are illustrative.
{
"event": "call.milestone",
"data": {
"id": "5b0c7a3e-1f0e-4c1d-9a55-0d2f6e8f7a10",
"chain": "solana",
"address": "TokenMintAddress11111111111111111111111111",
"name": "Example Token",
"symbol": "EXAMPLE",
"calledMarketCap": 120000,
"calledScore": 78,
"calledAt": "2026-09-22T09:14:03.000Z",
"currentMarketCap": 372000,
"currentMultiple": 3.1,
"peakMarketCap": 372000,
"peakMultiple": 3.1,
"creditedPeakMarketCap": 372000,
"peakAt": "2026-09-22T09:41:37.000Z",
"peakUnverified": false,
"isWin": true,
"roundTripped": false,
"dormant": false,
"noPair": false,
"milestone": 3
},
"timestamp": 1788000000
}AlgoLens developer documentationAPI guide 4 · Webhook Events