Skip to content

API Overview

The Polystrike API is designed for low-latency access to prediction market metadata and signals.

All endpoints are hosted on high-performance bare-metal servers to ensure maximum uptime and minimal response times.

Base URL: https://polystrike.xyz/api/v1

Measured on production, 2026-07-29. These are observed numbers, not design targets.

DataCadence / latency
Tweet detection (post published → counted)p50 11.5s, p90 12.6–15.1s, p99 28.2s, worst observed 631s
X timeline poll1s for @elonmusk, 5s for other tracked accounts
Engagement-metric refresh (likes/reposts)full timeline re-read every 10 min
Deletion confirmationabsent from 2 consecutive re-reads → ~20 min
real_counter and the deltasrecomputed as each qualifying post lands
prediction/* and signals/* model outputs60s inside an event’s final 24h, 300s otherwise
market_price (Polymarket CLOB order book)2s poll loop across tracked tokens; it cycles many tokens, so effective per-token resolution is ~40s
XTracker settlement oracle (not ours)roughly 5 min

Notes that matter when you build against this:

  • X’s index is the floor. X’s REST timeline needs ~10.8s at minimum to list a new post, and the latency is quantized. We already poll faster than X publishes, so polling harder does not move the median.
  • Engagement metrics lag by one cycle. Likes and reposts are zero when a post is first seen — it is seconds old. The 10-minute re-read fills in the real values.
  • A filtered-stream push path exists but is not serving. Measured head-to-head over 4 days it detects at p50 6.3s, ~5.2s faster than the poller. Today it runs as a measurement path and does not write the counters these endpoints read. The poller is retained either way: a push stream cannot observe a deletion.
  • Latency is not edge. Our own paper testing measured that when a count boundary breaks, the price collapse completes in roughly 2–3 seconds — upstream of both feeds. We are not winning that race and do not market these figures as if we were.

Endpoints are either Public (no key needed) or Pro (requires X-API-Key header).

  • Public (Anonymous): Free access to metadata/counters. Rate limited to 100 requests/hour.
  • Pro ($79/mo): Full access to predictions, signals, and portfolio analysis. Rate limited to 10,000 requests/hour.

Direct HTTP API (this documentation):

Terminal window
curl -H "X-API-Key: ps_pro_..." https://polystrike.xyz/api/v1/prediction/elon

OpenAPI Specification (for automated discovery):

Terminal window
curl https://polystrike.xyz/openapi.json

The OpenAPI spec provides machine-readable documentation of all endpoints, parameters, authentication schemes, and response types. Use it to:

  • Generate client libraries in any language
  • Integrate with AI agents and automated systems
  • Understand the API structure programmatically

MCP Server (for Claude Desktop users): Natural language access through the Model Context Protocol. See MCP Server Setup for configuration.

To upgrade to Pro:

All responses are standard JSON. Timestamps are UTC Milliseconds.

{
"timestamp": 1770188662000,
"data": [ ... ]
}
TierLimit
Anonymous100 req/hour (by IP)
Pro10,000 req/hour (by Key)

Below is the exact field visibility for each endpoint.

GET /meta/elon — Public (No Key, Rate Limited)

Section titled “GET /meta/elon — Public (No Key, Rate Limited)”
FieldAnonymousPro
event_id
event_title
start_ts
end_ts
polymarket_xtracker_counter
real_counter
polymarket_ui_counter
settlement_delta
display_delta
internal_delta

GET /meta/elon/tweets — Public (Rate Limited)

Section titled “GET /meta/elon/tweets — Public (Rate Limited)”
FieldAnonymousPro
tweet_id
text
created_ts
referenced_text
referenced_author_id
is_reply
is_quote
is_retweet
is_countednull

GET /prediction/elon — Public (Rate Limited)

Section titled “GET /prediction/elon — Public (Rate Limited)”
FieldAnonymousPro
event_id
event_title
polymarket_xtracker_counter
polymarket_ui_counter
real_counter
settlement_delta
display_delta
internal_delta
seconds_remaining
markets[].title
markets[].market_price
sleep_probability
velocity_counted_1h
velocity_all_1h
markets[].model_prob
forecast.p5
forecast.p50
forecast.p95
markets[].edge
markets[].signal

Changed 2026-07-23: sleep_probability and the velocity_counted_1h / velocity_all_1h projection inputs moved to Pro (previously free), so a free consumer can no longer reconstruct the model’s late-window projection. Free still gets all counters/deltas, seconds_remaining, and per-bucket market_price.

GET /signals/elon — Pro Only (401 without key)

Section titled “GET /signals/elon — Pro Only (401 without key)”

Optional query parameter: ?bankroll=100 — sizes suggested_bet to your bankroll via Kelly criterion.

FieldAnonymousPro
event_id❌ 401
event_title❌ 401
signals[].bucket❌ 401
signals[].action❌ 401
signals[].model_prob❌ 401
signals[].market_price❌ 401
signals[].edge❌ 401
signals[].ev❌ 401
signals[].kelly_fraction❌ 401
signals[].suggested_bet❌ 401✅ (sized to ?bankroll if provided)
signals[].confidence❌ 401
signals[].moneyness❌ 401
signals[].time_confidence❌ 401
signals[].asymmetry_edge❌ 401
signals[].reasons❌ 401
signals[].bankroll❌ 401

GET /portfolio/elon?wallet=0x… — Pro Only (401 without key)

Section titled “GET /portfolio/elon?wallet=0x… — Pro Only (401 without key)”
FieldAnonymousPro
wallet❌ 401
event.id❌ 401
event.title❌ 401
event.end_ts❌ 401
prediction.p5 / p50 / p95❌ 401
prediction.real_counter❌ 401
prediction.seconds_remaining❌ 401
positions[].event_id❌ 401
positions[].bucket❌ 401
positions[].tokens❌ 401
positions[].avg_price❌ 401
positions[].cost_basis❌ 401
positions[].current_price❌ 401
positions[].current_value❌ 401
positions[].pnl❌ 401
positions[].pnl_percent❌ 401
positions[].analysis.win_probability❌ 401
positions[].analysis.market_implied❌ 401
positions[].analysis.edge❌ 401
positions[].analysis.edge_percent❌ 401
positions[].analysis.signal❌ 401
positions[].analysis.recommendation❌ 401
portfolio.total_positions❌ 401
portfolio.total_cost❌ 401
portfolio.current_value❌ 401
portfolio.total_pnl❌ 401
portfolio.total_pnl_percent❌ 401