Skip to main content
The Perps API is how you trade Kalshi’s perpetual futures. “Perps”, “margin”, and “perpetual futures” all refer to the same product. The API surface uses margin throughout (endpoints under the /margin namespace, margin-prefixed fields), so these docs use margin for technical references. It mirrors the existing event contract API, so if you’re already integrated there you’re most of the way there: the margin endpoints follow the same patterns, authentication, and conventions, just under /margin.

Connectivity

REST API

Use the external-api hosts for perps REST. WebSocket and FIX use the separate perps hosts listed below.

WebSocket API

FIX API

The margin FIX gateway uses a separate host from event contract FIX. Available session types:

API Reference

The Perps API mirrors the event contract API (same auth, pagination, error format, and order lifecycle), so the conventions in Making Your First Request and API Environments apply directly.

REST API

What’s the same: authentication, pagination, error format, and core order lifecycle (create, amend, decrease, cancel) all work identically, just under /margin/* instead of /portfolio/* and /markets/*. Margin-specific additions: beyond the mirrored order, market, and order-group endpoints, margin adds endpoints for account balance and risk, funding (estimated and historical rates, plus payment history), fee tiers, subaccounts, and transfers between your event-contract and margin balances. See the REST reference for the full list. Two things to know up front: the event-contract ↔ margin transfer (/portfolio/intra_exchange_instance_transfer) is not yet available (enabled with the production rollout), and you can call /margin/enabled to check whether margin is on for your account in a given environment. Not available on margin:
  • Batch order operations (BatchCreateOrders, BatchCancelOrders)
  • Queue positions
  • Events, series, milestones, multivariate collections, structured targets
  • RFQs and quotes
  • Historical data endpoints
  • Exchange schedule

WebSocket API

Same channels: orderbook_delta, ticker, trade, fill, user_orders, order_group_updates Not available on margin: market_positions, market_lifecycle_v2, multivariate_market_lifecycle, multivariate, communications Timestamp convention: all timestamp fields in margin WebSocket payloads use Unix epoch milliseconds and an _ms suffix.
Margin WebSocket payloads no longer use RFC3339 timestamp strings. The order_group_updates channel already follows the same convention: its only timestamp field, ts_ms, is Unix epoch milliseconds.

FIX API

API keys should not be shared between the event contract and margin FIX gateways.
What’s the same: FIXT.1.1 / FIX50SP2 protocol, RSA key authentication, order lifecycle messages (NewOrderSingle, OrderCancelRequest, etc.), order groups, drop copy, and listener sessions all work the same way. Key differences: