// 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/operator/venues/{venueId}/brand/logo', {
method: 'POST',
headers: {
'content-type': 'application/json',
},
credentials: 'include',
body: JSON.stringify({
"data": "iVBORw0KGgo…",
"expectedUpdatedAt": "2026-09-14T12:00:00.000Z"
}),
})
const data = await res.json()curl -X POST 'https://app.trdrs.co/api/operator/venues/{venueId}/brand/logo' \
-b "session=$TRDRS_SESSION" \
-H 'content-type: application/json' \
-d '{"data":"iVBORw0KGgo…","expectedUpdatedAt":"2026-09-14T12:00:00.000Z"}'import requests
url = "https://app.trdrs.co/api/operator/venues/{venueId}/brand/logo"
payload = {
"data": "iVBORw0KGgo…",
"expectedUpdatedAt": "2026-09-14T12:00:00.000Z"
}
headers = {
"cookie": "session=",
"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/operator/venues/{venueId}/brand/logo",
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([
'data' => 'iVBORw0KGgo…',
'expectedUpdatedAt' => '2026-09-14T12:00:00.000Z'
]),
CURLOPT_COOKIE => "session=",
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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/operator/venues/{venueId}/brand/logo"
payload := strings.NewReader("{\n \"data\": \"iVBORw0KGgo…\",\n \"expectedUpdatedAt\": \"2026-09-14T12:00:00.000Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cookie", "session=")
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/operator/venues/{venueId}/brand/logo")
.header("cookie", "session=")
.header("Content-Type", "application/json")
.body("{\n \"data\": \"iVBORw0KGgo…\",\n \"expectedUpdatedAt\": \"2026-09-14T12:00:00.000Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/operator/venues/{venueId}/brand/logo")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["cookie"] = 'session='
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": \"iVBORw0KGgo…\",\n \"expectedUpdatedAt\": \"2026-09-14T12:00:00.000Z\"\n}"
response = http.request(request)
puts response.read_body{
"brand": {
"companyId": "00000000-0000-0000-0000-000000000001",
"name": "Meridian Evaluation",
"description": "Futures evaluations on the paper book",
"logoUrl": "/api/connect/companies/00000000-0000-0000-0000-000000000001/logo.png",
"logoBleed": true,
"listingState": "draft",
"updatedAt": "2026-09-14T12:00:00.000Z"
},
"logo": {
"width": 512,
"height": 512,
"bleed": true
}
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Upload the venue logo
Preview: served on the sandbox to every venue; production availability is arranged when a venue qualifies. Trading API keys and Partner keys do not authorize these routes. Requires a verified authorized operator session; writes require a trusted origin. venue:configure. Accepts one base64 PNG, at most 512 KiB and 256–1024 square pixels. expectedUpdatedAt is the timestamp from the last brand read; stale writes return version_conflict, while an exact retry of the same sanitized image succeeds. The engine strips ancillary metadata, measures whether the art reaches its edges, stores its own copy and returns the resulting brand.
// 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/operator/venues/{venueId}/brand/logo', {
method: 'POST',
headers: {
'content-type': 'application/json',
},
credentials: 'include',
body: JSON.stringify({
"data": "iVBORw0KGgo…",
"expectedUpdatedAt": "2026-09-14T12:00:00.000Z"
}),
})
const data = await res.json()curl -X POST 'https://app.trdrs.co/api/operator/venues/{venueId}/brand/logo' \
-b "session=$TRDRS_SESSION" \
-H 'content-type: application/json' \
-d '{"data":"iVBORw0KGgo…","expectedUpdatedAt":"2026-09-14T12:00:00.000Z"}'import requests
url = "https://app.trdrs.co/api/operator/venues/{venueId}/brand/logo"
payload = {
"data": "iVBORw0KGgo…",
"expectedUpdatedAt": "2026-09-14T12:00:00.000Z"
}
headers = {
"cookie": "session=",
"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/operator/venues/{venueId}/brand/logo",
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([
'data' => 'iVBORw0KGgo…',
'expectedUpdatedAt' => '2026-09-14T12:00:00.000Z'
]),
CURLOPT_COOKIE => "session=",
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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/operator/venues/{venueId}/brand/logo"
payload := strings.NewReader("{\n \"data\": \"iVBORw0KGgo…\",\n \"expectedUpdatedAt\": \"2026-09-14T12:00:00.000Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cookie", "session=")
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/operator/venues/{venueId}/brand/logo")
.header("cookie", "session=")
.header("Content-Type", "application/json")
.body("{\n \"data\": \"iVBORw0KGgo…\",\n \"expectedUpdatedAt\": \"2026-09-14T12:00:00.000Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/operator/venues/{venueId}/brand/logo")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["cookie"] = 'session='
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": \"iVBORw0KGgo…\",\n \"expectedUpdatedAt\": \"2026-09-14T12:00:00.000Z\"\n}"
response = http.request(request)
puts response.read_body{
"brand": {
"companyId": "00000000-0000-0000-0000-000000000001",
"name": "Meridian Evaluation",
"description": "Futures evaluations on the paper book",
"logoUrl": "/api/connect/companies/00000000-0000-0000-0000-000000000001/logo.png",
"logoBleed": true,
"listingState": "draft",
"updatedAt": "2026-09-14T12:00:00.000Z"
},
"logo": {
"width": 512,
"height": 512,
"bleed": true
}
}{
"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 signed session cookie of a logged-in trdrs user. First-party/browser only; an API key cannot reach a route secured this way.
Path Parameters
Body
Response
Scoped result. Cache-Control: no-store.