curl
curl "https://api.arcus.xyz/v1/l2OrderBook/BTC-USD?nLevels=20"import requests
r = requests.get(
"https://api.arcus.xyz/v1/l2OrderBook/BTC-USD",
params={"nLevels": 20},
)
print(r.json())
const url = new URL("https://api.arcus.xyz/v1/l2OrderBook/BTC-USD");
url.searchParams.set("nLevels", "20");
const res = await fetch(url);
console.log(await res.json());
const options = {method: 'GET'};
fetch('https://api.arcus.xyz/v1/l2OrderBook/{market}', 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/l2OrderBook/{market}",
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/l2OrderBook/{market}"
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/l2OrderBook/{market}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/l2OrderBook/{market}")
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{
"bids": [
[
"<string>"
]
],
"asks": [
[
"<string>"
]
],
"lastSequenceId": 123,
"globalSequenceId": 123,
"timestamp": 123
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED"
}{
"error": "rate limited",
"reason": "account_empty",
"retryAfterMs": 850,
"clientId": "my-order-42"
}Public
Get L2 orderbook snapshot
Returns the current L2 orderbook snapshot for a market, truncated to the requested number of levels per side.
GET
/
v1
/
l2OrderBook
/
{market}
curl
curl "https://api.arcus.xyz/v1/l2OrderBook/BTC-USD?nLevels=20"import requests
r = requests.get(
"https://api.arcus.xyz/v1/l2OrderBook/BTC-USD",
params={"nLevels": 20},
)
print(r.json())
const url = new URL("https://api.arcus.xyz/v1/l2OrderBook/BTC-USD");
url.searchParams.set("nLevels", "20");
const res = await fetch(url);
console.log(await res.json());
const options = {method: 'GET'};
fetch('https://api.arcus.xyz/v1/l2OrderBook/{market}', 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/l2OrderBook/{market}",
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/l2OrderBook/{market}"
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/l2OrderBook/{market}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/l2OrderBook/{market}")
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{
"bids": [
[
"<string>"
]
],
"asks": [
[
"<string>"
]
],
"lastSequenceId": 123,
"globalSequenceId": 123,
"timestamp": 123
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED"
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED"
}{
"error": "rate limited",
"reason": "account_empty",
"retryAfterMs": 850,
"clientId": "my-order-42"
}The response body shown here is a static example, not live data. After you click Send, your live result appears in a separate panel headed 200 OK. The panel under the status-code tabs is a fixed sample from the spec — its field values (fees, prices, sizes, IDs, timestamps) are placeholders. Use Send, or call the endpoint, for current values.
sigFigs (and roundStep). When aggregating, bids round down and asks round up to the bucket boundary so the displayed spread is never tighter than the true book, and the sizes of all merged levels are summed. Aggregation is applied before nLevels truncation.Query Parameters
Response
Orderbook snapshot.
Full orderbook snapshot. Sent on subscribe for l2OrderbookUpdates, periodically re-broadcast on l2Orderbook, and returned by GET /l2OrderBook/{market}.
Was this page helpful?