POST request. This page describes the envelope and each event type. To register an endpoint, verify signatures, and handle retries, see Webhooks.
The trade and feed examples tell one story. Event 101 opens a Bitcoin long on source message tg:1001:42. A few minutes later the event is corrected: Centaur deletes 101 and creates 102 with the corrected price. Later, the only event of message tg:1001:57 is removed.
Envelope
Each request also carries these headers:
Some fields are open sets:
origin on trade events and kind on feed events. New values can appear without a schema version change. When you receive a value you do not know, inspect the event before acting on it.
Payloads can also gain fields without a schema version change, so ignore fields you do not know instead of rejecting the delivery. A new event type reaches only endpoints that subscribe to it, and eventTypes accepts only the types on this page.
Trade events
A trade event payload is one row ofGET /v2/events, keyed by the event id. New trade events include assetId and the position direction (long or short), as REST does. Older stored events stay replayable and may omit them. Event rows never change, so there is no trade_event.updated: a corrected event is deleted and a new one created.
trade_event.created adds origin:
new: the event is a first detection.replacement: another event of the same source message (the samemessageId) was deleted at the same time. UsemessageIdto pair thetrade_event.deletedwith thetrade_event.createdthat replaces it.
origin describes what Centaur observed, not why it happened. A replacement can carry the same content as the event it replaces: see Limitations.
trade_event.deleted repeats the row as it was last delivered. Stop treating that event as true.
trade_event.created
trade_event.deleted
Feed items
A feed item payload is one source-message group ofGET /v2/feed, keyed by the Source Message ID (data.id), with the same source block, trader card and curation. Instead of a single events list it carries three lists:
current: the message’s active events after the change. Treat it as the truth for the message.added: events that became active in this change.removed: events that stopped being active in this change, withid,kind,assetIdanddirection. Legacy stored removals may omit asset and direction.
Centaur sends at most one feed item event per message per detection pass. The type says where the message stands afterwards;
added and removed say what happened. removed means stop treating the event as true. It is not an instruction to reverse a trade.
Each feed event carries kind. Today every event is a trade; more kinds may follow. Feed event assets always include slug, which is null when unavailable.
feed_item.created
feed_item.updated
feed_item.deleted
Positioning
A positioning event carries one whole Position Intelligence view after Centaur recalculated it. It is sent when top-10 membership changes, or a retained top-10 asset changes category in Crowd Fade or Smart Money. Crossing the #10 boundary counts as entering or leaving; rank movement within the top 10 and changes wholly outside it send nothing. Leaders’ Book evaluates the first 10 rows of each part independently. Each event carries the whole view, so its body is much larger than a trade or feed event.
The payload has two fields:
result: the view exactly as its REST path returns it with default parameters, includingcalculationAtand the resolvedparameters. Endpoint filters do not apply: the view is always complete.changes: what changed since the previous calculation of the same view.
changes has a kind and a key. The key identifies a row the way the view does:
from and to are directions (long or short): the crowded side for Crowd Fade, and the smart cohort’s direction for Smart Money vs Crowd. In views with one row per asset and direction, a direction flip is a left plus an entered. Each calculation is compared with the previous one, with no smoothing, so a row near a threshold can enter and leave on consecutive calculations.