const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/providers', {
method: 'POST',
headers: {
'content-type': 'application/json',
Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}`,
"Idempotency-Key": "example-request-1",
},
body: JSON.stringify({
"name": "Example provider",
"manifest": {
"providerVersion": "example-v1",
"protocolVersion": "1.0",
"schemaDigest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"capabilities": {
"accounts": true,
"execution": true,
"marketData": false,
"generationFencing": true,
"completeOrderBook": true,
"executionHistory": true,
"executionCorrections": false,
"orderTypes": [
"market",
"limit"
],
"timeInForce": [
"day"
],
"reduceOnly": true,
"nativeReplace": false,
"nativeOco": false,
"accountProvisioning": false,
"positionModels": [
"net"
],
"replayRetentionSeconds": 604800
}
}
}),
})
const data = await res.json()curl -X POST 'https://app.trdrs.co/api/partner/venues/{venueId}/providers' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY" \
-H 'Idempotency-Key: example-request-1' \
-H 'content-type: application/json' \
-d '{"name":"Example provider","manifest":{"providerVersion":"example-v1","protocolVersion":"1.0","schemaDigest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","capabilities":{"accounts":true,"execution":true,"marketData":false,"generationFencing":true,"completeOrderBook":true,"executionHistory":true,"executionCorrections":false,"orderTypes":["market","limit"],"timeInForce":["day"],"reduceOnly":true,"nativeReplace":false,"nativeOco":false,"accountProvisioning":false,"positionModels":["net"],"replayRetentionSeconds":604800}}}'import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/providers"
payload = {
"name": "Example provider",
"manifest": {
"providerVersion": "example-v1",
"protocolVersion": "1.0",
"schemaDigest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"capabilities": {
"accounts": True,
"execution": True,
"marketData": False,
"generationFencing": True,
"completeOrderBook": True,
"executionHistory": True,
"executionCorrections": False,
"orderTypes": ["market", "limit"],
"timeInForce": ["day"],
"reduceOnly": True,
"nativeReplace": False,
"nativeOco": False,
"accountProvisioning": False,
"positionModels": ["net"],
"replayRetentionSeconds": 604800
}
}
}
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}/providers",
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([
'name' => 'Example provider',
'manifest' => [
'providerVersion' => 'example-v1',
'protocolVersion' => '1.0',
'schemaDigest' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
'capabilities' => [
'accounts' => true,
'execution' => true,
'marketData' => false,
'generationFencing' => true,
'completeOrderBook' => true,
'executionHistory' => true,
'executionCorrections' => false,
'orderTypes' => [
'market',
'limit'
],
'timeInForce' => [
'day'
],
'reduceOnly' => true,
'nativeReplace' => false,
'nativeOco' => false,
'accountProvisioning' => false,
'positionModels' => [
'net'
],
'replayRetentionSeconds' => 604800
]
]
]),
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}/providers"
payload := strings.NewReader("{\n \"name\": \"Example provider\",\n \"manifest\": {\n \"providerVersion\": \"example-v1\",\n \"protocolVersion\": \"1.0\",\n \"schemaDigest\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n \"capabilities\": {\n \"accounts\": true,\n \"execution\": true,\n \"marketData\": false,\n \"generationFencing\": true,\n \"completeOrderBook\": true,\n \"executionHistory\": true,\n \"executionCorrections\": false,\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"day\"\n ],\n \"reduceOnly\": true,\n \"nativeReplace\": false,\n \"nativeOco\": false,\n \"accountProvisioning\": false,\n \"positionModels\": [\n \"net\"\n ],\n \"replayRetentionSeconds\": 604800\n }\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}/providers")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Example provider\",\n \"manifest\": {\n \"providerVersion\": \"example-v1\",\n \"protocolVersion\": \"1.0\",\n \"schemaDigest\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n \"capabilities\": {\n \"accounts\": true,\n \"execution\": true,\n \"marketData\": false,\n \"generationFencing\": true,\n \"completeOrderBook\": true,\n \"executionHistory\": true,\n \"executionCorrections\": false,\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"day\"\n ],\n \"reduceOnly\": true,\n \"nativeReplace\": false,\n \"nativeOco\": false,\n \"accountProvisioning\": false,\n \"positionModels\": [\n \"net\"\n ],\n \"replayRetentionSeconds\": 604800\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/providers")
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 \"name\": \"Example provider\",\n \"manifest\": {\n \"providerVersion\": \"example-v1\",\n \"protocolVersion\": \"1.0\",\n \"schemaDigest\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n \"capabilities\": {\n \"accounts\": true,\n \"execution\": true,\n \"marketData\": false,\n \"generationFencing\": true,\n \"completeOrderBook\": true,\n \"executionHistory\": true,\n \"executionCorrections\": false,\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"day\"\n ],\n \"reduceOnly\": true,\n \"nativeReplace\": false,\n \"nativeOco\": false,\n \"accountProvisioning\": false,\n \"positionModels\": [\n \"net\"\n ],\n \"replayRetentionSeconds\": 604800\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"provider": {
"id": "00000000-0000-0000-0000-000000000001",
"venueId": "00000000-0000-0000-0000-000000000001",
"name": "Example provider",
"manifest": {
"providerVersion": "example-v1",
"protocolVersion": "1.0",
"schemaDigest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"capabilities": {
"accounts": true,
"execution": true,
"marketData": false,
"generationFencing": true,
"completeOrderBook": true,
"executionHistory": true,
"executionCorrections": false,
"orderTypes": [
"market",
"limit"
],
"timeInForce": [
"day"
],
"reduceOnly": true,
"nativeReplace": false,
"nativeOco": false,
"accountProvisioning": false,
"positionModels": [
"net"
],
"replayRetentionSeconds": 604800
}
},
"manifestHash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "candidate",
"creationKey": "example-request",
"creationHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"createdAt": "2026-09-14T12:00:00.000Z"
}
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Register a private provider version
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 the named venue-key scope and current owner membership. provider:manage. Strictly validates the manifest and saves a candidate. Repeating the same Idempotency-Key and body returns the original version; changed input conflicts. No provider endpoint is contacted, approved or enabled.
const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/providers', {
method: 'POST',
headers: {
'content-type': 'application/json',
Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}`,
"Idempotency-Key": "example-request-1",
},
body: JSON.stringify({
"name": "Example provider",
"manifest": {
"providerVersion": "example-v1",
"protocolVersion": "1.0",
"schemaDigest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"capabilities": {
"accounts": true,
"execution": true,
"marketData": false,
"generationFencing": true,
"completeOrderBook": true,
"executionHistory": true,
"executionCorrections": false,
"orderTypes": [
"market",
"limit"
],
"timeInForce": [
"day"
],
"reduceOnly": true,
"nativeReplace": false,
"nativeOco": false,
"accountProvisioning": false,
"positionModels": [
"net"
],
"replayRetentionSeconds": 604800
}
}
}),
})
const data = await res.json()curl -X POST 'https://app.trdrs.co/api/partner/venues/{venueId}/providers' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY" \
-H 'Idempotency-Key: example-request-1' \
-H 'content-type: application/json' \
-d '{"name":"Example provider","manifest":{"providerVersion":"example-v1","protocolVersion":"1.0","schemaDigest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","capabilities":{"accounts":true,"execution":true,"marketData":false,"generationFencing":true,"completeOrderBook":true,"executionHistory":true,"executionCorrections":false,"orderTypes":["market","limit"],"timeInForce":["day"],"reduceOnly":true,"nativeReplace":false,"nativeOco":false,"accountProvisioning":false,"positionModels":["net"],"replayRetentionSeconds":604800}}}'import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/providers"
payload = {
"name": "Example provider",
"manifest": {
"providerVersion": "example-v1",
"protocolVersion": "1.0",
"schemaDigest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"capabilities": {
"accounts": True,
"execution": True,
"marketData": False,
"generationFencing": True,
"completeOrderBook": True,
"executionHistory": True,
"executionCorrections": False,
"orderTypes": ["market", "limit"],
"timeInForce": ["day"],
"reduceOnly": True,
"nativeReplace": False,
"nativeOco": False,
"accountProvisioning": False,
"positionModels": ["net"],
"replayRetentionSeconds": 604800
}
}
}
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}/providers",
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([
'name' => 'Example provider',
'manifest' => [
'providerVersion' => 'example-v1',
'protocolVersion' => '1.0',
'schemaDigest' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
'capabilities' => [
'accounts' => true,
'execution' => true,
'marketData' => false,
'generationFencing' => true,
'completeOrderBook' => true,
'executionHistory' => true,
'executionCorrections' => false,
'orderTypes' => [
'market',
'limit'
],
'timeInForce' => [
'day'
],
'reduceOnly' => true,
'nativeReplace' => false,
'nativeOco' => false,
'accountProvisioning' => false,
'positionModels' => [
'net'
],
'replayRetentionSeconds' => 604800
]
]
]),
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}/providers"
payload := strings.NewReader("{\n \"name\": \"Example provider\",\n \"manifest\": {\n \"providerVersion\": \"example-v1\",\n \"protocolVersion\": \"1.0\",\n \"schemaDigest\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n \"capabilities\": {\n \"accounts\": true,\n \"execution\": true,\n \"marketData\": false,\n \"generationFencing\": true,\n \"completeOrderBook\": true,\n \"executionHistory\": true,\n \"executionCorrections\": false,\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"day\"\n ],\n \"reduceOnly\": true,\n \"nativeReplace\": false,\n \"nativeOco\": false,\n \"accountProvisioning\": false,\n \"positionModels\": [\n \"net\"\n ],\n \"replayRetentionSeconds\": 604800\n }\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}/providers")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Example provider\",\n \"manifest\": {\n \"providerVersion\": \"example-v1\",\n \"protocolVersion\": \"1.0\",\n \"schemaDigest\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n \"capabilities\": {\n \"accounts\": true,\n \"execution\": true,\n \"marketData\": false,\n \"generationFencing\": true,\n \"completeOrderBook\": true,\n \"executionHistory\": true,\n \"executionCorrections\": false,\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"day\"\n ],\n \"reduceOnly\": true,\n \"nativeReplace\": false,\n \"nativeOco\": false,\n \"accountProvisioning\": false,\n \"positionModels\": [\n \"net\"\n ],\n \"replayRetentionSeconds\": 604800\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/providers")
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 \"name\": \"Example provider\",\n \"manifest\": {\n \"providerVersion\": \"example-v1\",\n \"protocolVersion\": \"1.0\",\n \"schemaDigest\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n \"capabilities\": {\n \"accounts\": true,\n \"execution\": true,\n \"marketData\": false,\n \"generationFencing\": true,\n \"completeOrderBook\": true,\n \"executionHistory\": true,\n \"executionCorrections\": false,\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"day\"\n ],\n \"reduceOnly\": true,\n \"nativeReplace\": false,\n \"nativeOco\": false,\n \"accountProvisioning\": false,\n \"positionModels\": [\n \"net\"\n ],\n \"replayRetentionSeconds\": 604800\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"provider": {
"id": "00000000-0000-0000-0000-000000000001",
"venueId": "00000000-0000-0000-0000-000000000001",
"name": "Example provider",
"manifest": {
"providerVersion": "example-v1",
"protocolVersion": "1.0",
"schemaDigest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"capabilities": {
"accounts": true,
"execution": true,
"marketData": false,
"generationFencing": true,
"completeOrderBook": true,
"executionHistory": true,
"executionCorrections": false,
"orderTypes": [
"market",
"limit"
],
"timeInForce": [
"day"
],
"reduceOnly": true,
"nativeReplace": false,
"nativeOco": false,
"accountProvisioning": false,
"positionModels": [
"net"
],
"replayRetentionSeconds": 604800
}
},
"manifestHash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"state": "candidate",
"creationKey": "example-request",
"creationHash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"createdAt": "2026-09-14T12:00:00.000Z"
}
}{
"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 - 128Path Parameters
Body
Strict protocol declaration. Execution requires accounts, generation fencing, a complete order book, execution history, at least seven days replay and nonempty order types, time-in-force and position models. Lists contain no duplicates. No execution features may be advertised without execution; account provisioning/models require accounts. At least accounts or market data is required. Registration and a matching manifest do not certify these claims.
Show child attributes
Show child attributes
Response
Scoped result. Cache-Control: no-store.
Show child attributes
Show child attributes