@anmho/kalshi-cli
v0.2.2
Published
Curated terminal-first CLI for Kalshi using the official TypeScript SDK
Readme
kalshi-cli
Terminal-first Kalshi CLI built on the official TypeScript SDK (kalshi-typescript).
npm package: @anmho/kalshi-cli
Official references:
- Kalshi docs: https://docs.kalshi.com/
- TypeScript SDK quickstart: https://docs.kalshi.com/sdks/typescript/quickstart
- API keys/auth: https://docs.kalshi.com/getting_started/api_keys
- Hosted CLI docs (Docusaurus): https://anmho.github.io/kalshi-cli/
Install
bun install
bun run buildLocal binary:
./dist/index.js --helpInstall globally on your machine:
bun run install:system
kalshi --helpInstall from npm:
npm install -g @anmho/kalshi-cli
kalshi --helpAuthentication
Kalshi API auth uses API Key ID + RSA private key signing (no OAuth in current official docs).
Local .env (recommended for development):
cp .env.example .envEnvironment variables:
export KALSHI_API_KEY_ID="your-key-id"
export KALSHI_PRIVATE_KEY_PATH="$HOME/.kalshi/kalshi-key.pem"
export KALSHI_BASE_URL="https://api.elections.kalshi.com/trade-api/v2"
export KALSHI_TIMEOUT_MS="10000"Or persist in CLI config:
kalshi config set apiKeyId your-key-id
kalshi config set privateKeyPath "$HOME/.kalshi/kalshi-key.pem"
kalshi config set baseUrl https://api.elections.kalshi.com/trade-api/v2
kalshi config showPrecedence: CLI flags > environment (.env) > config file > defaults.
Quickstart
Public endpoints (no credentials required):
kalshi ping
kalshi exchange status
kalshi events list --limit 10
kalshi markets list --limit 10Private endpoints (credentials required):
kalshi portfolio balance
kalshi orders list --limit 20
kalshi account limits
kalshi portfolio settlements --limit 20
kalshi orders queue-positionsOutput Modes
- Default table: human-readable columns
- Wide table:
-o wide - JSON:
--jsonor-o json
Examples:
kalshi markets list --limit 5
kalshi markets list --limit 5 -o wide
kalshi markets list --limit 5 --jsonTypical default table:
TICKER EVENT STATUS LAST YES_BID YES_ASK VOLUME
KX... KX... active 0.0000 0.0000 0.0000 0.00Typical wide table:
TICKER ... OPEN_INTEREST CLOSE_TIME TITLE
KX... 0.00 2026-04-16T14:00:00Z yes ...JSON output:
kalshi markets list --limit 2 --jsonCommands
config: local config managementdoctor: local config + connectivity checksping: exchange reachabilityexchange: status, schedule, announcementsevents: list/getmarkets: list/get/orderbook/tradesorders: list/get/create/cancel/amend/decrease/queue-position/queue-positions/batch-create/batch-cancelportfolio: balance/positions/fills/settlements/resting-order-value/subaccountsaccount: API limits
Each subcommand description includes the mapped endpoint (for example GET /markets).
Docs
Docusaurus docs + API reference are in website/.
bun run docs:sync-openapi
bun run docs:devBuild docs:
bun run docs:buildDeploy docs:
- GitHub Actions workflow:
.github/workflows/docs-pages.yml - Published URL: https://anmho.github.io/kalshi-cli/
Validation
bun run check
bun run build
bun run test:commands
bun run test:commands:private