curl --request GET \
--url https://hip4-api.totalis.trade/v1/markets/{outcome_id}import requests
url = "https://hip4-api.totalis.trade/v1/markets/{outcome_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://hip4-api.totalis.trade/v1/markets/{outcome_id}', 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://hip4-api.totalis.trade/v1/markets/{outcome_id}",
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://hip4-api.totalis.trade/v1/markets/{outcome_id}"
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://hip4-api.totalis.trade/v1/markets/{outcome_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hip4-api.totalis.trade/v1/markets/{outcome_id}")
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{
"catalog_generation": "6100",
"market": {
"outcome_id": "1209",
"native_question_id": null,
"title": "HYPE touches 100 by 20261001-0000",
"state": "ACTIVE",
"result": {
"availability": "AVAILABLE",
"result_state": "UNRESOLVED"
},
"metadata_revision": "6100",
"eligibility": {
"state": "ENABLED"
},
"category": "Crypto",
"subcategory": "other",
"sides": [
{
"side": "YES",
"coin": "#12090",
"reference": {
"availability": "AVAILABLE",
"quality": "BOOK_MID",
"value": "240800000000000000",
"best_bid": "238600000000000000",
"best_ask": "243000000000000000",
"scale": "1000000000000000000",
"freshness": "FRESH",
"received_at": "2026-09-26T19:59:25.086007173Z"
}
},
{
"side": "NO",
"coin": "#12091",
"reference": {
"availability": "AVAILABLE",
"quality": "BOOK_MID",
"value": "759200000000000000",
"best_bid": "757000000000000000",
"best_ask": "761400000000000000",
"scale": "1000000000000000000",
"freshness": "FRESH",
"received_at": "2026-09-26T19:59:25.086007173Z"
}
}
],
"dates": {
"event": null,
"result_by": null,
"resolves_after": null,
"scheduled_event_at": null,
"observation_ends_at": "1790812800",
"market_class": "PRICE_TOUCH"
}
},
"question": null,
"series_id": "f373fade6a46dc0e",
"metadata": {
"content": {
"title": "HYPE touches 100 by 20261001-0000",
"rules": "The market resolves to Yes if the HYPE price touches 100 at or before 20261001-0000, and otherwise resolves to No. The price counts as touched once the 1-second TWAP of HYPE-USDC perp mark price equals or crosses 100 at any time after this market is deployed and at or before 20261001-0000; the market can settle as soon as a touch occurs. If HYPE is delisted before this market settles, the HYPE settlement price at delisting counts as the final price for the touch determination, and the market can settle at delisting if the price has not touched 100 by then. metadata=category:price|subCategory:N/A|semanticRestriction:This market must refer to the price of a Hyperliquid perp."
},
"parent": null,
"sides": [
{
"side": "YES",
"label": "Yes"
},
{
"side": "NO",
"label": "No"
}
]
},
"recurring_round": null,
"stats": {
"volume_24h": "18240500000",
"open_interest": "52000000000"
},
"updated_at": "2026-09-26T19:59:25.086007173Z"
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}Get market
Get one market with its YES and NO sides, product details, current round and 24-hour stats.
No API key required.
curl --request GET \
--url https://hip4-api.totalis.trade/v1/markets/{outcome_id}import requests
url = "https://hip4-api.totalis.trade/v1/markets/{outcome_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://hip4-api.totalis.trade/v1/markets/{outcome_id}', 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://hip4-api.totalis.trade/v1/markets/{outcome_id}",
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://hip4-api.totalis.trade/v1/markets/{outcome_id}"
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://hip4-api.totalis.trade/v1/markets/{outcome_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hip4-api.totalis.trade/v1/markets/{outcome_id}")
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{
"catalog_generation": "6100",
"market": {
"outcome_id": "1209",
"native_question_id": null,
"title": "HYPE touches 100 by 20261001-0000",
"state": "ACTIVE",
"result": {
"availability": "AVAILABLE",
"result_state": "UNRESOLVED"
},
"metadata_revision": "6100",
"eligibility": {
"state": "ENABLED"
},
"category": "Crypto",
"subcategory": "other",
"sides": [
{
"side": "YES",
"coin": "#12090",
"reference": {
"availability": "AVAILABLE",
"quality": "BOOK_MID",
"value": "240800000000000000",
"best_bid": "238600000000000000",
"best_ask": "243000000000000000",
"scale": "1000000000000000000",
"freshness": "FRESH",
"received_at": "2026-09-26T19:59:25.086007173Z"
}
},
{
"side": "NO",
"coin": "#12091",
"reference": {
"availability": "AVAILABLE",
"quality": "BOOK_MID",
"value": "759200000000000000",
"best_bid": "757000000000000000",
"best_ask": "761400000000000000",
"scale": "1000000000000000000",
"freshness": "FRESH",
"received_at": "2026-09-26T19:59:25.086007173Z"
}
}
],
"dates": {
"event": null,
"result_by": null,
"resolves_after": null,
"scheduled_event_at": null,
"observation_ends_at": "1790812800",
"market_class": "PRICE_TOUCH"
}
},
"question": null,
"series_id": "f373fade6a46dc0e",
"metadata": {
"content": {
"title": "HYPE touches 100 by 20261001-0000",
"rules": "The market resolves to Yes if the HYPE price touches 100 at or before 20261001-0000, and otherwise resolves to No. The price counts as touched once the 1-second TWAP of HYPE-USDC perp mark price equals or crosses 100 at any time after this market is deployed and at or before 20261001-0000; the market can settle as soon as a touch occurs. If HYPE is delisted before this market settles, the HYPE settlement price at delisting counts as the final price for the touch determination, and the market can settle at delisting if the price has not touched 100 by then. metadata=category:price|subCategory:N/A|semanticRestriction:This market must refer to the price of a Hyperliquid perp."
},
"parent": null,
"sides": [
{
"side": "YES",
"label": "Yes"
},
{
"side": "NO",
"label": "No"
}
]
},
"recurring_round": null,
"stats": {
"volume_24h": "18240500000",
"open_interest": "52000000000"
},
"updated_at": "2026-09-26T19:59:25.086007173Z"
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}Path Parameters
HIP-4 outcome ID of the market, as a decimal string.
10^(0|[1-9][0-9]{0,8}|[1-3][0-9]{9}|4[01][0-9]{8}|42[0-8][0-9]{7}|429[0-3][0-9]{6}|4294[0-8][0-9]{5}|42949[0-5][0-9]{4}|429496[0-6][0-9]{3}|4294967[0-1][0-9]{2}|42949672[0-8][0-9]|429496729[0-5])$Response
The market with its YES and NO sides, product details, current round and 24-hour stats.
Catalog generation the market, question and metadata were read from.
19^[1-9][0-9]*$The market with its current references, eligibility and result.
Show child attributes
Show child attributes
Parent question with all of its markets; null for a standalone market.
Show child attributes
Show child attributes
Key of the price series this standalone binaryPrice or priceTouch market belongs to, the series_id of the series read; set even while it is the only listed member. Null for every other market.
^[0-9a-f]{16}$Display title and rules of the market, its sides and its parent question, read at the same catalog generation as market.
Show child attributes
Show child attributes
The recurring round the market belongs to, with its recorded neighbours; null for a market outside a recurring series or a round whose recorded definition is withheld.
Show child attributes
Show child attributes
This market's 24h volume and open interest; null until a current stats snapshot has a row for it.
Show child attributes
Show child attributes
Latest change to the market's catalog record, native result or reference prices, RFC 3339 UTC.
30^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,9})?Z$Was this page helpful?

