PolyOdds SDK and CLI for agentic sports signal intelligence
Project description
PolyOdds Python SDK
Signal intelligence for sports prediction markets — Python client + CLI + MCP.
The PolyOdds SDK gives you programmatic access to the PolyOdds signal engine: ranked edge signals, fair-value consensus, market inefficiencies, and portfolio data, backed by a live bookmaker-consensus model scanning 20+ sports on Polymarket and Kalshi.
Current version: 0.1.0 · Python 3.10+ · One dependency: httpx
Note: This package assumes the PyPI release has been published. Install with
python3 -m pip install polyodds.
Install
python3 -m pip install polyodds
Authentication
Get your API key from the PolyOdds Agent Terminal.
export POLYODDS_API_KEY=pip_yourkeyhere
Quick start
REST (curl)
curl -sS "https://polyodds.bet/api/polybot/signals/strongest?limit=3" \
-H "Authorization: Bearer pip_yourkeyhere"
Python SDK
from polyodds import PolyOddsClient
client = PolyOddsClient(api_key="pip_yourkeyhere")
signals = client.get_strongest_signals(limit=3)
print(signals)
CLI
export POLYODDS_API_KEY=pip_yourkeyhere
polyodds doctor # verify auth + data health
polyodds signals strongest --limit 3 # primary signal surface
polyodds account # plan and account info
polyodds capabilities # no auth required
Local MCP server
export POLYODDS_API_KEY=pip_yourkeyhere
polyodds mcp serve
Or run directly:
python3 -m polyodds.mcp --api-key pip_yourkeyhere
Claude Desktop config
{
"mcpServers": {
"polyodds": {
"command": "polyodds",
"args": ["mcp", "serve"],
"env": {
"POLYODDS_API_KEY": "pip_yourkeyhere"
}
}
}
}
Remote MCP
curl -sS -X POST "https://polyodds.bet/mcp" \
-H "Authorization: Bearer pip_yourkeyhere" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
SDK Methods
Discovery (no auth required)
get_capabilities()— service descriptor, plan tiers, x402 statusget_examples()— machine-readable response shape examples
Account & plan
get_account()→Account— identity and plan tierget_plan()— full plan entitlements dictget_data_health()→DataHealth— scan freshness and book snapshot age
Signals
get_strongest_signals(limit=3, hours_fresh=8, one_per_event=True)— primary signal surface (hero board)get_sample_signals()— free first-use surface, hard-capped at 3 signalsget_live_signals_v1(sport=None, min_edge=0.5, limit=25)— alpha engine feedget_alpha_candidates(sport=None, limit=50, hours_fresh=8)— scan loop candidatesget_fair_values(sport=None, limit=50)— bookmaker consensus fair valuesget_inefficiencies(sport=None, min_edge=1.0, limit=20)— top market inefficiencies
Pro+ gated
get_agent_signals(min_edge=1.0, limit=25)— machine-readable agent feedget_signal_intent(signal_id)— SignalIntent contractget_strategies()— strategy template catalogapply_signal_policy(signal_id, strategy_id)— policy verdictget_calibration_performance()— historical calibration bucketsget_backtest_scorecard(sport=None)— historical backtest scorecard
Proof & diagnostics
get_agent_proof()— live activity + backtest coverage + limits (all plans)get_backtest_summary()— derived backtest summary (all plans)get_signal_summary()— signal distribution by status and sport (all plans)get_scorecard()— scan funnel and per-sport breakdown (Pro+)
Execution reporting (external execution only)
report_execution(venue, fill_price, ...)— report a fill from your external venueget_reported_executions(limit=100)— list reported executions
Utilities
healthcheck()— composite liveness check, never raisesraw_request(method, path, params=None, json=None)— direct authenticated request
CLI Commands
polyodds --help
polyodds doctor # composite liveness check
polyodds account # account identity and plan tier
polyodds plan # plan entitlements
polyodds capabilities # no auth required
polyodds examples # (via raw_request)
polyodds signals strongest --limit 3 # primary signal surface
polyodds signals strongest --json # raw JSON output
polyodds signals live-v1 # alpha engine feed
polyodds signals alpha-candidates # scan loop candidates
polyodds signals intent <signal_id> # SignalIntent contract (Pro+)
polyodds scorecard # scan funnel scorecard (Pro+)
polyodds backtest-summary # historical backtest summary
polyodds signal-summary # live signal distribution summary
polyodds report-execution --venue polymarket --fill-price 0.65 --match-title "..." --side BUY --fill-size 100
polyodds executions list
polyodds mcp serve # start local MCP stdio server
Global options:
--api-key KEY pip_... API key (or env POLYODDS_API_KEY)
--base-url URL API base URL (default: https://polyodds.bet)
--json Output raw JSON
--timeout SECS HTTP timeout (default: 20.0)
--version Show version
Error handling
from polyodds import PolyOddsClient
from polyodds import AuthError, PlanUpgradeRequired, RateLimitError, APIError
client = PolyOddsClient(api_key="pip_yourkeyhere")
try:
signals = client.get_strongest_signals(limit=3)
except AuthError:
print("Invalid API key")
except PlanUpgradeRequired as e:
print(f"Upgrade required: {e.required_plan}")
except RateLimitError:
print("Rate limit exceeded — wait before retrying")
except APIError as e:
print(f"API error (HTTP {e.status_code}): {e}")
Links
- Platform: https://polyodds.bet
- Agent Terminal: https://polyodds.bet/agent-terminal
- Support: support@polyodds.bet
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file polyodds-0.1.1.tar.gz.
File metadata
- Download URL: polyodds-0.1.1.tar.gz
- Upload date:
- Size: 33.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5280ea73186f3909a94a3eb063bbf714f83afd3674393b6a450b2f66f43d1a77
|
|
| MD5 |
f1834fa26fa8b80f9f1535f868495617
|
|
| BLAKE2b-256 |
9fe1903c12c88ac467591a4e1957e17bacd7fe314f12f1e97c949c81fa063c4d
|
File details
Details for the file polyodds-0.1.1-py3-none-any.whl.
File metadata
- Download URL: polyodds-0.1.1-py3-none-any.whl
- Upload date:
- Size: 37.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6973db76ded6affbce04578bddbe599c350dd8c0c0deef372aa6ed5b6a8765ab
|
|
| MD5 |
c57767598dfe187850e2af76e54aac2f
|
|
| BLAKE2b-256 |
e30ca065782153f496b043ce6815d5ead16bdec10f2085122629f178cd2394a5
|