# Wickfeed — complete documentation It watches the price move all day and never learns why. So it guesses. And it pays for guessing, on every position, in fees you have stopped counting. Wickfeed tells it what happened, who moved it, and whether the market already knows. Then it can stop guessing. Generated from the site content. Canonical HTML: https://wickfeed.com Last generated: 2026-09-01T15:51:05.089Z --- # 1. Delivery Wickfeed is distributed EXCLUSIVELY through npayload. There is no other realtime endpoint. No HTTP stream, no WebSocket, no CSV, no export. - Subscribe: https://npayload.com/feeds/wickfeed - Command: npx npayload subscribe wickfeed.lit - Topic for the verdict only: wickfeed.lit - Topic for all four types: wickfeed.* Why one door: npayload provides the key, the meter, replay by offset, consumer groups and a hash chained audit trail. Wickfeed did not rebuild any of that, and a single door is what stops the product being taken off to the side. Humans get a ticker delayed 15 minutes and cards on X. Machines get realtime. The free machine tier is rate limited rather than delayed, because a delayed feed cannot be evaluated by an agent. # 2. The problem being solved The price is not the information. It is what is left after the information. By the time your agent sees the number, the thing that caused it already happened somewhere else, and nobody told your system what it was. - So it chases everything: Every flicker looks like a chance. Your agent pays the spread again and again on movement that meant nothing. This is the part that does not feel like losing, which is why it goes on for months. - Or it waits to be sure: By the time a thing is confirmed and obvious, the price already holds it. Your agent arrives after the money is gone and calls that discipline. It was not discipline. It was late. - Neither one is a choice: Both are what a system does when you ask it to decide and refuse to tell it what happened. Your agent is not undisciplined. It was never given the one thing it needed. # 3. The four event types ## wickfeed.moved - type: `wickfeed.moved.v1` - typical latency: 90ms - carries verdict: false - The mid crossed this contract adaptive threshold. Deterministic, no model in the path. ## wickfeed.mouth - type: `wickfeed.mouth.v1` - typical latency: 90ms - carries verdict: false - A watched source spoke about this contract, with relevance and novelty attached. ## wickfeed.print - type: `wickfeed.print.v1` - typical latency: 90ms - carries verdict: false - An official result, filing or document landed from a tracked source. ## wickfeed.lit - type: `wickfeed.lit.v1` - typical latency: 3000ms - carries verdict: true - A qualifying move and a novel, relevant cause coincided. Carries the verdict. This is the product. moved, mouth and print are the reflex: deterministic, with no model in the path. lit is the judgment. # 4. The verdict These are the questions a system has to answer before it risks money. Every signal we send answers all three. ## verdict.What happened Values: news · flow · not yet clear Know whether a fact landed or money simply moved. A large holder rebalancing looks exactly like breaking news when all you have is a number. Your agent stops paying to find out which it was. We judge the move itself before blaming anything for it. When the whole market shifts together, you are told it was money moving, even if a convincing headline happened to appear in the same minute. That single distinction saves your agent from the most expensive false positive in this market. ## verdict.Who moved it Values: named source, scored 0 to 100 Know who caused it, and how much that is worth. A candidate conceding and a commentator speculating move a market by the same amount for very different reasons. Your agent gets to tell them apart. You get the source by name, how strongly it referred to that market, whether it spoke first or merely repeated, and how much weight it has earned from being early in the past. Anything that spoke after the move is never sold to you as the reason for it. ## verdict.What it is worth Values: underpriced · fair · overdone Know if the market has already priced it in. This is the answer that becomes a trade. Everything before it is context; this is the part your agent acts on. We compare this move against what followed this kind of news, from this kind of source, on this kind of market. You learn whether it went far enough, and the gap is where your position lives. This answer gets sharper every day we run, and it cannot be bought back by anyone starting later. ## Honest unknowns A move we cannot explain arrives labelled as unexplained. Your agent stands down instead of trading a story, and that is exactly why you can size on the signals that do carry an answer. - You never trade an invented reason: We would rather tell you we do not know than hand your agent a plausible cause we cannot stand behind. One fabricated answer would cost you more than a hundred quiet minutes. - Silence still tells you something: An unexplained move is real information: the market moved and nobody credible said why. Your agent can widen, wait, or stand aside on that alone. - You can measure how often we are sure: Because we admit the unclear cases, our published record is a real number rather than a curated highlight reel. You calibrate your own risk against it. - Every source we name, we saw: A cause is only named when that source was genuinely captured and scored. Your agent is never pointed at somebody who did not speak. ## There is no sentiment field A statement can be plainly about your market, sound thoroughly positive, and still push the outcome the other way once you read the settlement wording. A mood score calls that bullish and your agent buys the wrong side. We do not send one, at any version, on purpose. Wrong instrument — What others send: A mood reading. “This sounded optimistic.” Cheap to produce, and silent on whether the thing you hold actually pays out. Right instrument — What we send: A direction. “This makes the outcome you hold more likely, judged against the exact words this market settles on.” Harder to produce, and the only version your agent can trade. # 5. Enums - driver: information | liquidity | unknown - reaction: under | proportionate | over | unknown - stance: pro_yes | pro_no | unclear - cause_kind: mouth | print | flow - source_class: candidate | official | agency | pundit | crowd - authority: high | medium | low - book: midterms | fed | sports | geopol | crypto New enum values may be added without a version bump. Tolerate values you do not recognise. # 6. Published floors - relevance to light: 70 - novelty to light: 60 - judge confidence to name cause: 0.55 - attribution below which driver unknown: 0.3 These are published because a subscriber who knows the floors can calibrate their own risk. Hiding them would make the feed less useful, not more defensible. # 7. Relevance and novelty When something big breaks, every account you follow repeats it within minutes. Your agent hears it once, with the corroboration attached, and keeps its judgement clean at exactly the moment noise peaks. - Relevance, 0 to 100: How strongly this text refers to this identified contract. Below the floor it cannot light a fuse, no matter how loud the source. - Novelty, 0 to 100: The first candidate reporting a fact in a 24 hour window scores 100. Every retelling decays. Only the most novel candidate can light; the rest become corroboration on the same wick. - Stance, not sentiment: Measured against the contract’s resolution criteria, as pro yes, pro no, or unclear. A statement can be positive in tone and still push the contract the other way. - Authority, learned: Whether a source is load bearing is not asserted, it is measured from our own archive: who historically leads the mid. This compounds every day the engine runs. # 8. Determinism Ask us for any moment in the past and you get precisely what your agent received at the time. Strategies that work in your research run the same way in production, because the history and the live feed are the same thing. - Nothing is judged early: We wait until everything from a given moment has actually arrived before deciding what caused a move. Your agent gets a settled answer rather than a first guess that changes a second later. - Byte identical replay: Replaying an archived input sequence produces an identical output sequence. This is a tested requirement, not an aspiration. - Late events are recorded, never retrofitted: An event arriving after its window closed is marked late and counted. It never silently rewrites a wick that was already published. - Gaps are visible: A disconnected source produces a recorded gap with a start and an end, shown on the status page. A gap is never filled with interpolated data. # 9. Versioning contract Your handler should tolerate unknown fields and unknown enum values. If it does, 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. Anything in the left column ships without a version bump, which is exactly why consumers must tolerate what they do not recognize. # 10. Identifiers A registry entry carries the question, the resolution criteria it is judged against, its aliases, and its venue mappings. - Lowercase, characters a to z, digits, and hyphen only - Always prefixed wf: - No venue name inside the slug, ever, so one question is one identifier - Stable for the life of the underlying question - Never reused for a different question, under any circumstances - A venue mapping carries a name, that venue’s reference and a public URL. Never a price, a size or book depth. Registry: https://wickfeed.com/ids.json (free, no key) Entry schema: https://wickfeed.com/schema/id-entry.v1.json # 11. Boundaries Never: - We never resell a venue’s order book. Not Kalshi, not anyone. - We never publish a guessed cause. - We never compute a sentiment score, at any version. - We never ship a dashboard, a portfolio, or a charting product. - We never open a realtime door outside npayload. - We never backfill a correction over an archived record. - We never reuse an identifier for a different question. - We never fill a data gap with interpolated values. Always: - Every raw payload archived before it is used. - Every window ordered by event time, so a replay is byte identical. - Every candidate scored for relevance and novelty, so one fact repeated by two hundred accounts emits one wick. - Every identifier permanent, free, and never reused. - Every gap recorded with a start and an end, and shown publicly. - Every miss published, including the ones that embarrass us. ## Source by source Free does not cure a redistribution ban. A source whose terms forbid sharing its data is not an input at any price, paid or free. What protects us is source selection, not pricing. | Source | Access | Raw transport | Derived analysis | |---|---|---|---| | Polymarket market websocket | Public, no auth | Yes | Yes | | Polymarket comments (RTDS) | Public, no auth | Yes | Yes | | Polymarket sports stream | Public, no auth | Yes | Yes | | Polygon public chain | Public chain facts | Yes | Yes | | X posts | Paid API, per read | No | Yes, as scores and references | | Official prints (AP, Fed, FEC) | Public or licensed | Per source terms | Yes | | Kalshi | Terms forbid sharing | Never | Never | | Polymarket US exchange data | Redistribution restricted | Never | Never | For X specifically, the posts themselves are not redistributed. What we publish is our own scores, the author handle, a public URL and a lag figure. The text is not the product. # 12. Pricing Every tier is realtime. The free tier is rate limited rather than delayed, because a machine cannot evaluate a delayed feed. Checkout is an npayload key; we never became a billing company. ## Free — $0 For the agent you are still writing. - Realtime wickfeed.lit - 5 events per hour - npayload key required - Public identifier registry - Full event schema ## Pack — $29/mo The whole feed, one consumer. - All four event types - Every contract in the book - 24 hour replay - 1 consumer - Community support ## Desk — $99/mo For an agent that is trading. - Filters by book, venue and driver - 7 day replay - 10 consumers - Reaction sizing - Resolution radar - Email support ## Priority — $299/mo When the window is the product. - 30 day replay - Priority publish - Unlimited consumers - Full corroboration payloads - Archive export - Direct line Runtimes, terminals and desks: If you are embedding Wickfeed inside an agent platform, a broker terminal or a media system, the shape is different: dedicated topics, negotiated SLA, and a seat count instead of a consumer count. Priced per deal. # 13. Track record You are deciding whether to let our signals move your money. So you get the whole record: how often we were right, how often we were wrong, and how often we said we did not know. Computed from what we actually sent, with nothing left out. - Outcomes recorded at three horizons: For every wick we store the mid at five, fifteen and sixty minutes afterwards. The reaction verdict is judged against those, not against a later narrative. - Computed from the archive, not asserted: The counts on this page are derived from the same stored events subscribers received. The published total must equal the archive total; that equality is a tested requirement. - Nothing filtered out: No category of wick is excluded from the computation to improve the figure. Unknown drivers are counted as what they are, not dropped. - Reproducible by replay: Anyone subscribing can replay our history and regenerate these numbers themselves. If we were shading the figures, you would be able to prove it. Live figures: https://wickfeed.com/record # 14. Frequently asked ### Why can I only subscribe through npayload? Because npayload already solves keys, metering, billing, replay, consumer groups and audit. Rebuilding that would make us a billing company instead of a data company. It also means there is exactly one realtime door, which is what keeps the product from being quietly copied. ### Is the free tier delayed? No. The free tier is realtime and rate limited to five events an hour. Delay is the gate for the public human ticker; a rate limit is the gate for machines. A delayed feed cannot be evaluated by an agent, so delaying the developer tier would have been the same as having no developer tier. ### What happens after the 2026 midterms? Nothing changes structurally. Resolved contracts are archived, the identifiers stay permanent, and new books arrive as registry rows. The Fed, sports and geopolitical books use the same envelope, so an agent written for the midterms keeps working. ### Do you resell Polymarket or Kalshi data? No. We observe public sources and publish our own analysis. We never redistribute a venue’s order book, and Kalshi is not an input at any price because its terms forbid sharing its data. See the boundaries page. ### Can I redistribute the feed to my own users? Not on a standard subscription. A subscription is for your own systems. If you need to surface Wickfeed output to your users, that is a runtime deal and we will price it. ### What is your uptime commitment? You get a public status page and every interruption published with its exact start and end, so you always know what you had. Named uptime commitments come with desk and runtime agreements. We publish real numbers rather than a figure that quietly breaks on the busiest night of the year. # 15. Event envelope JSON Schema ```json { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://wickfeed.com/schema/envelope.v1.json", "title": "Wickfeed event envelope v1", "description": "One envelope for all four event types. Additive only: a field once published is never removed and never changes meaning. Consumers MUST tolerate unknown fields and unknown enum values, because adding a book, venue, source or event type does not bump the version.", "type": "object", "required": [ "type", "wick_id", "id", "book", "venue", "event_time", "emit_time", "mid" ], "additionalProperties": true, "properties": { "type": { "type": "string", "enum": [ "wickfeed.moved.v1", "wickfeed.mouth.v1", "wickfeed.print.v1", "wickfeed.lit.v1" ], "description": "wickfeed..v" }, "wick_id": { "type": "string", "description": "Deterministic and stable across redelivery. Receiving the same wick_id twice is safe to discard." }, "prev_wick_id": { "type": [ "string", "null" ], "description": "Previous wick for this identifier. Forms a chain per contract." }, "id": { "type": "string", "pattern": "^wf:[a-z0-9-]+$", "description": "The canonical wf: identifier. Permanent, never reused. See /ids.json" }, "book": { "type": "string", "enum": [ "midterms", "fed", "sports", "geopol", "crypto" ], "description": "New books may be added without a version bump." }, "venue": { "type": "string" }, "venue_ref": { "type": [ "string", "null" ], "description": "That venue own identifier for the contract." }, "event_time": { "type": "string", "format": "date-time", "description": "The source timestamp. Windows are ordered by this, never by arrival time." }, "emit_time": { "type": "string", "format": "date-time" }, "late": { "type": "boolean", "description": "True if this arrived after its watermark closed." }, "mid": { "type": "number", "minimum": 0, "maximum": 1 }, "delta": { "type": "number", "description": "Signed change across the window." }, "window_s": { "type": "integer" }, "threshold": { "type": "number", "description": "The adaptive threshold in force for this contract when it fired." }, "verdict": { "type": [ "object", "null" ], "description": "Present on wickfeed.lit only. The three fields that carry the product are driver, attribution and reaction.", "required": [ "driver", "attribution", "reaction" ], "additionalProperties": true, "properties": { "driver": { "type": "string", "enum": [ "information", "liquidity", "unknown" ] }, "attribution": { "type": "number", "minimum": 0, "maximum": 1, "description": "Confidence the named cause produced the move. Below 0.3 the driver is reported as unknown." }, "reaction": { "type": "string", "enum": [ "under", "proportionate", "over", "unknown" ] }, "reaction_gap": { "type": [ "number", "null" ], "description": "Distance from proportionate, in probability points." }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "cause": { "type": [ "object", "null" ], "description": "Null when the move could not be explained. A cause is never guessed.", "additionalProperties": true, "properties": { "kind": { "type": "string", "enum": [ "mouth", "print", "flow" ] }, "source": { "type": "string", "description": "Only a source actually observed, archived and scored." }, "source_class": { "type": "string", "enum": [ "candidate", "official", "agency", "pundit", "crowd" ] }, "authority": { "type": "string", "enum": [ "high", "medium", "low" ] }, "relevance": { "type": "integer", "minimum": 0, "maximum": 100 }, "novelty": { "type": "integer", "minimum": 0, "maximum": 100, "description": "First candidate reporting a fact in a 24h window scores 100. Retellings decay." }, "stance": { "type": "string", "enum": [ "pro_yes", "pro_no", "unclear" ], "description": "Measured against the contract resolution criteria. This is NOT a sentiment score; no sentiment field exists at any version." }, "lag_s": { "type": "integer", "description": "Seconds between cause and move. Negative means the cause followed the move." }, "ref": { "type": [ "string", "null" ], "format": "uri" } } } } }, "corroboration": { "type": "array", "description": "Later, less novel candidates reporting the same fact. They never produce their own wick.", "items": { "type": "object", "additionalProperties": true } } } } ``` # 16. Worked examples ## A verdict carrying event, information driven, under reaction ```json { "type": "wickfeed.lit.v1", "wick_id": "wick_01JQ8F3K2M7XNRV4T9Z0BC5D", "prev_wick_id": "wick_01JQ8F1A9H4KPMS2W7Y6XE3B", "id": "wf:us-senate-ga-2026", "book": "midterms", "venue": "polymarket", "venue_ref": "0x747dc809fb79e1b05be09c42d6179459a58de2ef", "event_time": "2026-11-03T19:04:12.331Z", "emit_time": "2026-11-03T19:04:13.902Z", "late": false, "mid": 0.58, "delta": 0.04, "window_s": 300, "threshold": 0.031, "verdict": { "driver": "information", "attribution": 0.79, "reaction": "under", "reaction_gap": 0.021, "confidence": 0.82, "cause": { "kind": "mouth", "source": "@ossoff", "source_class": "candidate", "authority": "high", "relevance": 94, "novelty": 100, "stance": "pro_yes", "lag_s": 240, "ref": "https://x.com/..." } }, "corroboration": [ { "kind": "print", "source": "AP", "relevance": 88, "novelty": 42, "lag_s": 148 } ] } ``` ## An honest unexplained move ```json { "type": "wickfeed.lit.v1", "wick_id": "wick_01JQ8G7P2X9MTKR5V3Z1AD8E", "prev_wick_id": "wick_01JQ8F3K2M7XNRV4T9Z0BC5D", "id": "wf:fed-target-rate-dec-2026", "book": "fed", "venue": "polymarket", "event_time": "2026-11-03T19:14:39.108Z", "emit_time": "2026-11-03T19:14:40.551Z", "late": false, "mid": 0.73, "delta": 0.02, "window_s": 300, "threshold": 0.018, "verdict": { "driver": "unknown", "attribution": 0, "reaction": "unknown", "reaction_gap": null, "confidence": 0, "cause": null }, "corroboration": [] } ``` ## A move with no cause attached ```json { "type": "wickfeed.moved.v1", "wick_id": "wick_01JQ8H2R4B7NXKM9V5Z2CF1G", "prev_wick_id": null, "id": "wf:us-house-control-2026", "book": "midterms", "venue": "polymarket", "event_time": "2026-11-03T19:06:48.002Z", "emit_time": "2026-11-03T19:06:48.093Z", "late": false, "mid": 0.41, "delta": -0.03, "window_s": 300, "threshold": 0.027 } ``` # 17. Machine readable artifacts - https://wickfeed.com/llms.txt (text/plain) — Curated index for an LLM. Start here. - https://wickfeed.com/llms-full.txt (text/plain) — Everything inlined in one fetch. - https://wickfeed.com/asyncapi.json (application/json) — AsyncAPI 3.0 spec: channels, operations, messages. - https://wickfeed.com/schema/envelope.v1.json (application/schema+json) — JSON Schema for the event envelope. - https://wickfeed.com/ids.json (application/json) — The wf: identifier registry. Free, no key. - https://wickfeed.com/schema/id-entry.v1.json (application/schema+json) — JSON Schema for a registry entry. - https://wickfeed.com/examples/lit.json (application/json) — A verdict carrying event. - https://wickfeed.com/examples/unknown.json (application/json) — An honest unexplained move. - https://wickfeed.com/examples/moved.json (application/json) — A move with no cause attached. - https://wickfeed.com/agent.json (application/json) — Discovery descriptor. Also at /.well-known/wickfeed.json - https://wickfeed.com/docs.md (text/markdown) — This documentation as markdown. # 18. Status The engine is being built in the open. This page shows what exists today rather than what is planned, and once the feed is live it will show recorded gaps with their start and end times. - Market name registry: operational — Free to anyone, no key required - Message format: operational — Published and stable - Marketing site: operational — English and French - Price observation: building — Continuous, nothing sampled - Source listening: building — Attached directly to each market - Move detection: building — Every market judged on its own volatility - The answer: building — What happened, who moved it, what it is worth - Provable history: building — Exactly what we sent, kept forever - Live subscriptions: planned — Opens with npayload production - Public track record: planned — Live once we have a full season behind us # 19. Legal Terms: https://wickfeed.com/terms Privacy: https://wickfeed.com/privacy Wickfeed observes public sources and publishes its own analysis. It does not redistribute any venue’s market data. Nothing on this site is investment advice.