const res = await fetch('https://app.trdrs.co/api/market/symbol-info?symbol=ESU6', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/market/symbol-info?symbol=ESU6' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/market/symbol-info"
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/market/symbol-info",
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/market/symbol-info"
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/market/symbol-info")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/market/symbol-info")
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{
"symbol": "ESU6",
"name": "E-mini S&P 500 Sep 2026",
"ticker": "ESU6",
"description": "E-mini S&P 500 Sep 2026",
"exchange": "CME",
"listedExchange": "CME",
"type": "futures",
"supportedResolutions": [],
"timezone": "America/Chicago",
"session": "1700-1600:23456",
"sessionHolidays": "20261225,20270101",
"corrections": "1700-1200:20261126;1700-1215:20261127,20261224",
"subsessions": [
{
"id": "regular",
"session": "0830-1515:23456",
"sessionCorrections": "0830-1200:20261126;0830-1215:20261127,20261224"
},
{
"id": "extended",
"session": "1700-1600:23456",
"sessionCorrections": "1700-1200:20261126;1700-1215:20261127,20261224"
},
{
"id": "premarket",
"session": "1700-0830:23456"
},
{
"id": "postmarket",
"session": "1515-1600:23456"
}
],
"dataStatus": "streaming",
"currencyCode": "USD",
"volumePrecision": 0,
"format": {
"pricescale": 100,
"minmov": 25
},
"provider": "rithmic",
"via": null,
"tick": 0.25,
"quotes": true,
"sessionClass": "futures",
"sessionCalendar": {
"holidays": {
"2026-12-25": []
},
"coverageThrough": "2027-06-30"
},
"multiplier": 50
}{
"error": "invalid_instrument"
}Get symbol details
Returns one symbol’s display identity, price format, and session model. Fetch once per instrument and cache for the session: tick size, price precision, contract multiplier, session class, and the served holiday calendar all live here, so charts and tickets format prices without hardcoding exchange conventions. Resolution is metadata-only and answers even when no feed is configured for the symbol. A spread expression (see the history route) resolves under type spread with no tick and no quote surface; a string that matches a catalog symbol exactly is always that symbol, never arithmetic.
const res = await fetch('https://app.trdrs.co/api/market/symbol-info?symbol=ESU6', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/market/symbol-info?symbol=ESU6' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/market/symbol-info"
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/market/symbol-info",
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/market/symbol-info"
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/market/symbol-info")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/market/symbol-info")
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{
"symbol": "ESU6",
"name": "E-mini S&P 500 Sep 2026",
"ticker": "ESU6",
"description": "E-mini S&P 500 Sep 2026",
"exchange": "CME",
"listedExchange": "CME",
"type": "futures",
"supportedResolutions": [],
"timezone": "America/Chicago",
"session": "1700-1600:23456",
"sessionHolidays": "20261225,20270101",
"corrections": "1700-1200:20261126;1700-1215:20261127,20261224",
"subsessions": [
{
"id": "regular",
"session": "0830-1515:23456",
"sessionCorrections": "0830-1200:20261126;0830-1215:20261127,20261224"
},
{
"id": "extended",
"session": "1700-1600:23456",
"sessionCorrections": "1700-1200:20261126;1700-1215:20261127,20261224"
},
{
"id": "premarket",
"session": "1700-0830:23456"
},
{
"id": "postmarket",
"session": "1515-1600:23456"
}
],
"dataStatus": "streaming",
"currencyCode": "USD",
"volumePrecision": 0,
"format": {
"pricescale": 100,
"minmov": 25
},
"provider": "rithmic",
"via": null,
"tick": 0.25,
"quotes": true,
"sessionClass": "futures",
"sessionCalendar": {
"holidays": {
"2026-12-25": []
},
"coverageThrough": "2027-06-30"
},
"multiplier": 50
}{
"error": "invalid_instrument"
}Authorizations
Your firm’s API key (the API calls this the tenant key; trdrs_sk_…), server-to-server only.
Query Parameters
Response
SymbolInfoResponse. Metadata-only: a known symbol with no configured feed still resolves (provider null).
The short display identity
The canonical symbol id to resolve and subscribe with on every later call
The long human description
The venue that lists the symbol
The wire timeframe tokens this symbol's feed serves. Empty means the feed serves any token the timeframe format published by /api/market/config admits, which is what an unconstrained feed declares rather than a finite list that would promise less than it serves.
IANA zone of the exchange session, e.g. America/Chicago
Exchange-local session string in HHMM-HHMM, carrying a trading-day suffix (1 is Sunday through 7 is Saturday) where the session opens on the previous calendar day, and the literal 24x7 for a market that never closes.
How live the data is for this caller: streaming when something feeds the symbol, endofday when nothing does
streaming, endofday, delayed_streaming Decimal places for a volume value: 0 for a whole-unit market, the venue's declared size step otherwise
How the symbol's prices are written, derived exactly from its declared tick and quotation convention and never from the magnitude of a price. pricescale is price units per whole unit (100 writes cents, 100000 writes pipettes, 32 writes thirty-seconds) and alone sets the width of the decimal column; minmov is the smallest move in those units; minmove2 divides one minmov step again for a fraction-of-a-fraction market; fractional writes the sub-unit part as a counted fraction; variableTickSize carries a tick ladder for a symbol that declares one.
Show child attributes
Show child attributes
pyth, rithmic, null Whether the serving feed exposes a real L1 quote surface
The trading-session model the symbol follows (served, never guessed)
equity, futures, fx, crypto Dollar value of a 1.0 move per unit; null when unknown, never a guess
Comma-separated YYYYMMDD full closures, in date order. Present exactly where sessionCalendar is.
Trading days whose session differs from the weekly one, as semicolon-separated session:dates entries. The session is written in the same format as the session property, without a trading-day suffix (a start later than its end opens on the previous calendar day, and a span that runs to midnight closes at 0000); the dates are a comma-separated ordered YYYYMMDD list. Full closures are never listed here; they ride sessionHolidays. Present exactly where the served calendar holds a shortened trading day.
"1700-1200:20261126;1700-1215:20261127,20261224"
The named sessions of a market whose exchange keeps extended hours: regular, extended, premarket and postmarket. For an equity the regular entry states the same hours as the session property and the extended spans exist nowhere else on the wire; for a future the extended entry states the same hours as the session property and the regular entry states the regular trading hours inside it. Pre-market and post-market status and extended-hours shading read from here. Present for equity and futures; absent for fx, crypto and spreads, whose one session has no named spans.
Show child attributes
Show child attributes
[
{
"id": "regular",
"session": "0930-1600",
"sessionCorrections": "0930-1300:20261127,20261224"
},
{
"id": "extended",
"session": "0400-2000",
"sessionCorrections": "0400-1700:20261127,20261224"
},
{ "id": "premarket", "session": "0400-0930" },
{
"id": "postmarket",
"session": "1600-2000",
"sessionCorrections": "1300-1700:20261127,20261224"
}
]
Quote currency: ISO 4217 for a money-quoted market, or the venue's declared quote asset for a stablecoin-margined perp. Absent when the instrument domain declares none.
The unit a non-currency symbol is quoted in
The served holiday calendar for the session model (futures and equity; absent for fx/crypto). Dates are exchange-local YYYY-MM-DD; an empty segment list is a full closure; absent dates follow weekday rules. The platform maintains this annually server-side, so clients never ship their own calendar updates.
Show child attributes
Show child attributes