Price spreads
curl --request GET \
--url https://api.probsights.com/v1/arbitrage/current/difference \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.probsights.com/v1/arbitrage/current/difference"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.probsights.com/v1/arbitrage/current/difference', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"side": "<string>",
"side1": "<string>",
"side2": "<string>",
"side1_price": 123,
"side2_price": 123,
"diff": 123
}Arbitrage
Price spreads
Cross-venue price disagreement for the same outcome.
GET
/
v1
/
arbitrage
/
current
/
difference
Price spreads
curl --request GET \
--url https://api.probsights.com/v1/arbitrage/current/difference \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.probsights.com/v1/arbitrage/current/difference"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.probsights.com/v1/arbitrage/current/difference', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"side": "<string>",
"side1": "<string>",
"side2": "<string>",
"side1_price": 123,
"side2_price": 123,
"diff": 123
}Cross-venue price spreads for paired BTC windows (Kalshi ↔ Polymarket).
Returns a JSON array sorted by absolute
diff descending.
Unlike /v1/arbitrage/current, spreads compare the same outcome side across venues
(e.g. Kalshi YES ask vs Polymarket YES ask). This is not risk-free arbitrage.
For each paired window, the API emits up to two rows: one for YES, one for NO.
diff is side1_price − side2_price where side1 is always Kalshi and side2 is
Polymarket.
Requires a Trader subscription — see Authentication.
Request
https://api.probsights.com/v1/arbitrage/current/difference
Query parameters
integer
default:"10000"
Snapshot lookback window in minutes (maps to max staleness).
string
5m, 15m, 1h, 24h, or 1w.integer
default:"50"
Max spread rows returned (1–100).
Response
string
YES or NO.string
Always
Kalshi.string
Always
Polymarket.number
Kalshi ask for the side.
number
Polymarket ask for the side.
number
side1_price − side2_price.Examples
15-minute spreads
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.probsights.com/v1/arbitrage/current/difference?minutes=10&interval_code=15m&limit=20"
import requests
response = requests.get(
"https://api.probsights.com/v1/arbitrage/current/difference",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"minutes": 10, "interval_code": "15m", "limit": 20},
)
spreads = response.json()