“Odds-feed speed” means three different things
One latency number cannot describe the whole journey. When evaluating a Pinnacle odds API, separate these stages:
| Measure | What it answers | How to test it |
|---|---|---|
| Update availability | When did the market change become available to the feed? | Requires a trustworthy publication timestamp or controlled reference observation. |
| Delivery latency | How long until the change reaches your process? | Timestamp arrival in your deployed client under real network conditions. |
| API response time | How quickly does a REST request return? | Measure cold and warm time to first byte from your application region. |
| Decision latency | How long does your mapping, model and action logic take? | Instrument each stage with a monotonic clock. |
PinnWire publishes verified API response measurements. It does not turn those measurements into an unsupported claim about market-change-to-client latency. That distinction matters: a 1.5ms HTTP response does not prove that a price change travelled end to end in 1.5ms.
PinnWire’s measured Pinnacle odds API response speed
On 26 August 2026, PinnWire measured /v1/health at its Amsterdam origin. Network distance was removed so the test could isolate application and connection costs.
The same origin test recorded a 2.3ms median TCP connection and 39ms median to complete TLS across the 25 cold samples. The practical lesson is simple: connection reuse matters. The benchmark is a floor at the origin; your observed REST time also includes the network trip between your process and Amsterdam.
What these numbers prove: PinnWire’s server can answer a warm request quickly, and a cold connection costs much more than application processing.
What they do not prove: the delay from an external market change to an update arriving in your program. Measure that separately in the workflow and region you actually run.
See the full sample counts, method and reproducible command on the PinnWire latency evidence page.
REST vs SSE vs WebSocket: choose the speed path that fits
| Transport | Best for | Speed characteristic |
|---|---|---|
| REST | Current live or prematch snapshots, selective reads, reconnect recovery | Your polling interval can add staleness; keep the HTTP connection warm. |
| SSE | Detected live or prematch odds-drop alerts | Long-lived push removes the client polling interval for qualifying drops. |
| Raw WebSocket | Subscribed live and prematch market updates | Long-lived push sends relevant update frames without waiting for the next poll. |
PinnWire’s strongest low-delay architecture is the optional raw Pinnacle odds WebSocket: subscribe by sport or by up to 200 event IDs, receive a baseline snapshot, then merge continuous add, update and delete frames. Use SSE instead when your application only needs server-detected dropping-odds alerts. Use REST when a snapshot is the right abstraction, not as a substitute for push on a time-sensitive hot path.
A five-second poll can wait almost five seconds before it even asks for a change. No amount of shaving milliseconds from the response fixes that scheduling delay. A long-lived PinnWire stream pays connection setup once and waits for updates instead of repeatedly asking whether anything changed.
Freshness you can verify in every odds REST response
PinnWire REST JSON includes generated_at, an ISO-8601 timestamp showing when that response was generated. The health response also includes last_odds_update_seconds_ago, so a client can check feed activity instead of assuming cached JSON is current. Market responses retain the compatibility field last as an epoch-millisecond response marker.
curl "https://pinnwire.com/v1/health?key=demo&fresh=my-test-1"
# Check:
# status == "ok"
# generated_at is current
# last_odds_update_seconds_ago is acceptably small for your use case
Authenticated odds responses use Cache-Control: no-store; the public homepage widget is the intentional three-second exception. The optional fresh query value is a client-side cache buster; the API ignores unknown parameters. For repeatable production checks, use your own unique value rather than relying on a previously fetched URL.
Build a fast client without building a fragile one
- Keep the handler short. Parse, validate, enqueue and return. Move network calls, database queries and heavy model work to workers.
- Keep event mappings in memory. A database round trip for every frame adds avoidable latency to the hottest part of the path.
- Resync after reconnect. PinnWire WebSocket connections begin with a snapshot; REST can also rebuild your current view. Do not resume decisions against an uncertain local book.
- Honor the heartbeat. PinnWire sends a ping every 30 seconds. Reply with
{"type":"pong"}; a stale connection closes after about 75 seconds. - Watch backpressure. The WebSocket ping exposes
buffered_max_bytes. A consumer that falls more than 32MB behind is closed asslow_consumerrather than silently losing frames. - Measure tails, not just averages. Record p50, p95 and p99 arrival-to-decision time during busy periods. The slowest useful updates often matter more than a polished average.
One WebSocket connection is allowed per key. A newer connection evicts the old one cleanly, making the active consumer unambiguous. Snapshot resynchronization, explicit close reasons and observable backlog give a production client the information it needs to recover safely.
A measurement method you can trust
Benchmark from the same region and runtime as your real application. Start with a small REST test to understand connection cost, then instrument the actual push path:
- Time one cold REST request.
- Reuse the same connection and time several warm requests.
- For SSE or WebSocket, record a monotonic timestamp immediately when each message reaches the handler.
- Record another after parsing and event mapping, and another after the decision is ready.
- Track reconnect count, snapshot completion, queue depth and
buffered_max_bytes. - Report the region, sample size, transport, connection state and percentile—not just one best result.
Without a verifiable source-publication timestamp, call the result arrival-to-decision latency, not source-to-client feed latency. This keeps the metric honest and still measures the part your code can improve.
Frequently asked questions
How fast is the PinnWire Pinnacle odds API?
In the 26 August 2026 origin benchmark, server processing on /v1/health was 1.3ms median and 5.4ms maximum over 20 samples. TTFB was 41ms median over 25 cold requests and 1.5ms median over 11 warm requests. These are response-time measurements at the Amsterdam origin, not end-to-end market-change latency.
What is the difference between API response time and odds-feed latency?
API response time is how long a request takes to return. Odds-feed latency is the time from a market change being published to that update reaching your application. A fast REST benchmark is valuable, but it cannot establish the second measurement by itself.
Should I use REST, SSE or WebSocket for real-time betting odds?
Use REST for snapshots and recovery, SSE for pushed detected odds-drop alerts, and PinnWire’s optional raw WebSocket for subscribed live and prematch market updates. For a time-sensitive workflow, push removes the delay created by waiting for the next poll.
How can I test PinnWire odds API speed?
Time a few calls with key=demo from your actual region, comparing cold and reused connections. Then timestamp message arrival and decision completion in your real stream consumer. The demo allowance is shared—10 requests per minute and 50 per day—so use a free trial key for longer tests.
The recommendation
Choose PinnWire when you need a real-time Pinnacle odds feed with a clear path from proof to production. You can verify live REST data immediately, inspect published response measurements, use freshness fields in every response, add SSE for focused drop detection, and move to the raw WebSocket when every subscribed live and prematch update matters.