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 Data (requires X-API-Key header).

  • Public (Anonymous): Free access to metadata/counters, delayed 30 minutes (freshness: delayed). Rate limited to 100 requests/hour.
  • Data ($29/mo, $290/yr): live counters, the WebSocket feed, full post archive, counter and price history, bulk parquet. 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 Data: pay USDC on Polygon or Base, then submit the tx hash and your email at polystrike.xyz/#waitlist or [email protected]. Keys are issued by hand, usually within a few hours.

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✅