vividodds

Odds data, in high definition. One schema. Decimal default. True line only with a sharp ref.

5 minutes
cd apps/api
npx --yes tsx src/server.ts
curl -s localhost:8787/v1/health | jq
open http://127.0.0.1:8787/v1/docs

Data routes need an API key (VIVIDODDS_API_KEYS and/or VIVIDODDS_API_KEY). Guest hub screen is a 5-match demo; Italy warehouse is italy-pack; Ontario warehouse is canada-pack. We do not claim 200 books or 1M odds/sec.

Local workshop (localhost): /v1/workshop

GET /v1/sports   /v1/books   /v1/fixtures   /v1/odds   /v1/true   /v1/value   /v1/board   /v1/board/opportunities   /v1/odds/stream   POST /v1/soft-odds/observe

EU decimal on every price. SSE emits the same Offer object. GET /v1/true?fixture= returns 409 rather than inventing a True line without Pinnacle/sharp. true_mode=composite blends Pin+PS3838+Circa/Novig/BetOnline warehouse slates (soft books stay out). GET /v1/value accepts optional min_odds/max_odds (inclusive European decimal band on soft it_decimal) applied before limit / early-exit. Placers POST /v1/soft-odds/observe live Soft decimals so value stops advertising a stale warehouse ticket.

click Try