Skip to content

Markets

Kalshi and Polymarket in one normalized shape — search, live state, movers and cross-venue comparison. Every endpoint here costs 3 credits.

search-markets

POST /search-markets · market (3 credits)

Search World Cup markets across both venues, normalized.

Body fieldTypeDescription
querystringfree-text market search
teamstringmarkets involving a team
sourcestring"kalshi" or "polymarket" (default: both)
statusstringmarket status (e.g. "open")
limitintmax markets returned (default 20)
force_liveboolbypass the cache, hit the venues live
bash
curl -X POST https://api.machina.gg/world-cup/v1/search-markets \
  -H "X-Api-Token: $KEY" -H "Content-Type: application/json" \
  -d '{"team": "Brazil", "status": "open"}'

Response: data.markets[] with venue, market id/ticker, outcome, price and metadata — take market_id into /get-market-state or /explain-market-move.

get-market-state

POST /get-market-state · market (3 credits)

Live state of one market: price, order-book depth, optional candles and trades history.

Body fieldTypeDescription
market_idstringrequired — id/ticker from search-markets
include_bookboolorder-book depth (default true)
include_historyboolprice-history candles
include_tradesboolrecent trades
history_hoursinthistory window (default 24)
history_intervalstringcandle interval (e.g. "1h")

market-movers

POST /market-movers · market (3 credits)

Biggest price moves across open markets in a time window.

Body fieldTypeDescription
window_hoursintmove window (default 24)
limitintmax movers returned

compare-market-sources

POST /compare-market-sources · market (3 credits)

The same outcome priced across Kalshi vs Polymarket — spot venue disagreement.

Body fieldTypeDescription
querystringthe outcome/market to compare
market_typestringoptional market-type filter
include_reasoningboolinclude the comparison rationale