TypeScript
// First-party cookie auth: this runs in a signed-in trdrs session, not under an API key.
const res = await fetch('https://app.trdrs.co/api/enrollments', {
credentials: 'include',
})
const data = await res.json()curl 'https://app.trdrs.co/api/enrollments' \
-b "session=$TRDRS_SESSION"import requests
url = "https://app.trdrs.co/api/enrollments"
headers = {"cookie": "session="}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/enrollments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_COOKIE => "session=",
]);
$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/enrollments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cookie", "session=")
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/enrollments")
.header("cookie", "session=")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/enrollments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cookie"] = 'session='
response = http.request(request)
puts response.read_body{
"enrollments": [
{
"id": "e5c90b1a-7d34-4f6b-8a2e-91c8f0d47a53",
"challengeId": "3f8a1c2e-9b47-4d10-a3fe-2c61b7c90d84",
"challengeName": "50K Evaluation",
"stage": 1,
"accountNumber": "EVAL-50K-0042",
"type": "standard",
"status": "in_progress",
"startingBalance": 50000,
"ddMode": "trailing_max_equity_eod",
"startsAt": 1787144400,
"endsAt": null,
"failReason": null,
"createdAt": 1787058000,
"progress": {
"equity": 51230.5,
"balance": 51155,
"dayAnchorEquity": 51010.25,
"hwmEquity": 51402.75,
"dailyFloor": 49010.25,
"totalFloor": 47402.75,
"profitTargetLevel": 54000,
"tradingDays": 3,
"minTradingDays": 5,
"openPositions": 1
}
}
]
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Challenges
List your enrollments
Preview: outside the additive-only guarantee. These shapes are the pre-contract v1 scaffold; the Phase-1 rebuild will change them. Read them, do not pin to them.
Served only when the engine runs with CHALLENGES_ENABLED. The route bundle is not merely disabled without it. It is never constructed, so every path here answers 404.
Returns the calling user’s own enrollments, with live evaluation progress. progress is non-null only while an enrollment is registered or in_progress. Its money fields are true nulls when the mark is unknown and are never zero-filled: a client that renders a null as 0 shows a trader a drawdown breach that did not happen. dailyFloor/totalFloor are absolute equity levels: a breach fires when equity crosses below.
GET
/
api
/
enrollments
TypeScript
// First-party cookie auth: this runs in a signed-in trdrs session, not under an API key.
const res = await fetch('https://app.trdrs.co/api/enrollments', {
credentials: 'include',
})
const data = await res.json()curl 'https://app.trdrs.co/api/enrollments' \
-b "session=$TRDRS_SESSION"import requests
url = "https://app.trdrs.co/api/enrollments"
headers = {"cookie": "session="}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/enrollments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_COOKIE => "session=",
]);
$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/enrollments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cookie", "session=")
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/enrollments")
.header("cookie", "session=")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/enrollments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cookie"] = 'session='
response = http.request(request)
puts response.read_body{
"enrollments": [
{
"id": "e5c90b1a-7d34-4f6b-8a2e-91c8f0d47a53",
"challengeId": "3f8a1c2e-9b47-4d10-a3fe-2c61b7c90d84",
"challengeName": "50K Evaluation",
"stage": 1,
"accountNumber": "EVAL-50K-0042",
"type": "standard",
"status": "in_progress",
"startingBalance": 50000,
"ddMode": "trailing_max_equity_eod",
"startsAt": 1787144400,
"endsAt": null,
"failReason": null,
"createdAt": 1787058000,
"progress": {
"equity": 51230.5,
"balance": 51155,
"dayAnchorEquity": 51010.25,
"hwmEquity": 51402.75,
"dailyFloor": 49010.25,
"totalFloor": 47402.75,
"profitTargetLevel": 54000,
"tradingDays": 3,
"minTradingDays": 5,
"openPositions": 1
}
}
]
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}