Trading API
Stream
Short-lived tickets for the WebSocket stream (quotes + account / execution events).
POST/api/open/v1/stream_ticket
#A 60-second single-use ticket for the WebSocket: wss://api.your-brand.com/rt/v1/ws?ticket=... (a read-only key is enough; 403 websocket_disabled unless OPEN_API_WS)
Auth X-API-Key Trading API
Responses
201
OK
400
Bad request (invalid_json)
401
No / invalid / revoked / expired API key
403
Refused (IP, scope, brand switch, kill switch, account, inactive client)
404
Not found (also every path while the Open API is off on this server)
422
Invalid request or refused by the order checks (margin, levels, size, market closed ...)
429
Rate limited (Retry-After)
500
Internal error; unknown_outcome = look the order up before sending it again
503
Temporarily unavailable (prices, balance, quotes, rate-limit store)
curl -X POST "https://api.your-brand.com/api/open/v1/stream_ticket" \
-H "X-API-Key: $OCTOLIT_API_KEY"const res = await fetch("https://api.your-brand.com/api/open/v1/stream_ticket", {
method: "POST",
headers: {
"X-API-Key": process.env.OCTOLIT_API_KEY,
},
});
if (!res.ok) throw new Error(`POST failed: ${res.status} ${await res.text()}`);
const data = await res.json();
console.log(data);import os, requests
r = requests.request(
"POST",
"https://api.your-brand.com/api/open/v1/stream_ticket",
headers={"X-API-Key": os.environ["OCTOLIT_API_KEY"]},
timeout=10,
)
r.raise_for_status()
print(r.json())<?php
$ch = curl_init("https://api.your-brand.com/api/open/v1/stream_ticket");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-API-Key: " . getenv("OCTOLIT_API_KEY"),
],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($data);using var http = new HttpClient();
using var req = new HttpRequestMessage(HttpMethod.Post, "https://api.your-brand.com/api/open/v1/stream_ticket");
req.Headers.Add("X-API-Key", Environment.GetEnvironmentVariable("OCTOLIT_API_KEY"));
using var res = await http.SendAsync(req);
res.EnsureSuccessStatusCode();
Console.WriteLine(await res.Content.ReadAsStringAsync());var client = HttpClient.newHttpClient();
var req = HttpRequest.newBuilder(URI.create("https://api.your-brand.com/api/open/v1/stream_ticket"))
.header("X-API-Key", System.getenv("OCTOLIT_API_KEY"))
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
var res = client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.statusCode() + " " + res.body());var body io.Reader
req, err := http.NewRequest("POST", "https://api.your-brand.com/api/open/v1/stream_ticket", body)
if err != nil {
log.Fatal(err)
}
req.Header.Set("X-API-Key", os.Getenv("OCTOLIT_API_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.StatusCode, string(out))var req = URLRequest(url: URL(string: "https://api.your-brand.com/api/open/v1/stream_ticket")!)
req.httpMethod = "POST"
req.setValue(ProcessInfo.processInfo.environment["OCTOLIT_API_KEY"], forHTTPHeaderField: "X-API-Key")
let (data, response) = try await URLSession.shared.data(for: req)
print((response as! HTTPURLResponse).statusCode, String(decoding: data, as: UTF8.self))val client = OkHttpClient()
val req = Request.Builder()
.url("https://api.your-brand.com/api/open/v1/stream_ticket")
.header("X-API-Key", System.getenv("OCTOLIT_API_KEY"))
.method("POST", null)
.build()
client.newCall(req).execute().use { res ->
println("${res.code} ${res.body?.string()}")
} Response 201
{
"ticket": "st_...",
"exp": 1,
"expires_in": 60,
"url": "https://trade.your-brand.com/login?token=...",
"single_use": true
}