const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance', {
method: 'POST',
headers: {
'content-type': 'application/json',
Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}`,
"Idempotency-Key": "example-request-1",
},
body: JSON.stringify({
"startingAllocation": {
"numerator": "10000000",
"denominator": "100"
}
}),
})
const data = await res.json()curl -X POST 'https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY" \
-H 'Idempotency-Key: example-request-1' \
-H 'content-type: application/json' \
-d '{"startingAllocation":{"numerator":"10000000","denominator":"100"}}'import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance"
payload = { "startingAllocation": {
"numerator": "10000000",
"denominator": "100"
} }
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'startingAllocation' => [
'numerator' => '10000000',
'denominator' => '100'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance"
payload := strings.NewReader("{\n \"startingAllocation\": {\n \"numerator\": \"10000000\",\n \"denominator\": \"100\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"startingAllocation\": {\n \"numerator\": \"10000000\",\n \"denominator\": \"100\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"startingAllocation\": {\n \"numerator\": \"10000000\",\n \"denominator\": \"100\"\n }\n}"
response = http.request(request)
puts response.read_body{
"advance": {
"state": "advanced",
"targetAccountId": "funded-account-1",
"cycleId": "cycle:2026-09-14T12:00:00.000Z",
"stageId": "evaluation-1",
"policyId": "00000000-0000-0000-0000-000000000001",
"transitionReference": "stage-9f1c2b7e4a5d80361c2b7e4a5d803612"
}
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Advance an account past a stage
Private preview, disabled unless VENUE_CONFIGURATION_ENABLED is enabled and the vault is configured. This branch has not enabled these routes in the public sandbox. Existing trdrs_sk partner/tenant keys do not authorize these routes. Requires stage:advance. Re-decides eligibility, then issues ONE successor for this source cycle and stage - a second attempt with a different idempotency key returns the account the first one made, because an account once issued cannot be un-issued. The policy must still be the exact version the decision was made under, the account’s revision must not have moved since, and the account must be provably quiet. startingAllocation is required and null is a real value meaning a zero-balance successor. Only for accounts whose balance authority is TRDRS. A refusal returns 409 not_eligible with every failing reason.
const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance', {
method: 'POST',
headers: {
'content-type': 'application/json',
Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}`,
"Idempotency-Key": "example-request-1",
},
body: JSON.stringify({
"startingAllocation": {
"numerator": "10000000",
"denominator": "100"
}
}),
})
const data = await res.json()curl -X POST 'https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY" \
-H 'Idempotency-Key: example-request-1' \
-H 'content-type: application/json' \
-d '{"startingAllocation":{"numerator":"10000000","denominator":"100"}}'import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance"
payload = { "startingAllocation": {
"numerator": "10000000",
"denominator": "100"
} }
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'startingAllocation' => [
'numerator' => '10000000',
'denominator' => '100'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance"
payload := strings.NewReader("{\n \"startingAllocation\": {\n \"numerator\": \"10000000\",\n \"denominator\": \"100\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"startingAllocation\": {\n \"numerator\": \"10000000\",\n \"denominator\": \"100\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"startingAllocation\": {\n \"numerator\": \"10000000\",\n \"denominator\": \"100\"\n }\n}"
response = http.request(request)
puts response.read_body{
"advance": {
"state": "advanced",
"targetAccountId": "funded-account-1",
"cycleId": "cycle:2026-09-14T12:00:00.000Z",
"stageId": "evaluation-1",
"policyId": "00000000-0000-0000-0000-000000000001",
"transitionReference": "stage-9f1c2b7e4a5d80361c2b7e4a5d803612"
}
}{
"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
Private-preview venue operator key (trdrs_vk_sandbox_… or trdrs_vk_production_…). Bound to one venue/environment and explicit scopes. Issued by a verified owner session; accepted only on documented /api/partner/venues/{venueId} routes. Existing trdrs_sk keys are not interchangeable. Never grants trader, login or key-management authority.
Headers
1 - 128Body
An exact fraction of integers as decimal strings. Money is carried this way until it is posted, so nothing rounds twice on the way to the journal.
Show child attributes
Show child attributes
Response
Scoped result. Cache-Control: no-store.
reserved means the successor was named and created but its opening allocation has not been confirmed; advanced means it has. The two stay distinct because creation may one day happen at a provider, where "we asked" and "it exists" are different facts.
Show child attributes
Show child attributes