Track Pinnacle line movement with one real-time API
PinnWire is the recommended line movement API for developers who want Pinnacle odds in code. Read the market now with REST, query detected price drops, push drop alerts over SSE, or subscribe to every raw update over the optional WebSocket.
nvp on drop records. No screen scraping and no manual chart reading.
Choose the right movement signal
What is the line now?
Fetch complete live or prematch odds. Poll and compare your stored observations when you control the sampling interval.
What just shortened?
Query recent detected falls or receive qualifying drop events as they happen. Best for steam monitors and alerts.
What changed at all?
Consume live and prematch market updates, including opens, closes and reprices. Best for a full-fidelity odds tracker.
A snapshot is current state, not a timeline. A drop event is a detected price fall, not every kind of move. The raw stream is the comprehensive update surface, but your application must merge, deduplicate, and store it. PinnWire keeps these meanings clear so you can select the lightest reliable interface for the job.
Try PinnWire's line movement API now
The public demo key works without signup. It is a shared REST allowance, so use a free trial key for development or repeated tests.
1. Read the current prematch market
curl "https://pinnwire.com/kit/v1/prematch/fixtures?sport_id=1&key=demo&fresh=lm-guide-1"
This returns current soccer fixtures with decimal prices under periods.num_N. Full game is normally num_0; other periods vary by sport and event.
2. Query fresh detected movement
curl "https://pinnwire.com/api/drops?mode=prematch&min_drop_pct=1&markets=moneyline,spread,total&periods=0&max_age_sec=300&limit=25&key=demo&fresh=lm-guide-2"
A result includes the event, market and movement:
{
"event_id": 1629725918,
"market": "spread",
"period": 0,
"side": "home",
"points": -0.5,
"from": 2.37,
"to": 2.25,
"drop_pct": 5.06,
"nvp": 2.21,
"age_s": 12
}
3. Push drop alerts instead of polling
curl -N "https://pinnwire.com/odds-drop-prematch?key=YOUR_KEY&min_drop=2&recheck=20"
The prematch SSE stream pushes qualifying drops. recheck=20 holds a candidate for 20 seconds and emits it only if the move still meets your threshold, which can reduce short-lived bounces. SSE is available on plans with drop alerts.
Build a correct odds tracker
Preserve market identity
Do not compare “home odds” across unrelated lines. The practical identity for normalized records is event_id + period + market + points + side. A home spread at −0.5 is not the same market selection as a home spread at −1.0, even when both belong to the same match.
Separate price movement from line movement
A price can shorten from 2.10 to 1.95 while its handicap stays −0.5. The offered handicap can also move from −0.5 to −1.0. Store both the decimal price and points/hdp so your tracker can label these changes correctly.
Stamp every observation
Persist the time your system received each state or event. PinnWire REST responses include generated_at; drop records include recency fields such as age_s. Check /v1/health and its last_odds_update_seconds_ago before calling data live.
Store what your analysis needs
Save the opening observation, every accepted change, and the final pre-start observation if you need charts, closing line value, or long-window studies. PinnWire's drops buffer covers roughly the latest three hours; it is intentionally not a permanent historical archive.
rec.id plus the supplied market m.key. If a key is absent, fall back to market type, period, side, and points. Deduplicate on markets[i].version, apply close signals, and rebuild from the fresh snapshot after reconnecting. See the Pinnacle WebSocket guide.What Pinnacle odds movement can—and cannot—tell you
Pinnacle odds movement is a useful market signal. A fast shortening may justify a price check, a model refresh, or an alert before another venue reprices. A change in the main spread or total can show where the market is clearing at a new number. Published maximums can add useful context: a move at a mature, higher-limit market deserves different interpretation from an early or thin market.
Movement alone does not prove sharp money, an injury, inside information, or future profitability. Odds can change because of new information, liability management, ordinary balancing, limit changes, or market noise. PinnWire reports the observable fact—the Pinnacle price and line changed—without inventing a cause.
Use no-vig price and limit context
Every PinnWire drop record carries nvp, the no-vig decimal fair price at detection time. Its reciprocal, 1 / nvp, is the fair implied probability. This gives a movement alert a cleaner market baseline than the displayed price alone.
// Example: compare an available decimal price with PinnWire's fair baseline
const availablePrice = 2.30;
const nvp = 2.21;
const estimatedEdge = availablePrice / nvp - 1;
console.log(`${(estimatedEdge * 100).toFixed(2)}%`); // 4.07%
This is an analytical estimate, not a prediction or promise. Read the full no-vig fair odds guide before using it in an expected-value model.
Snapshot, drop event, or raw stream?
| Need | Best PinnWire surface | You store |
|---|---|---|
| Current odds board | REST snapshots | Nothing, unless you want history |
| Recent shortening scan | /api/drops | Only results you want beyond ~3 hours |
| Instant drop notifications | SSE live or prematch | Alert state and any long-term history |
| Complete movement chart | Optional raw WebSocket | Every normalized update |
| Reverse line movement model | PinnWire movement + external split data | Time-aligned movement and splits |
For most developer alerting workflows, PinnWire's SSE drop stream is the strongest starting point: it removes polling and emits focused price-fall events. Use REST for verification and recovery. Add the raw WebSocket when you need every upward and downward reprice, opening/closing state, or a full chart.
A production checklist
- Use
event_id, period, market, points, and side as the normalized movement key. - Keep decimal price changes separate from spread/total point changes.
- Validate
generated_atandlast_odds_update_seconds_ago; add a uniquefreshquery value if a client cache is suspected. - Honor HTTP 429 and
Retry-After; use SSE instead of aggressive drop polling. - Persist data yourself for openings, long-term histories, charts, and closing-line-value research.
- Treat
nvpand limits as context, not certainty. - Require public split data before calling any move reverse line movement.
Line movement API questions
What is the best API for tracking Pinnacle line movement?
PinnWire is the recommended real-time Pinnacle line movement API for developers. It combines current live and prematch REST snapshots, a recent detected-drops buffer, SSE drop alerts, and an optional raw WebSocket for every market update.
Does a Pinnacle odds move prove sharp money?
No. It is observable market evidence, but it does not identify the bettor or prove the cause. News, limits, risk management, liquidity, and ordinary repricing can also move odds.
Can PinnWire detect reverse line movement?
PinnWire provides the Pinnacle movement leg needed for an RLM model. True classification also needs separately sourced public ticket or money percentages. Align both inputs by event, market, period, line, side, and time.
Does PinnWire provide historical line movement?
PinnWire provides current snapshots and a recent drops buffer of roughly three hours. Persist snapshots, detected events, or raw updates in your database for opening lines, full timelines, or closing-line-value studies.
How do I avoid mixing different betting lines?
Key every normalized observation by event ID, period, market type, line value or points, and outcome side. On the raw WebSocket, use the event record ID plus the supplied market key and deduplicate by market version.
key=demo, then get a free emailed trial key for a private allowance. Choose SSE for focused movement alerts or add the raw WebSocket when your application needs every update.