New
The
Listing union returned by the discovery endpoints gains a ProphetX variant.- A ProphetX listing is
{ "venue": "PROPHETX", "strikeId": "...", "executable": true }. - There is no
side. A ProphetX strike identifies both the market and the outcome. - The
POLYMARKETandKALSHIvariants are unchanged.
listing.venue needs a branch for the new variant.The listing shape and the fields it carries are in
List Event Markets.New
Kalshi markets are subscribable on the
/v1/orderbook stream, on both the
book and trade channels.- Address a market by its ticker:
{ "venue": "kalshi", "ticker": "KXNBA-25-LAL" }. - The book and trade tape are YES-priced. There is no separately subscribable NO book; you derive it from the YES book.
- The optional
sideaccepts"yes"only. A subscribe naming"no"returnsUNKNOWN_MARKET.
Action required
GET /v1/polymarket/balance and GET /v1/kalshi/balance report available net
of the cash committed to your resting buy orders.Neither venue holds that cash aside while an order rests: the balance each one
reports still contains every dollar pledged to an open buy order. available is
now the amount you can commit beyond the orders you already have resting.On GET /v1/polymarket/balance, total keeps its previous value. It includes
collateral committed to resting orders, so it does not move when you place or
cancel one. Because of that, available, unconverted and claimable no longer
add up to total: the difference is the committed collateral, which the endpoint
does not publish as its own field.GET /v1/kalshi/balance reports available alone, as before. It publishes no
total, so there is no component sum to reconcile there.What to check: any order sizing that reads available on either endpoint (it now
leaves your resting orders funded, so a size derived from it will be smaller),
and any reconciliation that adds the Polymarket components and compares the
result to total.Field semantics and units are in the API reference for
Polymarket and
Kalshi.Changed
POST /v1/kalshi/orders now checks the shape of ticker before creating an
order, and reports what the venue said when it refuses one.Ticker validation
ticker must be uppercase alphanumeric segments joined by -, with .
allowed inside a segment for a decimal strike:KXPRES-2028 and KXBTCD-26AUG0607-T64599.99. There is no limit
on the number of segments, and no restriction on the series prefix, so tickers
for newly listed series are accepted without any change here.A ticker that does not match is rejected with 400 INVALID_REQUEST and no
order is created. The message states the expected shape.This is a behaviour change. Lowercase tickers such as
kxmlbgame-26aug05torhou-hou were previously accepted, and are now rejected
rather than being upcased for you. Kalshi tickers are case-sensitive, so
correcting the case on your behalf could submit an order against a different
instrument than the one you named. Send tickers exactly as Kalshi publishes
them.Clearer errors when the venue refuses an order
A refusal from Kalshi now reaches you as a4xx describing what happened,
instead of a generic 500:- An unknown or expired market returns
404 NOT_FOUND. - An order larger than your available balance returns
400 INSUFFICIENT_BALANCE. - Any other refusal returns
400 INVALID_REQUEST.
message field. A genuine
Kalshi outage or a network failure still returns a 5xx, so a 4xx from this
endpoint always means the request itself needs changing — retrying it
unchanged will not succeed.New
Your open positions are now readable per venue. Each row carries your
weighted-average entry price, an indicative mark, current value, and
unrealized P&L.
Polymarket
GET /v1/polymarket/positionsreturns one row per outcome token, ordered bytokenId. PasstokenId=to filter.
Kalshi
GET /v1/kalshi/positionsreturns one row per market ticker and side, ordered bytickerthenside. Passticker=to filter.
New
The baseline of everything documented on this site today: REST trading and
discovery endpoints, and the real-time market data stream.
Authentication
Signed-request authentication for every endpoint, plus two utility routes:GET /v1/whoamiverifies your key and returns the calling identity.GET /v1/timereturns the server time for request signing.
Discovery
Browse the cross-venue market catalog:GET /v1/sportsGET /v1/sports/competitionsGET /v1/sports/eventsGET /v1/sports/events/{eventId}/marketsGET /v1/markets
Polymarket trading
Venue-explicit order management and balance:POST /v1/polymarket/orderssubmits a market (FOK/FAK) or limit (GTC) order.GET /v1/polymarket/orderslists orders with filtering and pagination.GET /v1/polymarket/orders/{orderId}returns a single order.DELETE /v1/polymarket/orders/{orderId}cancels a working order.GET /v1/polymarket/orders/{orderId}/fillsreturns an order’s fills.GET /v1/polymarket/balancereturns the pod’s venue balance.
Kalshi trading
The same order lifecycle, in Kalshi’s own vocabulary (ticker, side, action, count, priceCents):POST /v1/kalshi/ordersGET /v1/kalshi/ordersGET /v1/kalshi/orders/{orderId}DELETE /v1/kalshi/orders/{orderId}GET /v1/kalshi/orders/{orderId}/fillsGET /v1/kalshi/balance
WebSocket market data
The/v1/orderbook stream delivers order book snapshots, incremental deltas,
and trades, with subscription management over a single authenticated
connection. See the streaming overview to get started.