VigPulse

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.

PreviewThis describes a feature that is designed but not built. The figures shown are sample values used to illustrate the layout.
Endpoints documented
4
Base URL
None
Keys issued
0
Version
v0 · unstable

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

One per stage of the pipeline that produces something a consumer would want: what is tracked, what the market thinks, what scored, and how it got there.

GET /v0/markets

Preview

Markets currently tracked, with the books sampled for each.

Query parameters

Parameters proposed for /v0/markets. Documentation preview — this endpoint is not reachable.
NameTypeDetail
sportstringRestrict to one sport code. Only MLB would return anything today.
marketstringRestrict to one market type, such as moneyline or run_line.

Sample response

PreviewGET /v0/marketsSample data
{
  "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

Preview

De-vigged consensus estimate per market, with the weight each source carries.

Query parameters

Parameters proposed for /v0/consensus. Documentation preview — this endpoint is not reachable.
NameTypeDetail
marketIdstringRequired. Identifier returned by the markets endpoint.
includeSourcesbooleanReturn the weighted source breakdown rather than the blended figure alone.

Sample response

PreviewGET /v0/consensusSample data
{
  "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

Preview

Scored rows with state, edge, uncertainty band, and estimated half-life.

Query parameters

Parameters proposed for /v0/opportunities. Documentation preview — this endpoint is not reachable.
NameTypeDetail
statestringFilter by analytic state: BET, WAIT, or PASS.
minScoreintegerReturn only rows scoring at or above this value.

Sample response

PreviewGET /v0/opportunitiesSample data
{
  "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

Preview

Price history per market with velocity, reversal, and divergence flags.

Query parameters

Parameters proposed for /v0/movement. Documentation preview — this endpoint is not reachable.
NameTypeDetail
marketIdstringRequired. Identifier returned by the markets endpoint.
windowMinutesintegerLength of the history window to return, ending at the snapshot instant.

Sample response

PreviewGET /v0/movementSample data
{
  "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

These are the parts worth arguing about before anything is built, because they decide whether a consumer can use the data without misrepresenting it.

Every payload carries snapshotAt

Preview

There 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

Preview

Any 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

Preview

BET, 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

Preview

A 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

Preview

A 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

Preview

The 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

Documentation without operational commitments is a design document. This table is the honest version of the page a developer normally checks first.
Operational properties. Every value below reflects the current state, which is that nothing is deployed.
ItemCurrentDetail
Base URLNone publishedNo 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.
AuthenticationNo keys issuedThe design is a bearer token per client. No key has ever been generated, and there is no request form, portal, or trial.
Rate limitsNot applicableA 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 SLANoneNo availability target is claimed anywhere on this site. The status page is a schema preview, not a health feed.
SupportEmail onlyThere is no developer support channel. Questions about the shape of this documentation go to the same address as everything else.
Bearer authenticationComing soonPublished rate limitsComing soonWebhook deliveryComing soonClient librariesComing soon

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

These are not terms in the legal sense. They are the properties of the data that decide whether it is fit for a given purpose.

It describes a small experiment

Fact today

The 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 limit

Nothing 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 limit

If 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

Preview

Nothing 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

There is no key request form, no developer portal, and no trial. Email is the entire process, and a reply is not guaranteed.

Data and enterprise enquiries

Open

Describe what you would use and what it would be for. Specifics get a better answer than a general expression of interest.

hello@vigpulse.com

Feedback on the shape

Open

The 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.

Send a correction →

What exists instead

Current

The published ledger is the real dataset this project has. It is on the site in full, every graded row, with nothing withheld.

Open the ledger →