List Markets
curl --request GET \
--url https://api.simmer.markets/api/sdk/marketsimport requests
url = "https://api.simmer.markets/api/sdk/markets"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.simmer.markets/api/sdk/markets', 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.simmer.markets/api/sdk/markets",
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.simmer.markets/api/sdk/markets"
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.simmer.markets/api/sdk/markets")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.simmer.markets/api/sdk/markets")
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{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Markets
List Markets
List markets available for SDK trading.
By default, excludes tracking markets (no AI counterparty for simmer trading). Set include_analytics_only=true to include them (for real trading only).
Parameters:
- status: Filter by status (‘active’, ‘resolved’, etc.). Omit to get all statuses when using ids.
- venue: Filter by venue (‘polymarket’, ‘sim’). Alias for import_source. Deprecated: ‘sandbox’/‘simmer’ are accepted but deprecated, use ‘sim’ instead.
- import_source: Same as venue (kept for backwards compatibility).
- q: Text search for market questions (min 2 chars, case-insensitive)
- ids: Comma-separated market IDs to fetch (max 50). When provided, status filter is optional.
- tags: Comma-separated tags to filter by (e.g., ‘weather’ or ‘weather,crypto’). Returns markets with ALL specified tags.
- sort: ‘volume’ (by 24h volume), ‘recent’/‘created’ (by created_at), or None (default by 24h volume)
- include: Comma-separated optional response fields.
resolution_criteriais returned by default for active-market source verification; the include value remains accepted for older SDK callers. - tradeable_only: Defaults true. Set false to include active DB rows even when Redis/CLOB liveness checks mark the orderbook unavailable.
Each market row includes seconds_to_resolution (float seconds until
resolves_at, server-computed at response time; null when the market has
no resolution timestamp, negative once it has passed). Prefer it over
computing expiry from resolves_at locally — it is immune to host clock
skew and matches replay semantics.
Unknown params will trigger a warning in the response (helps debug typos). Requires API key in Authorization header.
GET
/
api
/
sdk
/
markets
List Markets
curl --request GET \
--url https://api.simmer.markets/api/sdk/marketsimport requests
url = "https://api.simmer.markets/api/sdk/markets"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.simmer.markets/api/sdk/markets', 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.simmer.markets/api/sdk/markets",
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.simmer.markets/api/sdk/markets"
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.simmer.markets/api/sdk/markets")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.simmer.markets/api/sdk/markets")
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{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Need
time_to_resolution, slippage, or flip-flop detection? Use the context endpoint — those fields are not on /markets./api/sdk/markets returns at most 1,000 matching markets for a discovery window, then applies limit/offset within that capped window (max 500 results per request, default 50). The response total is the window size, not the full catalog count. When your query hits the ceiling, the response includes "truncated": true and "capped_at_limit": true; use tags, q, venue, sort, or max_hours_to_resolution to narrow the search. Filters are applied before the cap, so tags=world-cup&sort=volume means “top markets inside the World Cup slice,” not “filter this page.” Market imports are not subject to this discovery-read cap.
Response fields
Each entry inmarkets[] has the same shape as GET /api/sdk/markets/{market_id}. See that page for the full field reference, including resolution fields (status, resolved_at, outcome).Query Parameters
Response
Successful Response
⌘I
