const res = await fetch('https://app.trdrs.co/api/account/markets?provider=rithmic&account=PA-4821-07', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/account/markets?provider=rithmic&account=PA-4821-07' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/account/markets"
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/account/markets",
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/account/markets"
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/account/markets")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/account/markets")
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{
"account": "PA-4821-07",
"scope": {
"provider": "rithmic",
"name": "Apex",
"venue": null
},
"fingerprint": "3f9a1c27b84e05d6",
"markets": [
{
"market": "CME:ES1!",
"symbol": "ES1!",
"name": "E-mini S&P 500 continuous front month",
"exchange": "CME",
"type": "future",
"contract": "CME:ESU2026",
"rollAt": "2026-09-09T22:00:00.000Z"
},
{
"market": "CME:ES2!",
"symbol": "ES2!",
"name": "E-mini S&P 500 continuous second month",
"exchange": "CME",
"type": "future",
"contract": "CME:ESZ2026",
"rollAt": "2026-09-09T22:00:00.000Z"
},
{
"market": "CME:ESU2026",
"symbol": "CME:ESU2026",
"name": "E-mini S&P 500 Sep 2026",
"exchange": "CME",
"type": "future",
"contract": "CME:ESU2026",
"rollAt": "2026-09-09T22:00:00.000Z"
},
{
"market": "CME:ESZ2026",
"symbol": "CME:ESZ2026",
"name": "E-mini S&P 500 Dec 2026",
"exchange": "CME",
"type": "future",
"contract": "CME:ESZ2026",
"rollAt": "2026-12-09T23:00:00.000Z"
}
]
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}List the markets an account trades
Returns every market the account can enter now, and whose markets they are, for a symbol search to show. The list is the same judgment every order meets first (GET /api/trading/match), so an order on a listed market isn’t refused for its market. Each row carries its market key, which symbol search rows and symbol-info carry as market, so a symbol from any feed is matched to the market it names.
Required key: Trading API key. A Connect app’s backend can also send it with the app’s API key, and a venue’s backend with its Venue key, which carries trader:read or trader:trade, each naming one of its own traders in x-trdrs-trader: it then runs on that trader’s own accounts.
const res = await fetch('https://app.trdrs.co/api/account/markets?provider=rithmic&account=PA-4821-07', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/account/markets?provider=rithmic&account=PA-4821-07' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/account/markets"
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/account/markets",
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/account/markets"
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/account/markets")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/account/markets")
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{
"account": "PA-4821-07",
"scope": {
"provider": "rithmic",
"name": "Apex",
"venue": null
},
"fingerprint": "3f9a1c27b84e05d6",
"markets": [
{
"market": "CME:ES1!",
"symbol": "ES1!",
"name": "E-mini S&P 500 continuous front month",
"exchange": "CME",
"type": "future",
"contract": "CME:ESU2026",
"rollAt": "2026-09-09T22:00:00.000Z"
},
{
"market": "CME:ES2!",
"symbol": "ES2!",
"name": "E-mini S&P 500 continuous second month",
"exchange": "CME",
"type": "future",
"contract": "CME:ESZ2026",
"rollAt": "2026-09-09T22:00:00.000Z"
},
{
"market": "CME:ESU2026",
"symbol": "CME:ESU2026",
"name": "E-mini S&P 500 Sep 2026",
"exchange": "CME",
"type": "future",
"contract": "CME:ESU2026",
"rollAt": "2026-09-09T22:00:00.000Z"
},
{
"market": "CME:ESZ2026",
"symbol": "CME:ESZ2026",
"name": "E-mini S&P 500 Dec 2026",
"exchange": "CME",
"type": "future",
"contract": "CME:ESZ2026",
"rollAt": "2026-12-09T23:00:00.000Z"
}
]
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Authorizations
The Trading API key (trdrs_sk_…), for market data, orders and account state on the accounts its owner holds. Use it server-to-server, and keep it on your server. Its scope is named trading in the API.
Query Parameters
The provider the account is at, such as rithmic or paper. Omit it to use your default provider. An unknown value is refused with 400, never replaced with another provider.
The account number at that provider. It must be one of your own accounts, or the call is refused with 400.
Response
The markets. They depend on the account:
- An account at an exchange (Hyperliquid, Binance, Bybit) trades the exchange's own perpetuals. Another exchange's perpetual is that exchange's market, on its own contract terms, so it isn't listed.
- An account at a futures provider (Rithmic, Tastytrade) trades the futures products trdrs holds a contract specification for, as continuous futures (
ES1!) and as dated contracts. A Rithmic continuous future names the contract its position trades now, by the product's roll rule. Tastytrade names its own active month, whichGET /api/trading/matchanswers, so its front continuous future lists withcontractnull. A Rithmic login at a venue's system lists the same markets under the login's brand, and Rithmic refuses at order time what the venue doesn't permit. - An account on the paper book (a Demo or an account a venue issued) and an account a venue granted at a provider trade what the venue's catalog lists for the account and it can enter now. A dated contract is listed until its last trade, and the continuous futures are the listed contracts of each product in roll order, each trading as its contract until the front one rolls.
- The paper book prices futures only from the trader's own futures source, a login on their venue's production Rithmic system, so it lists futures only for a trader who has one.
- A CFD is listed only while a provider serves its price, and its
exchangenames that provider.
scope names whose markets they are: the venue that issued the account, the brand of a login at a venue's system (Apex on Rithmic), or else the provider. A Demo has none. When the account stream's trading event carries another fingerprint, the list changed, so read it again.
Every market the account can enter now, by the same judgment its orders meet.
The account number the markets are for.
Whose markets they are, or null for a trader's own Demo, which trades every market on the paper book.
Show child attributes
Show child attributes
{
"provider": "rithmic",
"name": "Apex",
"venue": null
}
Changes whenever the list does. The account stream's trading event carries it, so read the list again only when it changes.
The markets.
Show child attributes
Show child attributes