Documentation
Eight lines to your first event, then no rewrite.
One envelope covers every event type and every book. Get a key, subscribe to a topic, filter on the verdict. That is the whole integration.
Point your agent here
Your agent can read this documentation itself.
Hand any of these files to a model or a script and it has what it needs to consume the feed correctly, without a person transcribing this page into code.
/llms.txt text/plain Curated index for an LLM. Start here. /llms-full.txt text/plain Everything inlined in one fetch. /asyncapi.json application/json AsyncAPI 3.0 spec: channels, operations, messages. /schema/envelope.v1.json application/schema+json JSON Schema for the event envelope. | File | What it is for |
|---|---|
/ids.json | The wf: identifier registry. Free, no key. |
/schema/id-entry.v1.json | JSON Schema for a registry entry. |
/examples/lit.json | A verdict carrying event. |
/examples/unknown.json | An honest unexplained move. |
/examples/moved.json | A move with no cause attached. |
/agent.json | Discovery descriptor. Also at /.well-known/wickfeed.json |
/docs.md | This documentation as markdown. |
Every file is served from this site and needs no key. The specs and examples are generated from the same source as this page.
Quickstart
From nothing to a live event.
The free tier is realtime, so you build against the same events a paying subscriber receives rather than a sandbox that behaves differently.
- 1
Get an npayload key
Wickfeed is a feed on npayload. Create a key there, then subscribe to the wickfeed topic. There is no separate Wickfeed account to manage.
- 2
Subscribe to a topic
wickfeed.lit for the verdict, or wickfeed.* for all four event types. Per contract topics exist for a single race.
- 3
Filter on the verdict
Most agents want driver equal to information, attribution above a floor they choose, and reaction equal to under. Three conditions and you are done.
- 4
Replay when you need history
Ask npayload for an offset and read the window again. Windows are ordered by the source clock, so the replay is byte identical to what was published live.
# one key, one command
npx npayload login
npx npayload subscribe wickfeed.lit
# filter to what your agent trades
npx npayload subscribe wickfeed.lit \
--filter 'book=midterms' \
--filter 'driver=information' \
--filter 'reaction=under'Envelope reference
The fields your handler reads.
All four event types share this shape. moved, mouth and print omit the verdict object. Only lit carries it. The published JSON schema carries the complete field list.
Identity
type | string | wickfeed.<kind>.v<n> |
wick_id | string | wick_ plus 26 hex characters, derived from the contract, the window and the cause. Stable across redelivery, so a duplicate is safe to discard. |
prev_wick_id | string | null | The previous wick for this identifier, forming a chain per contract. Null exactly once, at the head of the chain. |
id | string | The canonical wf: identifier. |
book | string | The registry book. Live today: midterms and fed. New books are added without a version bump. |
venue | string | Where this observation came from. |
venue_ref | string | null | That venue’s own identifier for the contract. Null until it is resolved against that venue’s live data. |
Time
event_time | ISO 8601 | The source’s timestamp. Windows are ordered by this, never by arrival. |
emit_time | ISO 8601 | When Wickfeed published. |
late | boolean | True when this arrived past the lateness bound. It never rewrites a wick already published. |
Price
mid | number | 0.0 to 1.0. |
delta | number | Signed change across the window. |
window_s | integer | Window length in seconds. |
threshold | number | The threshold in force for this contract when it fired, derived from its own realized volatility. |
Verdict (lit only)
verdict.driver | enum | information, liquidity, unknown. Unknown below an attribution of 0.30. |
verdict.attribution | number | 0.00 to 1.00. Confidence the named cause produced the move. |
verdict.reaction | enum | under, proportionate, over, unknown. |
verdict.reaction_gap | number | null | Distance from proportionate, in probability points. |
verdict.confidence | number | Judge confidence in the verdict. A lit publishes only at or above the publish floor, which starts at 0.70. |
Cause
cause.kind | enum | mouth, print, flow. |
cause.source | string | The account, agency or venue actually observed. |
cause.source_class | enum | candidate, official, agency, pundit, crowd. |
cause.authority | enum | high, medium, low. |
cause.relevance | integer | 0 to 100. Below 70 a candidate cannot light a fuse. |
cause.novelty | integer | 0 to 100. The first report of a fact in a 24 hour window scores 100. |
cause.stance | enum | pro_yes, pro_no, unclear. Never a sentiment score. |
cause.lag_s | integer | Seconds between cause and move, on source clocks only. Negative means the cause followed the move. |
The versioning contract
Additive only, forever.
Tolerate unknown fields and unknown enum values in your handler. Do that, and adding the 2028 book will never break a running agent.
no version bump
- Adding a field
- Adding a new book, venue or source
- Adding a new enum value
- Adding a new event type
requires a bump
- Removing a field
- Changing the meaning of a field
- Narrowing an enum
Everything in the left column ships without a version bump, which is exactly why a consumer must tolerate what it does not recognise.
Your agent sees the price move. Send it the reason.
Subscribe with an npayload key. The free tier is realtime, capped at five events an hour, and eight lines of code print your first event.
No card. No login. No dashboard.