const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/instruments', {
method: 'POST',
headers: {
'content-type': 'application/json',
Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}`,
"Idempotency-Key": "example-request-1",
},
body: JSON.stringify({
"specification": {
"instrumentId": "BTCUSD",
"version": "v1",
"venueId": "00000000-0000-0000-0000-000000000001",
"symbol": "BTCUSD",
"name": "Bitcoin / USD",
"productModel": "linear_spot",
"quoteCurrency": "USD",
"settlementCurrency": "USD",
"negativePrices": false,
"quantity": {
"unit": "base_units",
"lotSize": "1",
"min": "0.001",
"max": "100",
"step": "0.001"
},
"contractMultiplier": "1",
"minNotional": "10",
"ticks": [
{
"from": "0",
"to": null,
"size": "0.01"
}
],
"orderTypes": [
"market",
"limit"
],
"timeInForce": [
"gtc"
],
"mappings": [],
"sessions": {
"timezone": "UTC",
"coverageFrom": "2026-01-01",
"coverageThrough": "2026-12-31",
"weekly": [
{
"day": 0,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 1,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 2,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 3,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 4,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 5,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 6,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
}
],
"holidays": []
},
"expiresAt": null,
"lastTradeAt": null,
"pricing": {
"sourceId": "example-feed",
"stopTrigger": "last",
"maxAgeMs": 1000
},
"entitlement": null,
"state": "enabled"
}
}),
})
const data = await res.json()curl -X POST 'https://app.trdrs.co/api/partner/venues/{venueId}/instruments' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY" \
-H 'Idempotency-Key: example-request-1' \
-H 'content-type: application/json' \
-d '{"specification":{"instrumentId":"BTCUSD","version":"v1","venueId":"00000000-0000-0000-0000-000000000001","symbol":"BTCUSD","name":"Bitcoin / USD","productModel":"linear_spot","quoteCurrency":"USD","settlementCurrency":"USD","negativePrices":false,"quantity":{"unit":"base_units","lotSize":"1","min":"0.001","max":"100","step":"0.001"},"contractMultiplier":"1","minNotional":"10","ticks":[{"from":"0","to":null,"size":"0.01"}],"orderTypes":["market","limit"],"timeInForce":["gtc"],"mappings":[],"sessions":{"timezone":"UTC","coverageFrom":"2026-01-01","coverageThrough":"2026-12-31","weekly":[{"day":0,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":1,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":2,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":3,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":4,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":5,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":6,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]}],"holidays":[]},"expiresAt":null,"lastTradeAt":null,"pricing":{"sourceId":"example-feed","stopTrigger":"last","maxAgeMs":1000},"entitlement":null,"state":"enabled"}}'import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/instruments"
payload = { "specification": {
"instrumentId": "BTCUSD",
"version": "v1",
"venueId": "00000000-0000-0000-0000-000000000001",
"symbol": "BTCUSD",
"name": "Bitcoin / USD",
"productModel": "linear_spot",
"quoteCurrency": "USD",
"settlementCurrency": "USD",
"negativePrices": False,
"quantity": {
"unit": "base_units",
"lotSize": "1",
"min": "0.001",
"max": "100",
"step": "0.001"
},
"contractMultiplier": "1",
"minNotional": "10",
"ticks": [
{
"from": "0",
"to": None,
"size": "0.01"
}
],
"orderTypes": ["market", "limit"],
"timeInForce": ["gtc"],
"mappings": [],
"sessions": {
"timezone": "UTC",
"coverageFrom": "2026-01-01",
"coverageThrough": "2026-12-31",
"weekly": [
{
"day": 0,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 1,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 2,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 3,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 4,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 5,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 6,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
}
],
"holidays": []
},
"expiresAt": None,
"lastTradeAt": None,
"pricing": {
"sourceId": "example-feed",
"stopTrigger": "last",
"maxAgeMs": 1000
},
"entitlement": None,
"state": "enabled"
} }
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}/instruments",
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([
'specification' => [
'instrumentId' => 'BTCUSD',
'version' => 'v1',
'venueId' => '00000000-0000-0000-0000-000000000001',
'symbol' => 'BTCUSD',
'name' => 'Bitcoin / USD',
'productModel' => 'linear_spot',
'quoteCurrency' => 'USD',
'settlementCurrency' => 'USD',
'negativePrices' => false,
'quantity' => [
'unit' => 'base_units',
'lotSize' => '1',
'min' => '0.001',
'max' => '100',
'step' => '0.001'
],
'contractMultiplier' => '1',
'minNotional' => '10',
'ticks' => [
[
'from' => '0',
'to' => null,
'size' => '0.01'
]
],
'orderTypes' => [
'market',
'limit'
],
'timeInForce' => [
'gtc'
],
'mappings' => [
],
'sessions' => [
'timezone' => 'UTC',
'coverageFrom' => '2026-01-01',
'coverageThrough' => '2026-12-31',
'weekly' => [
[
'day' => 0,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 1,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 2,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 3,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 4,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 5,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 6,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
]
],
'holidays' => [
]
],
'expiresAt' => null,
'lastTradeAt' => null,
'pricing' => [
'sourceId' => 'example-feed',
'stopTrigger' => 'last',
'maxAgeMs' => 1000
],
'entitlement' => null,
'state' => 'enabled'
]
]),
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}/instruments"
payload := strings.NewReader("{\n \"specification\": {\n \"instrumentId\": \"BTCUSD\",\n \"version\": \"v1\",\n \"venueId\": \"00000000-0000-0000-0000-000000000001\",\n \"symbol\": \"BTCUSD\",\n \"name\": \"Bitcoin / USD\",\n \"productModel\": \"linear_spot\",\n \"quoteCurrency\": \"USD\",\n \"settlementCurrency\": \"USD\",\n \"negativePrices\": false,\n \"quantity\": {\n \"unit\": \"base_units\",\n \"lotSize\": \"1\",\n \"min\": \"0.001\",\n \"max\": \"100\",\n \"step\": \"0.001\"\n },\n \"contractMultiplier\": \"1\",\n \"minNotional\": \"10\",\n \"ticks\": [\n {\n \"from\": \"0\",\n \"to\": null,\n \"size\": \"0.01\"\n }\n ],\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"gtc\"\n ],\n \"mappings\": [],\n \"sessions\": {\n \"timezone\": \"UTC\",\n \"coverageFrom\": \"2026-01-01\",\n \"coverageThrough\": \"2026-12-31\",\n \"weekly\": [\n {\n \"day\": 0,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 1,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 2,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 3,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 4,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 5,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 6,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n }\n ],\n \"holidays\": []\n },\n \"expiresAt\": null,\n \"lastTradeAt\": null,\n \"pricing\": {\n \"sourceId\": \"example-feed\",\n \"stopTrigger\": \"last\",\n \"maxAgeMs\": 1000\n },\n \"entitlement\": null,\n \"state\": \"enabled\"\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}/instruments")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"specification\": {\n \"instrumentId\": \"BTCUSD\",\n \"version\": \"v1\",\n \"venueId\": \"00000000-0000-0000-0000-000000000001\",\n \"symbol\": \"BTCUSD\",\n \"name\": \"Bitcoin / USD\",\n \"productModel\": \"linear_spot\",\n \"quoteCurrency\": \"USD\",\n \"settlementCurrency\": \"USD\",\n \"negativePrices\": false,\n \"quantity\": {\n \"unit\": \"base_units\",\n \"lotSize\": \"1\",\n \"min\": \"0.001\",\n \"max\": \"100\",\n \"step\": \"0.001\"\n },\n \"contractMultiplier\": \"1\",\n \"minNotional\": \"10\",\n \"ticks\": [\n {\n \"from\": \"0\",\n \"to\": null,\n \"size\": \"0.01\"\n }\n ],\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"gtc\"\n ],\n \"mappings\": [],\n \"sessions\": {\n \"timezone\": \"UTC\",\n \"coverageFrom\": \"2026-01-01\",\n \"coverageThrough\": \"2026-12-31\",\n \"weekly\": [\n {\n \"day\": 0,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 1,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 2,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 3,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 4,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 5,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 6,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n }\n ],\n \"holidays\": []\n },\n \"expiresAt\": null,\n \"lastTradeAt\": null,\n \"pricing\": {\n \"sourceId\": \"example-feed\",\n \"stopTrigger\": \"last\",\n \"maxAgeMs\": 1000\n },\n \"entitlement\": null,\n \"state\": \"enabled\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/instruments")
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 \"specification\": {\n \"instrumentId\": \"BTCUSD\",\n \"version\": \"v1\",\n \"venueId\": \"00000000-0000-0000-0000-000000000001\",\n \"symbol\": \"BTCUSD\",\n \"name\": \"Bitcoin / USD\",\n \"productModel\": \"linear_spot\",\n \"quoteCurrency\": \"USD\",\n \"settlementCurrency\": \"USD\",\n \"negativePrices\": false,\n \"quantity\": {\n \"unit\": \"base_units\",\n \"lotSize\": \"1\",\n \"min\": \"0.001\",\n \"max\": \"100\",\n \"step\": \"0.001\"\n },\n \"contractMultiplier\": \"1\",\n \"minNotional\": \"10\",\n \"ticks\": [\n {\n \"from\": \"0\",\n \"to\": null,\n \"size\": \"0.01\"\n }\n ],\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"gtc\"\n ],\n \"mappings\": [],\n \"sessions\": {\n \"timezone\": \"UTC\",\n \"coverageFrom\": \"2026-01-01\",\n \"coverageThrough\": \"2026-12-31\",\n \"weekly\": [\n {\n \"day\": 0,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 1,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 2,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 3,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 4,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 5,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 6,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n }\n ],\n \"holidays\": []\n },\n \"expiresAt\": null,\n \"lastTradeAt\": null,\n \"pricing\": {\n \"sourceId\": \"example-feed\",\n \"stopTrigger\": \"last\",\n \"maxAgeMs\": 1000\n },\n \"entitlement\": null,\n \"state\": \"enabled\"\n }\n}"
response = http.request(request)
puts response.read_body{
"instrument": {
"id": "00000000-0000-0000-0000-000000000001",
"venueId": "00000000-0000-0000-0000-000000000001",
"environment": "sandbox",
"specification": {
"instrumentId": "BTCUSD",
"version": "v1",
"venueId": "00000000-0000-0000-0000-000000000001",
"symbol": "BTCUSD",
"name": "Bitcoin / USD",
"productModel": "linear_spot",
"quoteCurrency": "USD",
"settlementCurrency": "USD",
"negativePrices": false,
"quantity": {
"unit": "base_units",
"lotSize": "1",
"min": "0.001",
"max": "100",
"step": "0.001"
},
"contractMultiplier": "1",
"minNotional": "10",
"ticks": [
{
"from": "0",
"to": null,
"size": "0.01"
}
],
"orderTypes": [
"market",
"limit"
],
"timeInForce": [
"gtc"
],
"mappings": [],
"sessions": {
"timezone": "UTC",
"coverageFrom": "2026-01-01",
"coverageThrough": "2026-12-31",
"weekly": [
{
"day": 0,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 1,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 2,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 3,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 4,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 5,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 6,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
}
],
"holidays": []
},
"expiresAt": null,
"lastTradeAt": null,
"pricing": {
"sourceId": "example-feed",
"stopTrigger": "last",
"maxAgeMs": 1000
},
"entitlement": null,
"state": "enabled"
},
"contentHash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"createdAt": "2026-09-14T12:00:00.000Z",
"state": "candidate",
"tradingReady": false
}
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Save an instrument candidate
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 venue:configure. Strictly validates executable facts and mappings. An identical idempotency-key retry recovers the same candidate; a changed body conflicts. A candidate does not change any existing trading account or active catalog. Maximum HTTP body 512 KiB; canonical specification maximum 256 KiB.
const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/instruments', {
method: 'POST',
headers: {
'content-type': 'application/json',
Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}`,
"Idempotency-Key": "example-request-1",
},
body: JSON.stringify({
"specification": {
"instrumentId": "BTCUSD",
"version": "v1",
"venueId": "00000000-0000-0000-0000-000000000001",
"symbol": "BTCUSD",
"name": "Bitcoin / USD",
"productModel": "linear_spot",
"quoteCurrency": "USD",
"settlementCurrency": "USD",
"negativePrices": false,
"quantity": {
"unit": "base_units",
"lotSize": "1",
"min": "0.001",
"max": "100",
"step": "0.001"
},
"contractMultiplier": "1",
"minNotional": "10",
"ticks": [
{
"from": "0",
"to": null,
"size": "0.01"
}
],
"orderTypes": [
"market",
"limit"
],
"timeInForce": [
"gtc"
],
"mappings": [],
"sessions": {
"timezone": "UTC",
"coverageFrom": "2026-01-01",
"coverageThrough": "2026-12-31",
"weekly": [
{
"day": 0,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 1,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 2,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 3,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 4,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 5,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 6,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
}
],
"holidays": []
},
"expiresAt": null,
"lastTradeAt": null,
"pricing": {
"sourceId": "example-feed",
"stopTrigger": "last",
"maxAgeMs": 1000
},
"entitlement": null,
"state": "enabled"
}
}),
})
const data = await res.json()curl -X POST 'https://app.trdrs.co/api/partner/venues/{venueId}/instruments' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY" \
-H 'Idempotency-Key: example-request-1' \
-H 'content-type: application/json' \
-d '{"specification":{"instrumentId":"BTCUSD","version":"v1","venueId":"00000000-0000-0000-0000-000000000001","symbol":"BTCUSD","name":"Bitcoin / USD","productModel":"linear_spot","quoteCurrency":"USD","settlementCurrency":"USD","negativePrices":false,"quantity":{"unit":"base_units","lotSize":"1","min":"0.001","max":"100","step":"0.001"},"contractMultiplier":"1","minNotional":"10","ticks":[{"from":"0","to":null,"size":"0.01"}],"orderTypes":["market","limit"],"timeInForce":["gtc"],"mappings":[],"sessions":{"timezone":"UTC","coverageFrom":"2026-01-01","coverageThrough":"2026-12-31","weekly":[{"day":0,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":1,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":2,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":3,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":4,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":5,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]},{"day":6,"windows":[{"startMinute":0,"endMinute":0,"endDayOffset":1}]}],"holidays":[]},"expiresAt":null,"lastTradeAt":null,"pricing":{"sourceId":"example-feed","stopTrigger":"last","maxAgeMs":1000},"entitlement":null,"state":"enabled"}}'import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/instruments"
payload = { "specification": {
"instrumentId": "BTCUSD",
"version": "v1",
"venueId": "00000000-0000-0000-0000-000000000001",
"symbol": "BTCUSD",
"name": "Bitcoin / USD",
"productModel": "linear_spot",
"quoteCurrency": "USD",
"settlementCurrency": "USD",
"negativePrices": False,
"quantity": {
"unit": "base_units",
"lotSize": "1",
"min": "0.001",
"max": "100",
"step": "0.001"
},
"contractMultiplier": "1",
"minNotional": "10",
"ticks": [
{
"from": "0",
"to": None,
"size": "0.01"
}
],
"orderTypes": ["market", "limit"],
"timeInForce": ["gtc"],
"mappings": [],
"sessions": {
"timezone": "UTC",
"coverageFrom": "2026-01-01",
"coverageThrough": "2026-12-31",
"weekly": [
{
"day": 0,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 1,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 2,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 3,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 4,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 5,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 6,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
}
],
"holidays": []
},
"expiresAt": None,
"lastTradeAt": None,
"pricing": {
"sourceId": "example-feed",
"stopTrigger": "last",
"maxAgeMs": 1000
},
"entitlement": None,
"state": "enabled"
} }
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}/instruments",
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([
'specification' => [
'instrumentId' => 'BTCUSD',
'version' => 'v1',
'venueId' => '00000000-0000-0000-0000-000000000001',
'symbol' => 'BTCUSD',
'name' => 'Bitcoin / USD',
'productModel' => 'linear_spot',
'quoteCurrency' => 'USD',
'settlementCurrency' => 'USD',
'negativePrices' => false,
'quantity' => [
'unit' => 'base_units',
'lotSize' => '1',
'min' => '0.001',
'max' => '100',
'step' => '0.001'
],
'contractMultiplier' => '1',
'minNotional' => '10',
'ticks' => [
[
'from' => '0',
'to' => null,
'size' => '0.01'
]
],
'orderTypes' => [
'market',
'limit'
],
'timeInForce' => [
'gtc'
],
'mappings' => [
],
'sessions' => [
'timezone' => 'UTC',
'coverageFrom' => '2026-01-01',
'coverageThrough' => '2026-12-31',
'weekly' => [
[
'day' => 0,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 1,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 2,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 3,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 4,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 5,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
],
[
'day' => 6,
'windows' => [
[
'startMinute' => 0,
'endMinute' => 0,
'endDayOffset' => 1
]
]
]
],
'holidays' => [
]
],
'expiresAt' => null,
'lastTradeAt' => null,
'pricing' => [
'sourceId' => 'example-feed',
'stopTrigger' => 'last',
'maxAgeMs' => 1000
],
'entitlement' => null,
'state' => 'enabled'
]
]),
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}/instruments"
payload := strings.NewReader("{\n \"specification\": {\n \"instrumentId\": \"BTCUSD\",\n \"version\": \"v1\",\n \"venueId\": \"00000000-0000-0000-0000-000000000001\",\n \"symbol\": \"BTCUSD\",\n \"name\": \"Bitcoin / USD\",\n \"productModel\": \"linear_spot\",\n \"quoteCurrency\": \"USD\",\n \"settlementCurrency\": \"USD\",\n \"negativePrices\": false,\n \"quantity\": {\n \"unit\": \"base_units\",\n \"lotSize\": \"1\",\n \"min\": \"0.001\",\n \"max\": \"100\",\n \"step\": \"0.001\"\n },\n \"contractMultiplier\": \"1\",\n \"minNotional\": \"10\",\n \"ticks\": [\n {\n \"from\": \"0\",\n \"to\": null,\n \"size\": \"0.01\"\n }\n ],\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"gtc\"\n ],\n \"mappings\": [],\n \"sessions\": {\n \"timezone\": \"UTC\",\n \"coverageFrom\": \"2026-01-01\",\n \"coverageThrough\": \"2026-12-31\",\n \"weekly\": [\n {\n \"day\": 0,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 1,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 2,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 3,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 4,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 5,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 6,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n }\n ],\n \"holidays\": []\n },\n \"expiresAt\": null,\n \"lastTradeAt\": null,\n \"pricing\": {\n \"sourceId\": \"example-feed\",\n \"stopTrigger\": \"last\",\n \"maxAgeMs\": 1000\n },\n \"entitlement\": null,\n \"state\": \"enabled\"\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}/instruments")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"specification\": {\n \"instrumentId\": \"BTCUSD\",\n \"version\": \"v1\",\n \"venueId\": \"00000000-0000-0000-0000-000000000001\",\n \"symbol\": \"BTCUSD\",\n \"name\": \"Bitcoin / USD\",\n \"productModel\": \"linear_spot\",\n \"quoteCurrency\": \"USD\",\n \"settlementCurrency\": \"USD\",\n \"negativePrices\": false,\n \"quantity\": {\n \"unit\": \"base_units\",\n \"lotSize\": \"1\",\n \"min\": \"0.001\",\n \"max\": \"100\",\n \"step\": \"0.001\"\n },\n \"contractMultiplier\": \"1\",\n \"minNotional\": \"10\",\n \"ticks\": [\n {\n \"from\": \"0\",\n \"to\": null,\n \"size\": \"0.01\"\n }\n ],\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"gtc\"\n ],\n \"mappings\": [],\n \"sessions\": {\n \"timezone\": \"UTC\",\n \"coverageFrom\": \"2026-01-01\",\n \"coverageThrough\": \"2026-12-31\",\n \"weekly\": [\n {\n \"day\": 0,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 1,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 2,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 3,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 4,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 5,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 6,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n }\n ],\n \"holidays\": []\n },\n \"expiresAt\": null,\n \"lastTradeAt\": null,\n \"pricing\": {\n \"sourceId\": \"example-feed\",\n \"stopTrigger\": \"last\",\n \"maxAgeMs\": 1000\n },\n \"entitlement\": null,\n \"state\": \"enabled\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/instruments")
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 \"specification\": {\n \"instrumentId\": \"BTCUSD\",\n \"version\": \"v1\",\n \"venueId\": \"00000000-0000-0000-0000-000000000001\",\n \"symbol\": \"BTCUSD\",\n \"name\": \"Bitcoin / USD\",\n \"productModel\": \"linear_spot\",\n \"quoteCurrency\": \"USD\",\n \"settlementCurrency\": \"USD\",\n \"negativePrices\": false,\n \"quantity\": {\n \"unit\": \"base_units\",\n \"lotSize\": \"1\",\n \"min\": \"0.001\",\n \"max\": \"100\",\n \"step\": \"0.001\"\n },\n \"contractMultiplier\": \"1\",\n \"minNotional\": \"10\",\n \"ticks\": [\n {\n \"from\": \"0\",\n \"to\": null,\n \"size\": \"0.01\"\n }\n ],\n \"orderTypes\": [\n \"market\",\n \"limit\"\n ],\n \"timeInForce\": [\n \"gtc\"\n ],\n \"mappings\": [],\n \"sessions\": {\n \"timezone\": \"UTC\",\n \"coverageFrom\": \"2026-01-01\",\n \"coverageThrough\": \"2026-12-31\",\n \"weekly\": [\n {\n \"day\": 0,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 1,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 2,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 3,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 4,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 5,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n },\n {\n \"day\": 6,\n \"windows\": [\n {\n \"startMinute\": 0,\n \"endMinute\": 0,\n \"endDayOffset\": 1\n }\n ]\n }\n ],\n \"holidays\": []\n },\n \"expiresAt\": null,\n \"lastTradeAt\": null,\n \"pricing\": {\n \"sourceId\": \"example-feed\",\n \"stopTrigger\": \"last\",\n \"maxAgeMs\": 1000\n },\n \"entitlement\": null,\n \"state\": \"enabled\"\n }\n}"
response = http.request(request)
puts response.read_body{
"instrument": {
"id": "00000000-0000-0000-0000-000000000001",
"venueId": "00000000-0000-0000-0000-000000000001",
"environment": "sandbox",
"specification": {
"instrumentId": "BTCUSD",
"version": "v1",
"venueId": "00000000-0000-0000-0000-000000000001",
"symbol": "BTCUSD",
"name": "Bitcoin / USD",
"productModel": "linear_spot",
"quoteCurrency": "USD",
"settlementCurrency": "USD",
"negativePrices": false,
"quantity": {
"unit": "base_units",
"lotSize": "1",
"min": "0.001",
"max": "100",
"step": "0.001"
},
"contractMultiplier": "1",
"minNotional": "10",
"ticks": [
{
"from": "0",
"to": null,
"size": "0.01"
}
],
"orderTypes": [
"market",
"limit"
],
"timeInForce": [
"gtc"
],
"mappings": [],
"sessions": {
"timezone": "UTC",
"coverageFrom": "2026-01-01",
"coverageThrough": "2026-12-31",
"weekly": [
{
"day": 0,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 1,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 2,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 3,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 4,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 5,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
},
{
"day": 6,
"windows": [
{
"startMinute": 0,
"endMinute": 0,
"endDayOffset": 1
}
]
}
],
"holidays": []
},
"expiresAt": null,
"lastTradeAt": null,
"pricing": {
"sourceId": "example-feed",
"stopTrigger": "last",
"maxAgeMs": 1000
},
"entitlement": null,
"state": "enabled"
},
"contentHash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"createdAt": "2026-09-14T12:00:00.000Z",
"state": "candidate",
"tradingReady": false
}
}{
"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
Immutable candidate only. No activation or execution admission. Quote and settlement currencies must match. Futures use contracts and require expiry/last-trade timestamps; spot uses base units. Quantity bounds must be step-aligned; non-lot lotSize is 1. Multiplier is 1 for base units and equals lotSize for lots. Tick bands are contiguous, zero-anchored and cover the full permitted price domain; null bounds mean infinity. Negative prices require futures. Weekly calendar includes all seven distinct days; holidays replace windows on their local opening date, including overnight windows. Overlapping windows and ambiguous/nonexistent daylight-saving boundaries are refused. Calendar coverage must be explicit. Mappings must belong to this venue and environment. The strict parser enforces cross-field rules beyond this structural schema.
Show child attributes
Show child attributes
Response
Scoped result. Cache-Control: no-store.
Show child attributes
Show child attributes