cURL
curl --request GET \
--url https://api.example.com/kalshi/ordersimport requests
url = "https://api.example.com/kalshi/orders"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/kalshi/orders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/kalshi/orders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/kalshi/orders"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/kalshi/orders")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/kalshi/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"orders": [
{
"kalshiOrderId": "<string>",
"userId": "<string>",
"marketId": "<string>",
"side": "yes",
"action": "buy",
"requestedCcontracts": "<string>",
"filledCcontracts": "<string>",
"filledUusdc": "<string>",
"priceUusdc": "<string>",
"chain": "<string>",
"status": "pending",
"createdAt": 123,
"updatedAt": 123
}
],
"pagination": {
"total": 123,
"hasMore": true,
"nextCursor": "<string>"
}
}{
"error": "<string>"
}{
"error": "<string>"
}Kalshi Market Data
Get Orders
GET
/
kalshi
/
orders
cURL
curl --request GET \
--url https://api.example.com/kalshi/ordersimport requests
url = "https://api.example.com/kalshi/orders"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/kalshi/orders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/kalshi/orders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/kalshi/orders"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/kalshi/orders")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/kalshi/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"orders": [
{
"kalshiOrderId": "<string>",
"userId": "<string>",
"marketId": "<string>",
"side": "yes",
"action": "buy",
"requestedCcontracts": "<string>",
"filledCcontracts": "<string>",
"filledUusdc": "<string>",
"priceUusdc": "<string>",
"chain": "<string>",
"status": "pending",
"createdAt": 123,
"updatedAt": 123
}
],
"pagination": {
"total": 123,
"hasMore": true,
"nextCursor": "<string>"
}
}{
"error": "<string>"
}{
"error": "<string>"
}Overview
To avoid ambiguity, we denote the smallest possible multiple of USDC (0.000001 USDC) as one
uusdc,
which stands for µUSDC (micro-USDC), and denote the smallest possible multiple of a contract (0.01 contract)
as one ccontract (centicontract).User-facing USDC balances are specified as fixed-point strings (e.g. "1.2625" for USDC). Contract quantities
in the API and SDK are specified as integer ccontracts strings (e.g. "1050" for 10.50 contracts at precision 2).Filtering by Status
Thestatus parameter accepts:
pending- Orders waiting to be filledfilled- Fully executed orderscancelled- Cancelled ordersclosed- Convenience filter for bothfilledandcancelledorders (useful for order history)
Pagination
This endpoint uses cursor-based pagination for efficient traversal of large datasets:- Make an initial request with your desired
limit(default: 50, max: 200) - Check
pagination.hasMoreto see if more results exist - Use
pagination.nextCursorin subsequent requests to fetch the next page
Cursors are opaque strings and should not be modified. They encode the position in the result set and are only valid for the same query parameters.
Example: Fetching Order History
# First page of closed orders, sorted by most recent
curl "https://api.bison.markets/kalshi/orders?userId=0x...&status=closed&sortBy=updatedAt&sortOrder=desc&limit=10"
# Response includes pagination info
# {
# "orders": [...],
# "pagination": {
# "total": 47,
# "hasMore": true,
# "nextCursor": "eyJ0IjoxNzAyMzQ1Njc4OTAwLCJpZCI6ImFiYzEyMyJ9"
# }
# }
# Fetch next page using cursor
curl "https://api.bison.markets/kalshi/orders?userId=0x...&status=closed&sortBy=updatedAt&sortOrder=desc&limit=10&cursor=eyJ0IjoxNzAyMzQ1Njc4OTAwLCJpZCI6ImFiYzEyMyJ9"
Example: Pending Orders
# Get all pending orders (typically a small set, no pagination needed)
curl "https://api.bison.markets/kalshi/orders?userId=0x...&status=pending"
Query Parameters
Ethereum address of the user
Pattern:
^0x[a-fA-F0-9]{40}$Example:
"0x1234567890123456789012345678901234567890"
Filter by status. "closed" matches filled OR cancelled.
Available options:
pending, filled, cancelled, closed Filter by market ticker
Filter by order action
Available options:
buy, sell Filter by contract side
Available options:
yes, no Orders created after this timestamp (ms)
Orders created before this timestamp (ms)
Field to sort by (default: createdAt)
Available options:
createdAt, updatedAt Sort direction (default: desc)
Available options:
asc, desc Max orders per page (default: 50, max: 200)
Required range:
1 <= x <= 200Pagination cursor from previous response