Developer preview
The API that does not exist yet
Documentation for a data API VigPulse might publish: markets, consensus, opportunities, and movement. There is no base URL, no key, and no endpoint to call. This page exists so the shape of the data can be evaluated before anything is built on it.
Status
Not publicly available
Nothing here is callable
No host is published, no key exists, and no request against any path below will reach anything. This is a documentation preview: the endpoint list, the field names, and the sample payloads are a design published for feedback, not an interface with a service behind it.
If you find a URL claiming to be the VigPulse API, it is not operated by this project. The only thing this site publishes today is the public paper ledger and a set of client-side calculators.
- Service deployed
- No
- Sandbox
- None
- Client libraries
- None
- Committed date
- None
Reference
Four endpoints
GET /v0/markets
PreviewMarkets currently tracked, with the books sampled for each.
Query parameters
| Name | Type | Detail |
|---|---|---|
| sport | string | Restrict to one sport code. Only MLB would return anything today. |
| market | string | Restrict to one market type, such as moneyline or run_line. |
Sample response
{
"snapshotAt": "2026-08-23T18:05:00Z",
"markets": [
{
"id": "bos-tb-rl",
"sport": "MLB",
"market": "run_line",
"books": [
"book-a",
"book-b",
"book-c"
]
}
]
}Sample payload only. Values are invented and framed on the fixed demo snapshot (23 Aug 2026, 18:05 UTC). No request returns this, because no service exists.
GET /v0/consensus
PreviewDe-vigged consensus estimate per market, with the weight each source carries.
Query parameters
| Name | Type | Detail |
|---|---|---|
| marketId | string | Required. Identifier returned by the markets endpoint. |
| includeSources | boolean | Return the weighted source breakdown rather than the blended figure alone. |
Sample response
{
"snapshotAt": "2026-08-23T18:05:00Z",
"marketId": "bos-tb-rl",
"fair": {
"american": 128,
"probability": 0.4386
},
"sources": [
{
"source": "sharp_consensus",
"weight": 0.4
},
{
"source": "latent_market",
"weight": 0.35
},
{
"source": "model_fair",
"weight": 0.25
}
]
}Sample payload only. Values are invented and framed on the fixed demo snapshot (23 Aug 2026, 18:05 UTC). No request returns this, because no service exists.
GET /v0/opportunities
PreviewScored rows with state, edge, uncertainty band, and estimated half-life.
Query parameters
| Name | Type | Detail |
|---|---|---|
| state | string | Filter by analytic state: BET, WAIT, or PASS. |
| minScore | integer | Return only rows scoring at or above this value. |
Sample response
{
"snapshotAt": "2026-08-23T18:05:00Z",
"opportunities": [
{
"id": "bos-minus-1-5",
"state": "BET",
"score": 82,
"edgePoints": 1.84,
"evPercent": 4.39,
"halfLifeMinutes": 18
}
]
}Sample payload only. Values are invented and framed on the fixed demo snapshot (23 Aug 2026, 18:05 UTC). No request returns this, because no service exists.
GET /v0/movement
PreviewPrice history per market with velocity, reversal, and divergence flags.
Query parameters
| Name | Type | Detail |
|---|---|---|
| marketId | string | Required. Identifier returned by the markets endpoint. |
| windowMinutes | integer | Length of the history window to return, ending at the snapshot instant. |
Sample response
{
"snapshotAt": "2026-08-23T18:05:00Z",
"marketId": "bos-tb-rl",
"velocityPointsPerMin": 0.02,
"reversal": false,
"divergence": true,
"history": [
{
"t": -60,
"american": 145
},
{
"t": -30,
"american": 142
},
{
"t": 0,
"american": 138
}
]
}Sample payload only. Values are invented and framed on the fixed demo snapshot (23 Aug 2026, 18:05 UTC). No request returns this, because no service exists.
Conventions
Rules the payloads would follow
Every payload carries snapshotAt
PreviewThere is no implicit now. A response describes one observed instant, and a consumer that ignores that field will silently treat old data as current.
Probabilities are de-vigged
PreviewAny probability field is a fair probability with book margin removed. Raw implied values are returned separately rather than mixed into the same field.
States are labels, not instructions
PreviewBET, WAIT, and PASS describe a model conclusion. Nothing in a response is a recommendation, and no field says a price is available.
Books are identifiers, not endorsements
PreviewA book identifier in a response says only which source a quote came from. It implies no integration, no partnership, and no availability to any account.
Absent means absent
PreviewA field that was never captured is null. Nothing is back-filled with a plausible value, which is the same rule the public ledger follows.
Versioned in the path
PreviewThe v0 prefix means exactly what it looks like: unstable, subject to breaking change, and not something to build a product on.
Why snapshotAt is on every response
The demo dataset across this site is framed on one fixed instant, 2026-08-23T18:05:00Z, and never on the current time. A data product that lets a consumer forget when an observation was made will eventually have that observation presented as a live price by somebody else. Putting the instant in every payload makes the mistake harder to make.
Operations
Everything a real API needs, and its actual state
| Item | Current | Detail |
|---|---|---|
| Base URL | None published | No host is documented because no service is deployed. There is nothing to point a client at, and any URL claiming to be this API is not ours. |
| Authentication | No keys issued | The design is a bearer token per client. No key has ever been generated, and there is no request form, portal, or trial. |
| Rate limits | Not applicable | A limit is a property of a running service. When one exists it would be published as a number here, alongside the headers that report remaining quota. |
| Uptime and SLA | None | No availability target is claimed anywhere on this site. The status page is a schema preview, not a health feed. |
| Support | Email only | There is no developer support channel. Questions about the shape of this documentation go to the same address as everything else. |
Webhook delivery would ship alongside alerts, which are themselves a roadmap item with nothing built behind them.
Constraints
What a consumer of this data would have to accept
It describes a small experiment
Fact todayThe underlying project covers MLB moneyline only, on paper, with 33 graded entries and 6 pre-game closing-line readings. An API over that is an API over a research record, not a market data service.
It is not a price feed
Hard limitNothing in this design promises that a quoted price is available, current, or takeable at any operator. A consumer rendering these values next to a bet button would be making a claim the data does not support.
States must survive transport
Hard limitIf a consumer strips the uncertainty band, the half-life, and the reasoning and renders only the word BET, the result is a tout feed with a technical veneer. Any real terms would prohibit exactly that.
Redistribution is a separate question
PreviewNothing has been decided about redistribution, caching, or resale, because there is nothing to redistribute. It is listed here so it is not mistaken for a granted permission.
Contact
If the data would be useful to you
Data and enterprise enquiries
OpenDescribe what you would use and what it would be for. Specifics get a better answer than a general expression of interest.
Feedback on the shape
OpenThe point of publishing a design nobody can call is to hear that a field is wrong before it is built. Corrections to the payload structure are genuinely welcome.
What exists instead
CurrentThe published ledger is the real dataset this project has. It is on the site in full, every graded row, with nothing withheld.