curl "https://api.arcus.xyz/v1/trade/12345?market=BTC-USD"import requests
r = requests.get(
"https://api.arcus.xyz/v1/trade/12345",
params={"market": "BTC-USD"},
)
print(r.json())
const url = new URL("https://api.arcus.xyz/v1/trade/12345");
url.searchParams.set("market", "BTC-USD");
const res = await fetch(url);
console.log(await res.json());
const options = {method: 'GET'};
fetch('https://api.arcus.xyz/v1/trade/{tradeId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.arcus.xyz/v1/trade/{tradeId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.arcus.xyz/v1/trade/{tradeId}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.arcus.xyz/v1/trade/{tradeId}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/trade/{tradeId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"marketId": 0,
"marketDisplayName": "BTC-USD",
"side": "BUY",
"price": "94500.00",
"size": "0.25",
"tradeId": "12345",
"timestamp": 1712345678000000,
"takerOrderId": "abc-123...",
"takerAddress": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"makerOrderId": "def-456...",
"makerAddress": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8",
"sequenceNumber": 9991234
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "rate limited",
"reason": "account_empty",
"retryAfterMs": 850,
"clientId": "my-order-42"
}Get a single trade by ID
Returns one trade row. The market query parameter is required: trades_by_market is partitioned by market_id first, so without it the lookup would scan every market’s parts.
curl "https://api.arcus.xyz/v1/trade/12345?market=BTC-USD"import requests
r = requests.get(
"https://api.arcus.xyz/v1/trade/12345",
params={"market": "BTC-USD"},
)
print(r.json())
const url = new URL("https://api.arcus.xyz/v1/trade/12345");
url.searchParams.set("market", "BTC-USD");
const res = await fetch(url);
console.log(await res.json());
const options = {method: 'GET'};
fetch('https://api.arcus.xyz/v1/trade/{tradeId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.arcus.xyz/v1/trade/{tradeId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.arcus.xyz/v1/trade/{tradeId}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.arcus.xyz/v1/trade/{tradeId}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/trade/{tradeId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"marketId": 0,
"marketDisplayName": "BTC-USD",
"side": "BUY",
"price": "94500.00",
"size": "0.25",
"tradeId": "12345",
"timestamp": 1712345678000000,
"takerOrderId": "abc-123...",
"takerAddress": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"makerOrderId": "def-456...",
"makerAddress": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8",
"sequenceNumber": 9991234
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED",
"errorSource": "Order",
"errorType": "Tick",
"rejectionReason": "POST_ONLY_WOULD_CROSS"
}{
"error": "rate limited",
"reason": "account_empty",
"retryAfterMs": 850,
"clientId": "my-order-42"
}market query parameter is required: trades_by_market is partitioned by market_id first, so without it the lookup would scan every market’s parts.Path Parameters
Unique trade identifier.
"12345"
Query Parameters
Market identifier, e.g. "BTC-USD".
"BTC-USD"
Response
Trade.
One public-trades fill row — one row per maker/taker pairing. Returned by GET /v1/trades (newest-first array) and by the trades WebSocket channel (one frame per taker match, with one row per pairing inside).
On the WS trades channel the update payload is an array of these rows, all built from a single taker match; takerOrderId, takerAddress, timestamp, and sequenceNumber repeat on every row.
Perpetual market identifier (uint16). Map to display name via GET /markets.
0 <= x <= 655350
Market symbol (e.g. BTC-USD).
"BTC-USD"
Taker side.
BUY, SELL Fill price in human-readable USD (decimal string).
"94500.00"
Fill size in human-readable base-asset units (decimal string).
"0.25"
Unique trade identifier.
"12345"
Fill timestamp (epoch microseconds).
1712345678000000
Server-generated order ID of the taker order.
"abc-123..."
Checksummed Ethereum address of the taker account.
"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"
Server-generated order ID of the maker order.
"def-456..."
Checksummed Ethereum address of the maker account.
"0x70997970C51812dc3A010C7d01b50e0d17dc79C8"
Monotonically increasing sequence number for ordering and gap detection.
9991234
Was this page helpful?