Skip to main content

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 status
  • get_examples() — machine-readable response shape examples

Account & plan

  • get_account()Account — identity and plan tier
  • get_plan() — full plan entitlements dict
  • get_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 signals
  • get_live_signals_v1(sport=None, min_edge=0.5, limit=25) — alpha engine feed
  • get_alpha_candidates(sport=None, limit=50, hours_fresh=8) — scan loop candidates
  • get_fair_values(sport=None, limit=50) — bookmaker consensus fair values
  • get_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 feed
  • get_signal_intent(signal_id) — SignalIntent contract
  • get_strategies() — strategy template catalog
  • apply_signal_policy(signal_id, strategy_id) — policy verdict
  • get_calibration_performance() — historical calibration buckets
  • get_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 venue
  • get_reported_executions(limit=100) — list reported executions

Utilities

  • healthcheck() — composite liveness check, never raises
  • raw_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


License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

polyodds-0.1.1.tar.gz (33.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

polyodds-0.1.1-py3-none-any.whl (37.0 kB view details)

Uploaded Python 3

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

Hashes for polyodds-0.1.1.tar.gz
Algorithm Hash digest
SHA256 5280ea73186f3909a94a3eb063bbf714f83afd3674393b6a450b2f66f43d1a77
MD5 f1834fa26fa8b80f9f1535f868495617
BLAKE2b-256 9fe1903c12c88ac467591a4e1957e17bacd7fe314f12f1e97c949c81fa063c4d

See more details on using hashes here.

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

Hashes for polyodds-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6973db76ded6affbce04578bddbe599c350dd8c0c0deef372aa6ed5b6a8765ab
MD5 c57767598dfe187850e2af76e54aac2f
BLAKE2b-256 e30ca065782153f496b043ce6815d5ead16bdec10f2085122629f178cd2394a5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page