Kalshi publica sus datos de mercado en una API REST gratuita y permite operar de forma programática con claves de API firmadas. Leer eventos, mercados, libros de órdenes y operaciones no necesita cuenta; enviar órdenes necesita una cuenta de Kalshi con fondos y una clave de API. Esta guía repasa la API, muestra solicitudes que funcionan y explica la autenticación, según la documentación y la especificación de la API de Kalshi a octubre de 2026.
La API de un vistazo
| Servicio | URL | Autenticación |
|---|---|---|
| API REST (producción) | https://external-api.kalshi.com/trade-api/v2 |
Lectura: ninguna · operar: clave firmada |
| API REST (host anterior, todavía admitido) | https://api.elections.kalshi.com/trade-api/v2 |
Igual que arriba |
| API REST (demo) | https://external-api.demo.kalshi.co/trade-api/v2 |
Cuenta y claves de demo aparte |
| WebSocket (producción) | wss://external-api-ws.kalshi.com/trade-api/ws/v2 |
Conexión firmada obligatoria |
| WebSocket (demo) | wss://external-api-ws.demo.kalshi.co/trade-api/ws/v2 |
Conexión firmada obligatoria |
| FIX | FIXT.1.1 / FIX 5.0 SP2 sobre TLS | A pedido, para usuarios institucionales |
Aunque se llama “elections”, ese host sirve todos los mercados de Kalshi, no solo los políticos. Las claves de demo y de producción son distintas y no funcionan en los servidores de la otra.
Cómo se organizan los datos de Kalshi
- Serie: una pregunta que se repite, como la temperatura máxima diaria en Nueva York (
KXHIGHNY). - Evento: una edición concreta, como un día determinado (
KXHIGHNY-26OCT28). - Mercado: un contrato de sí o no dentro del evento, como un rango de temperatura (
KXHIGHNY-26OCT28-T67).
Los precios son textos en dólares de punto fijo con hasta cuatro decimales, como "0.5600", en los campos que terminan en _dollars. Las cantidades de contratos son textos con dos decimales en los campos que terminan en _fp, como volume_fp y open_interest_fp. Kalshi eliminó a principios de 2026 los campos antiguos en centavos enteros (yes_bid, last_price y otros), así que el código escrito con ellos hay que actualizarlo.
Leer mercados (sin cuenta)
Los eventos abiertos de una serie, con sus mercados incluidos:
curl "https://external-api.kalshi.com/trade-api/v2/events?series_ticker=KXHIGHNY&status=open&with_nested_markets=true"
Un solo mercado, con sus reglas y precios actuales:
curl "https://external-api.kalshi.com/trade-api/v2/markets/KXHIGHNY-26OCT28-T67"
Campos útiles del mercado: yes_bid_dollars, yes_ask_dollars, last_price_dollars, volume_24h_fp, open_interest_fp, close_time, status, result, y rules_primary / rules_secondary, que traen las reglas de resolución en inglés.
| Endpoint | Qué devuelve |
|---|---|
GET /exchange/status |
Si la bolsa y el trading están activos |
GET /series/{series_ticker} |
Detalles de la serie, incluidos el tipo de comisión y las fuentes de resolución |
GET /events |
Eventos; filtra por status y series_ticker; hasta 200 por página |
GET /events/{event_ticker} |
Un evento y sus mercados |
GET /markets |
Mercados; filtra por event_ticker, series_ticker, status y tickers; hasta 1,000 por página |
GET /markets/{ticker}/orderbook |
Las ofertas de compra de cada lado, con depth opcional |
GET /markets/trades |
Operaciones recientes, filtrables por ticker y por tiempo |
GET /series/{series}/markets/{ticker}/candlesticks |
Historial de precios en intervalos de 1 minuto, 1 hora o 1 día |
Las listas se paginan con un cursor: devuelve el cursor que recibiste para traer la siguiente página, y detente cuando llegue vacío. Los eventos combinados (multivariados) no aparecen en /events y tienen su propio endpoint, /events/multivariate.
Dos detalles que confunden. El libro de órdenes muestra solo ofertas de compra: comprar “Sí” a 40¢ equivale a vender “No” a 60¢, así que el precio de venta se deduce del otro lado. Y los estados con los que filtras (open, closed, settled) no son los mismos que devuelve la API (active, closed, determined, finalized y otros).
Autenticación: claves de API y solicitudes firmadas
- Crea una clave en la configuración del perfil de tu cuenta de Kalshi, en API Keys. Recibes un ID de clave, y la clave privada se descarga una sola vez como archivo PEM. Kalshi recomienda hoy claves Ed25519; las claves RSA firmadas con RSA-PSS (SHA-256) siguen admitidas para clientes antiguos.
- Firma cada solicitud. Arma el texto
timestamp + MÉTODO + ruta, con el timestamp en milisegundos y la ruta con/trade-api/v2pero sin los parámetros de consulta, por ejemplo1703123456789GET/trade-api/v2/portfolio/balance. Fírmalo con tu clave privada y codifica la firma en base64. - Envía tres encabezados:
KALSHI-ACCESS-KEY(tu ID de clave),KALSHI-ACCESS-TIMESTAMPyKALSHI-ACCESS-SIGNATURE.
A diferencia de Polymarket, no hay billetera ni firmas en la blockchain: una clave de Kalshi está ligada a tu cuenta verificada, y las operaciones se liquidan en dólares.
Endpoints para operar
| Endpoint | Uso |
|---|---|
GET /portfolio/balance |
Saldo en efectivo y valor de la cartera |
GET /portfolio/positions |
Posiciones abiertas (sin liquidar); las liquidadas están en /portfolio/settlements |
GET /portfolio/fills |
Tus operaciones ejecutadas |
POST /portfolio/events/orders |
Enviar una orden |
DELETE /portfolio/events/orders/{order_id} |
Cancelar una orden (también hay endpoints para modificarla y reducirla) |
Una orden necesita un ticker, un side (bid o ask), un count y un price como textos, un time_in_force (good_till_canceled, immediate_or_cancel o fill_or_kill) y una opción para evitar operar contra ti mismo. Todas las órdenes son límite: Kalshi quitó las órdenes de mercado de la API en 2026. El endpoint antiguo POST /portfolio/orders quedó obsoleto en junio de 2026, así que el código nuevo debe usar la familia /portfolio/events/orders.
WebSocket
Conéctate a la URL del WebSocket con los mismos tres encabezados firmados, firmando timestamp + "GET" + "/trade-api/ws/v2". La conexión tiene que ir firmada aunque solo quieras datos públicos. Después, suscríbete:
{"id": 1, "cmd": "subscribe", "params": {"channels": ["orderbook_delta", "ticker"], "market_tickers": ["KXHIGHNY-26OCT28-T67"]}}
Los canales de mercado incluyen orderbook_delta (una foto inicial y luego los cambios), ticker, trade y market_lifecycle_v2. Los de cuenta incluyen fill, user_orders y market_positions.
Límites y SDK
- Los límites de solicitudes son presupuestos de tokens por segundo, y la mayoría de las solicitudes cuesta 10 tokens. Las cuentas nuevas empiezan en el nivel Basic (200 de lectura, 100 de escritura); los niveles más altos se piden o se ganan con volumen. Si te pasas, recibes un HTTP 429.
GET /account/limitsmuestra tus límites actuales. - SDK oficiales: Python (
kalshi_python_syncykalshi_python_asyncen PyPI) y TypeScript (kalshi-typescripten npm). El paquete antiguokalshi-pythonestá obsoleto. - Los datos históricos anteriores a la fecha de corte de Kalshi están en endpoints aparte, bajo
/historical/.
API de Kalshi vs API de Polymarket
| Kalshi | Polymarket | |
|---|---|---|
| Datos públicos | Una API REST, sin clave | API Gamma, CLOB y Data, sin clave |
| Autenticación para operar | Clave Ed25519 o RSA, encabezados firmados | Firma de la billetera (EIP-712) más credenciales HMAC |
| Dinero | Dólares en una cuenta regulada | pUSD en Polygon, respaldado 1 a 1 por USDC (exchange principal) |
| Libro de órdenes | Ofertas de compra de cada lado; la venta se deduce del otro lado | Compras y ventas por cada token de resultado |
La otra mitad está en nuestra guía de la API de Polymarket. Los tableros en vivo de Prediction Tape usan las dos API públicas.
Preguntas frecuentes
¿La API de Kalshi es gratis?
¿Necesito una clave de API para ver los precios de Kalshi?
¿Puedo hacer un bot de trading para Kalshi?
¿Por qué los precios llegan como texto?
Relacionado: Desarrolladores · Comparar API · API de Polymarket · Glosario · Reseña de Kalshi