const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/provider-catalog/profiles', {
method: 'POST',
headers: {
'content-type': 'application/json',
Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}`,
"Idempotency-Key": "example-request-1",
},
body: JSON.stringify({
"profile": {
"name": "Example Pricing",
"blurb": "Test quotes",
"documentationUrl": "https://example.com/docs",
"connectionGuideUrl": "https://example.com/connect",
"contactEmail": "support@example.com",
"requirements": "Dedicated credentials",
"assetClasses": [
"forex"
],
"maintainerNote": "Maintained by Example"
}
}),
})
const data = await res.json()curl -X POST 'https://app.trdrs.co/api/partner/venues/{venueId}/provider-catalog/profiles' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY" \
-H 'Idempotency-Key: example-request-1' \
-H 'content-type: application/json' \
-d '{"profile":{"name":"Example Pricing","blurb":"Test quotes","documentationUrl":"https://example.com/docs","connectionGuideUrl":"https://example.com/connect","contactEmail":"support@example.com","requirements":"Dedicated credentials","assetClasses":["forex"],"maintainerNote":"Maintained by Example"}}'import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/provider-catalog/profiles"
payload = { "profile": {
"name": "Example Pricing",
"blurb": "Test quotes",
"documentationUrl": "https://example.com/docs",
"connectionGuideUrl": "https://example.com/connect",
"contactEmail": "support@example.com",
"requirements": "Dedicated credentials",
"assetClasses": ["forex"],
"maintainerNote": "Maintained by Example"
} }
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}/provider-catalog/profiles",
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([
'profile' => [
'name' => 'Example Pricing',
'blurb' => 'Test quotes',
'documentationUrl' => 'https://example.com/docs',
'connectionGuideUrl' => 'https://example.com/connect',
'contactEmail' => 'support@example.com',
'requirements' => 'Dedicated credentials',
'assetClasses' => [
'forex'
],
'maintainerNote' => 'Maintained by Example'
]
]),
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}/provider-catalog/profiles"
payload := strings.NewReader("{\n \"profile\": {\n \"name\": \"Example Pricing\",\n \"blurb\": \"Test quotes\",\n \"documentationUrl\": \"https://example.com/docs\",\n \"connectionGuideUrl\": \"https://example.com/connect\",\n \"contactEmail\": \"support@example.com\",\n \"requirements\": \"Dedicated credentials\",\n \"assetClasses\": [\n \"forex\"\n ],\n \"maintainerNote\": \"Maintained by Example\"\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}/provider-catalog/profiles")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"profile\": {\n \"name\": \"Example Pricing\",\n \"blurb\": \"Test quotes\",\n \"documentationUrl\": \"https://example.com/docs\",\n \"connectionGuideUrl\": \"https://example.com/connect\",\n \"contactEmail\": \"support@example.com\",\n \"requirements\": \"Dedicated credentials\",\n \"assetClasses\": [\n \"forex\"\n ],\n \"maintainerNote\": \"Maintained by Example\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/provider-catalog/profiles")
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 \"profile\": {\n \"name\": \"Example Pricing\",\n \"blurb\": \"Test quotes\",\n \"documentationUrl\": \"https://example.com/docs\",\n \"connectionGuideUrl\": \"https://example.com/connect\",\n \"contactEmail\": \"support@example.com\",\n \"requirements\": \"Dedicated credentials\",\n \"assetClasses\": [\n \"forex\"\n ],\n \"maintainerNote\": \"Maintained by Example\"\n }\n}"
response = http.request(request)
puts response.read_body{
"company": {
"id": "00000000-0000-0000-0000-000000000001",
"name": "Example Pricing",
"blurb": "Test quotes",
"logoUrl": null,
"logoBleed": false,
"referralUrl": null,
"sortOrder": 100,
"kind": "market",
"builtInProvider": null,
"connectsTraders": false,
"pluggable": false,
"runsVenue": false,
"listingState": "draft",
"enabled": true,
"createdAt": "2026-09-14T12:00:00.000Z",
"updatedAt": "2026-09-14T12:00:00.000Z"
},
"profile": {
"companyId": "00000000-0000-0000-0000-000000000001",
"organizationId": "00000000-0000-0000-0000-000000000001",
"documentationUrl": "https://example.com/docs",
"connectionGuideUrl": "https://example.com/connect",
"contactEmail": "support@example.com",
"requirements": "Dedicated credentials",
"assetClasses": [
"forex"
],
"maintainerNote": "Maintained by Example",
"visibility": "private",
"version": 1
}
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Create a private provider profile
Preview: served on the sandbox to every venue, and production availability is arranged when a venue qualifies. Trading API keys and Partner keys do not authorize these routes. Provider directory publication is separate from execution qualification, trader Connect and private customer connections. No credential, private endpoint or account binding is published. Profile changes hide the listing until a release for the new profile version is reviewed. Every write requires Idempotency-Key; an identical retry returns its original result, a changed body refuses with idempotency_conflict. Required scope: provider:manage. Requires an organization owner and provider:manage. Creates one canonical company brand, with no Connect role.
const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/provider-catalog/profiles', {
method: 'POST',
headers: {
'content-type': 'application/json',
Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}`,
"Idempotency-Key": "example-request-1",
},
body: JSON.stringify({
"profile": {
"name": "Example Pricing",
"blurb": "Test quotes",
"documentationUrl": "https://example.com/docs",
"connectionGuideUrl": "https://example.com/connect",
"contactEmail": "support@example.com",
"requirements": "Dedicated credentials",
"assetClasses": [
"forex"
],
"maintainerNote": "Maintained by Example"
}
}),
})
const data = await res.json()curl -X POST 'https://app.trdrs.co/api/partner/venues/{venueId}/provider-catalog/profiles' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY" \
-H 'Idempotency-Key: example-request-1' \
-H 'content-type: application/json' \
-d '{"profile":{"name":"Example Pricing","blurb":"Test quotes","documentationUrl":"https://example.com/docs","connectionGuideUrl":"https://example.com/connect","contactEmail":"support@example.com","requirements":"Dedicated credentials","assetClasses":["forex"],"maintainerNote":"Maintained by Example"}}'import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/provider-catalog/profiles"
payload = { "profile": {
"name": "Example Pricing",
"blurb": "Test quotes",
"documentationUrl": "https://example.com/docs",
"connectionGuideUrl": "https://example.com/connect",
"contactEmail": "support@example.com",
"requirements": "Dedicated credentials",
"assetClasses": ["forex"],
"maintainerNote": "Maintained by Example"
} }
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}/provider-catalog/profiles",
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([
'profile' => [
'name' => 'Example Pricing',
'blurb' => 'Test quotes',
'documentationUrl' => 'https://example.com/docs',
'connectionGuideUrl' => 'https://example.com/connect',
'contactEmail' => 'support@example.com',
'requirements' => 'Dedicated credentials',
'assetClasses' => [
'forex'
],
'maintainerNote' => 'Maintained by Example'
]
]),
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}/provider-catalog/profiles"
payload := strings.NewReader("{\n \"profile\": {\n \"name\": \"Example Pricing\",\n \"blurb\": \"Test quotes\",\n \"documentationUrl\": \"https://example.com/docs\",\n \"connectionGuideUrl\": \"https://example.com/connect\",\n \"contactEmail\": \"support@example.com\",\n \"requirements\": \"Dedicated credentials\",\n \"assetClasses\": [\n \"forex\"\n ],\n \"maintainerNote\": \"Maintained by Example\"\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}/provider-catalog/profiles")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"profile\": {\n \"name\": \"Example Pricing\",\n \"blurb\": \"Test quotes\",\n \"documentationUrl\": \"https://example.com/docs\",\n \"connectionGuideUrl\": \"https://example.com/connect\",\n \"contactEmail\": \"support@example.com\",\n \"requirements\": \"Dedicated credentials\",\n \"assetClasses\": [\n \"forex\"\n ],\n \"maintainerNote\": \"Maintained by Example\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/provider-catalog/profiles")
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 \"profile\": {\n \"name\": \"Example Pricing\",\n \"blurb\": \"Test quotes\",\n \"documentationUrl\": \"https://example.com/docs\",\n \"connectionGuideUrl\": \"https://example.com/connect\",\n \"contactEmail\": \"support@example.com\",\n \"requirements\": \"Dedicated credentials\",\n \"assetClasses\": [\n \"forex\"\n ],\n \"maintainerNote\": \"Maintained by Example\"\n }\n}"
response = http.request(request)
puts response.read_body{
"company": {
"id": "00000000-0000-0000-0000-000000000001",
"name": "Example Pricing",
"blurb": "Test quotes",
"logoUrl": null,
"logoBleed": false,
"referralUrl": null,
"sortOrder": 100,
"kind": "market",
"builtInProvider": null,
"connectsTraders": false,
"pluggable": false,
"runsVenue": false,
"listingState": "draft",
"enabled": true,
"createdAt": "2026-09-14T12:00:00.000Z",
"updatedAt": "2026-09-14T12:00:00.000Z"
},
"profile": {
"companyId": "00000000-0000-0000-0000-000000000001",
"organizationId": "00000000-0000-0000-0000-000000000001",
"documentationUrl": "https://example.com/docs",
"connectionGuideUrl": "https://example.com/connect",
"contactEmail": "support@example.com",
"requirements": "Dedicated credentials",
"assetClasses": [
"forex"
],
"maintainerNote": "Maintained by Example",
"visibility": "private",
"version": 1
}
}{
"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
The Venue key (trdrs_vk_sandbox_… or trdrs_vk_production_…), in preview. It belongs to one venue in one environment and carries the scopes it was created with. The venue's verified owner creates it while signed in, and it works only on the /api/partner/venues/{venueId} routes. A trdrs_sk_… key can't be used in its place. It never lets you act as a trader, sign in or manage keys. Keep it on your server.
Headers
A key you choose, 1 to 128 characters, that identifies this write. Send the same key when you retry it, so the write is never applied twice.
1 - 128Path Parameters
Body
Show child attributes
Show child attributes
Response
Success. The response is sent with Cache-Control: no-store, so don't cache it.
A company on trdrs, with the roles it plays: traders connect their own accounts through it (connectsTraders), a venue can plug it in as a provider (pluggable), or it runs a venue (runsVenue). Where the company appears follows from those roles. Each of the six built-in providers is a company with builtInProvider set, and a company holds its brand and listing state.
Show child attributes
Show child attributes
Show child attributes
Show child attributes