Two free ways to start with PinnWire
A free Pinnacle odds API should let you validate the actual contract: authentication, event shape, markets, timestamps, errors and request limits. PinnWire makes that test immediate. Pick the path that fits the first few minutes of your project.
Public demo key
Use key=demo on any REST endpoint. It is the fastest way to see a health response or inspect a live market payload.
Limit: 10 requests per minute and 50 per day in one shared bucket across demo callers. REST only. It is a proof key, so a busy benchmark can exhaust it for everyone temporarily.
Private trial key
Enter your email on the PinnWire trial form. The key arrives in your inbox; it is not exposed in the signup response.
Limit: 20 requests per minute and 100 per day on your own trial key. REST only. This is the better free path for wiring a personal dashboard, script or model without competing for the public demo bucket.
demo is shared and smaller. A trial key is private and larger. Neither is unlimited production traffic, and neither includes SSE or raw WebSocket access. The point is to verify PinnWire with confidence before paying for the transport and volume your application actually needs.
| Access path | How to start | REST limit | Push transports | Best use |
|---|---|---|---|---|
| Public demo | key=demo, no signup | 10/min · 50/day shared total | None | Instant endpoint proof |
| Private trial | Email form; key delivered by email | 20/min · 100/day | None | Personal integration test |
| Stream | $89/mo | 20/min · 100/day | SSE drops | Low-volume movement alerts |
| Pro / Pro+Drops / Scale | $89–$219/mo | 10/s · 10/s · 30/s | SSE on Drops/Scale | Higher-volume production |
Run a free Pinnacle odds API check in three minutes
You can prove the whole REST path with the public demo. Add a random fresh value to make the request URL unique if a browser, proxy or fetch tool might reuse an old copy.
- Check service health. Confirm that the API responds and inspect the feed-update age.
- Fetch a real market. Use a sport ID you care about and inspect the event, period and price fields.
- Test your client with your private trial. Replace
demowith the emailed key once you start polling repeatedly.
1. Verify health and freshness
curl "https://pinnwire.com/v1/health?key=demo&fresh=free-guide-1"
Look for status, generated_at and last_odds_update_seconds_ago. generated_at is the server response time; the health age reports how recently the newest odds frame arrived. They answer different questions and are both useful.
2. Fetch current live odds
curl "https://pinnwire.com/kit/v1/markets?sport_id=1&key=demo&fresh=free-guide-2"
sport_id=1 is Soccer. The same endpoint family covers the documented sports. Inspect the event IDs, market keys, periods.num_0, sides, points and decimal prices. A real payload is a much better integration test than a screenshot.
3. Fetch prematch fixtures
curl "https://pinnwire.com/kit/v1/prematch/fixtures?sport_id=1&key=demo&fresh=free-guide-3"
For a single event, use /kit/v1/details?event_id=N. For compact full-game lines, use /kit/v1/prematch/lines?event_id=N. Every response is JSON and the endpoint family is documented in the PinnWire API docs.
What the free Pinnacle API lets you build
The free REST paths are enough to prove a surprisingly large part of a product. You can build the read side first, then add a paid push transport only when your workflow needs it.
REST endpoint coverage
| Endpoint | What it returns | Free access |
|---|---|---|
GET /v1/health | Service and feed freshness signals | Demo and trial |
GET /kit/v1/markets?sport_id=N | Current live market snapshots | Demo and trial |
GET /kit/v1/prematch/fixtures?sport_id=N | Upcoming fixtures and prematch prices | Demo and trial |
GET /kit/v1/details?event_id=N | One event, including available market detail | Demo and trial |
GET /kit/v1/prematch/lines?event_id=N | Compact full-game prematch lines | Demo and trial |
GET /api/drops | Recent detected price drops, with filters and no-vig fields | Demo and trial |
All plans cover the documented 13 sports, live and prematch data, full line depth and available specials. The difference between free and paid is primarily quota and transport: the free keys let you validate the data contract over REST, while paid plans let production traffic and push alerts scale with the application.
Use a free key to test your code, not to hide freshness problems
“Real-time” is only useful when your application can check it. PinnWire puts freshness fields in the response so your client can make a deliberate decision instead of displaying an unqualified timestamp.
generated_atappears on every odds REST response and records the server response time.last_odds_update_seconds_agoon/v1/healthreports the age of the newest odds frame.laston/kitmarket responses is an epoch-millisecond compatibility field for the same response moment. It is not the age of the odds.- API responses use
Cache-Control: no-store. If a fetch layer still serves a stale response, retry with&fresh=plus a random value.
# Make a second URL when checking a cache-sensitive client
curl "https://pinnwire.com/v1/health?key=demo&fresh=839214"
Make the health call twice, compare generated_at, then fetch one live market and one prematch fixture. Log the HTTP status, response timestamp and request count. This gives you a repeatable free Pinnacle API trial instead of an anecdotal “it looked live.”
When a free Pinnacle API key is enough—and when to upgrade
Start with the smallest PinnWire access path that answers your question. That keeps the first integration clear and gives you an obvious upgrade decision.
| Need | Use | Why |
|---|---|---|
| One-off proof or documentation check | key=demo | No signup; the shared 10/min and 50/day quota is enough for a quick read. |
| Personal script, dashboard or model prototype | Private trial key | 20/min and 100/day on your own emailed key avoids the shared demo bucket. |
| Push detected price drops | Stream or Pro+Drops | SSE is gated to plans that include drop alerts; free REST keys can still poll /api/drops. |
| Higher-frequency production REST | Pro or Scale | 10 requests per second on Pro, or 30 per second on Scale, with flat-rate billing. |
| Continuous subscribed market updates | Paid plan + Raw WS | The raw WebSocket is a separate +$89/month add-on and is not enabled on demo or trial keys. |
SSE plan gate
/odds-drop and /odds-drop-prematch are server-sent event streams. They require Stream ($89/month), Pro+Drops ($139/month) or Scale ($219/month). A free key can use the same drop data through /api/drops or /v1/drops and poll at its published limit.
WebSocket plan gate
wss://pinnwire.com/ws?key=YOUR_KEY is the optional raw real-time stream for subscribed live and prematch market updates. It requires the +$89/month Raw WebSocket add-on on a paid plan. The demo and trial keys are deliberately REST-only, which makes them safe for evaluating the response shape before adding connection management.
All paid plans are flat-rate: no per-request or per-object metering. See the live pricing and WebSocket guide when your acceptance test is complete.
Get a private Pinnacle API trial key
When the shared demo has answered your first questions, request a private key for your own test loop. On the PinnWire homepage, enter an email address and submit the form. The trial key is sent to that inbox; the API response confirms delivery but never prints the credential.
- Use a real inbox you can open. Check spam if the message is not visible immediately.
- Put the emailed key in an environment variable. Keep it out of frontend source and public repositories.
- Repeat the health and market calls. Confirm your client handles 20/min and 100/day without assuming the demo's 10/min and 50/day quota.
- Choose the production plan by behavior. Upgrade for higher REST volume, SSE alerts or the raw WebSocket—not because a free response was hard to inspect.
# Example: keep the private key out of the command history
set PINNWIRE_KEY=pk_your_emailed_key
curl "https://pinnwire.com/v1/health?key=%PINNWIRE_KEY%&fresh=trial-check"
For shell or CI usage, prefer your platform's secret manager. The API key is the only credential needed for REST, and the documentation also accepts the x-api-key header.
Small Python quickstart
This example uses ordinary HTTP so you can move from the public demo to the private trial without rewriting your client. It prints the freshness signal and the first few events; it does not assume that a particular sport always has a particular number of markets.
import os
import requests
KEY = os.environ.get("PINNWIRE_KEY", "demo")
BASE = "https://pinnwire.com"
health = requests.get(
BASE + "/v1/health",
params={"key": KEY, "fresh": "python-free-guide"},
timeout=10,
)
health.raise_for_status()
print("health:", health.json().get("status"))
print("feed age:", health.json().get("last_odds_update_seconds_ago"))
markets = requests.get(
BASE + "/kit/v1/markets",
params={"sport_id": 1, "key": KEY, "fresh": "python-markets"},
timeout=10,
)
markets.raise_for_status()
payload = markets.json()
print("generated:", payload.get("generated_at"))
for event in payload.get("events", [])[:3]:
print(event.get("id"), event.get("home"), event.get("away"))
Use PINNWIRE_KEY=demo for the first run. Set the environment variable to the key from your email when you want to test a private trial quota. The official Node.js SDK and Python SDK are available when you are ready to remove repetitive request plumbing.
Free Pinnacle odds API: common questions
Is there a free Pinnacle odds API I can test now?
Yes. PinnWire has a public demo key, literally key=demo, for immediate no-signup REST checks. It allows 10 requests per minute and 50 per day in one shared bucket. For a private quota, request an emailed trial key with 20 requests per minute and 100 per day.
What is the difference between the demo key and the trial key?
The demo key is shared across all demo callers and is capped at 10/min and 50/day total. A trial key is private to the email recipient and is capped at 20/min and 100/day. Both are REST-only. Treat them as separate access paths, not two names for the same quota.
Does the free PinnWire API include live and prematch odds?
Yes. The REST endpoints expose current live and prematch Pinnacle odds, with documented line depth and freshness metadata. You can test both paths before paying for a push transport.
Can I use SSE or the raw WebSocket on a free key?
No. SSE drop alerts require Stream, Pro+Drops or Scale. The raw WebSocket requires a paid plan plus the +$89/month add-on. A free key can poll the REST drops buffer and all ordinary REST endpoints.
How do I get a Pinnacle API trial key?
Enter your email in the trial form on the PinnWire homepage. The key is delivered by email and is not included in the signup response. No card is required to start the trial.
Is the free key unlimited or guaranteed for all production use?
No. The demo is a shared proof quota and the trial is capped private REST access. Neither promises unlimited free production traffic. When the project needs more volume, SSE or the raw WebSocket, PinnWire's paid plans make that boundary explicit with flat-rate pricing.
How can I check whether the odds response is fresh?
Read generated_at on every response and last_odds_update_seconds_ago on /v1/health. If your tool appears to cache a response, add a random fresh query parameter and fetch again. Do not present a cached response as live odds.
Run one key=demo health call, one live market call and one prematch call. If the shape fits, request the private emailed trial and wire your own small test. PinnWire gives you the clearest path from “free Pinnacle odds API” search to a verified, production-ready integration.