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.

EventFires when
call.createdA new call is logged for you, or a retired call is opened again.
call.winThe call's peak reaches 2x its called market cap and it becomes a win.
call.milestoneThe 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.highA new post-call high market cap is recorded.
call.promotedThe call moves up a lane: Bad to Watch, Watch to Strong, or Bad to Strong.
call.demotedThe call moves down a lane: Strong to Watch, Watch to Bad, or Strong to Bad.
call.strongThe call enters the Strong lane. Adds lane and previousLane.
call.watchThe call enters the Watch lane. Adds lane and previousLane.
call.badThe call enters the Bad lane. Adds lane and previousLane.
call.retraceThe call falls to 60% of its peak or lower, a drop of 40% or more from its high.
call.no_pairNo 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.dormantThe call falls below 0.3x its called market cap, after its first hour, and is marked dormant. See Call lifecycle.
call.wakeA dormant call recovers to 0.3x or higher and is active again.
call.resignalledA dormant call is signalled as a Strong Buy again and wakes up. Sent instead of call.wake in that case.
call.dismissedYou 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.

LaneCurrent multipleEvent when a call enters it
Strong1.6x or morecall.strong
Watch1.0x up to 1.6xcall.watch
BadBelow 1.0xcall.bad
  • A new call starts at exactly 1.0x, so it begins in Watch. call.created is sent for it, not call.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.watch or call.bad) and the direction (call.promoted or call.demoted). Subscribe to whichever fits your logic. You do not need both.
  • The three lane events include lane and previousLane, each one of strong, watch or bad.
  • 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.

FieldTypeDescription
idstringUnique call ID. Stable across the call's life.
chainstringChain key, such as solana.
addressstringToken address on that chain.
namestringToken name.
symbolstringToken symbol.
calledMarketCapnumberMarket cap when the call was made. The base for every multiple.
calledScorenumberThe signal score when the call was made.
calledAtstringWhen the call was made.
currentMarketCapnumberLatest market cap reading.
currentMultiplenumbercurrentMarketCap divided by calledMarketCap. Decides the lane.
peakMarketCapnumberHighest market cap recorded since the call.
peakMultiplenumberThe credited peak divided by calledMarketCap.
creditedPeakMarketCapnumberThe peak AlgoLens credits the call with. It can be lower than peakMarketCap when a peak is unverified.
peakAtstringWhen the peak was recorded.
peakUnverifiedbooleanTrue while the recorded peak is not yet confirmed.
isWinbooleanTrue once the peak multiple has reached 2x.
roundTrippedbooleanA win that has since fallen back below 1.6x.
dormantbooleanWhether the call is dormant.
dormantAtstring | nullWhen it went dormant, if it did.
noPairbooleanTrue when no live trading pair can be found.
resignalledAtstring | nullWhen a dormant call was last signalled again.
entrySignalsobject | nullMeasurements captured when the call was made. The contents can be extended over time.
milestonenumbercall.milestone only. The rung crossed.
lane, previousLanestringLane 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