const res = await fetch('https://app.trdrs.co/api/venues/{venueId}/reference/contract?symbol=ESU6', {
headers: { Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/venues/{venueId}/reference/contract?symbol=ESU6' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY"import requests
url = "https://app.trdrs.co/api/venues/{venueId}/reference/contract"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/venues/{venueId}/reference/contract",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.trdrs.co/api/venues/{venueId}/reference/contract"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.trdrs.co/api/venues/{venueId}/reference/contract")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/venues/{venueId}/reference/contract")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"contract": {
"symbol": "HYPERLIQUID:BTC",
"contractVersion": "native-perpetual-payoff-v1",
"source": {
"authority": "Hyperliquid",
"document": "https://hyperliquid.gitbook.io/hyperliquid-docs/trading/contract-specifications",
"version": "native-perpetual-payoff-v1",
"effectiveFrom": "2026-10-03T00:00:00.000Z"
},
"productModel": "linear_perpetual",
"quoteCurrency": "USDT",
"settlementCurrency": "USDC",
"negativePrices": false,
"payoff": {
"kind": "fixed_quanto",
"rate": "1"
},
"contractMultiplier": "1",
"quantity": {
"unit": "base_units",
"lotSize": "1",
"min": "0.00001",
"step": "0.00001"
},
"ticks": [
{
"from": "0",
"to": "10000",
"size": "0.1"
},
{
"from": "10000",
"to": null,
"size": "1"
}
],
"lastTradeAt": null,
"pricing": {
"sourceId": "hyperliquid",
"stopTrigger": "mark"
}
}
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Read registered contract facts for a new instrument
Reads the contract version and native economics used by the paper book, including exact price bands, quantity units, quote and settlement assets and stop price source. With contractVersion omitted, a perpetual uses native-perpetual-payoff-v1; other contracts use their registered version. An explicit version reads that version or refuses. This lookup changes no listing or account. It does not supply provider order limits, minimum notional, sessions, account margin, funding, entitlements or feed access: configure and qualify those separately before activation and trading. Required scope: venue:read. Preview: served on the sandbox to every venue, and production availability is arranged when a venue qualifies. Trading API keys and pre-registration keys do not authorize these routes.
const res = await fetch('https://app.trdrs.co/api/venues/{venueId}/reference/contract?symbol=ESU6', {
headers: { Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/venues/{venueId}/reference/contract?symbol=ESU6' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY"import requests
url = "https://app.trdrs.co/api/venues/{venueId}/reference/contract"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/venues/{venueId}/reference/contract",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.trdrs.co/api/venues/{venueId}/reference/contract"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.trdrs.co/api/venues/{venueId}/reference/contract")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/venues/{venueId}/reference/contract")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"contract": {
"symbol": "HYPERLIQUID:BTC",
"contractVersion": "native-perpetual-payoff-v1",
"source": {
"authority": "Hyperliquid",
"document": "https://hyperliquid.gitbook.io/hyperliquid-docs/trading/contract-specifications",
"version": "native-perpetual-payoff-v1",
"effectiveFrom": "2026-10-03T00:00:00.000Z"
},
"productModel": "linear_perpetual",
"quoteCurrency": "USDT",
"settlementCurrency": "USDC",
"negativePrices": false,
"payoff": {
"kind": "fixed_quanto",
"rate": "1"
},
"contractMultiplier": "1",
"quantity": {
"unit": "base_units",
"lotSize": "1",
"min": "0.00001",
"step": "0.00001"
},
"ticks": [
{
"from": "0",
"to": "10000",
"size": "0.1"
},
{
"from": "10000",
"to": null,
"size": "1"
}
],
"lastTradeAt": null,
"pricing": {
"sourceId": "hyperliquid",
"stopTrigger": "mark"
}
}
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Authorizations
The Venue key (trdrs_vk_sandbox_… or trdrs_vk_production_…), in preview. It belongs to one venue in one environment and carries the scopes it was created with. The venue's verified owner creates it while signed in. It works on the /api/venues/{venueId} routes and, with trader:read or trader:trade, on the account, market and trading routes, reading the venue's own traders' accounts and routing their orders, each request naming its trader in x-trdrs-trader. A trdrs_sk_… key can't be used in its place. It reaches its venue's routes and its venue's own traders, and the owner manages keys from a signed-in session. Keep it on your server.
Path Parameters
Query Parameters
A registered contract identifier or dated futures code. Continuous futures symbols and unregistered feed symbols refuse.
1 - 300An exact registered version. Read older facts explicitly without changing a listing bound to them.
1 - 200Response
Success. The response is sent with Cache-Control: no-store, so don't cache it.
Show child attributes
Show child attributes