curl --request GET \
--url https://builder.prod.bedrock.ostium.io/v1/depth/{pair}import requests
url = "https://builder.prod.bedrock.ostium.io/v1/depth/{pair}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://builder.prod.bedrock.ostium.io/v1/depth/{pair}', 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://builder.prod.bedrock.ostium.io/v1/depth/{pair}",
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://builder.prod.bedrock.ostium.io/v1/depth/{pair}"
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://builder.prod.bedrock.ostium.io/v1/depth/{pair}")
.asString();require 'uri'
require 'net/http'
url = URI("https://builder.prod.bedrock.ostium.io/v1/depth/{pair}")
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{
"pair": "ADA-USD",
"mid": 0.18299,
"asks": [
{
"cumSizeUsd": 5000,
"cumAvgPrice": 0.182935,
"impactBps": 0.56
},
{
"cumSizeUsd": 10000,
"cumAvgPrice": 0.182971,
"impactBps": 1.12
}
],
"bids": [
{
"cumSizeUsd": 5000,
"cumAvgPrice": 0.182845,
"impactBps": 0.56
},
{
"cumSizeUsd": 10000,
"cumAvgPrice": 0.182809,
"impactBps": 1.12
}
],
"maxNotionalUsd": 1000000,
"availableNotionalUsd": {
"bid": 610900,
"ask": 587700
},
"openInterest": {
"longUsd": 412300,
"shortUsd": 389100,
"capUsd": 1000000
},
"topOfBook": {
"bid": 0.18291,
"ask": 0.18306
},
"priceTimestampMs": 1787198161000
}{
"error": "Bad Request",
"message": "Validation failed",
"issues": [
"<unknown>"
],
"details": "<unknown>"
}{
"error": "Bad Request",
"message": "Validation failed",
"issues": [
"<unknown>"
],
"details": "<unknown>"
}{
"error": "Bad Request",
"message": "Validation failed",
"issues": [
"<unknown>"
],
"details": "<unknown>"
}Price across a range of trade sizes
The same impact model as /v1/depth/{pair}/quote, walked into a ladder so it reads like an order book. asks is buying (long), bids is selling (short); both ascend in notional out to maxNotionalUsd.
cumSizeUsd is cumulative: each level prices one trade of that full size, not an increment on the level below. Summing levels is meaningless.
maxNotionalUsd is the pair’s max open interest, or its current OI where that is larger — the same extent the trading UI’s depth chart draws.
levels only sets sampling density. The underlying curve is piecewise linear — flat until volume crosses the pair’s threshold, then a straight line — so a higher count draws a smoother chart but adds almost no information. Some pairs return one repeated price, when their threshold exceeds their own OI cap.
Either pair spelling is accepted, as with the quote route.
Rate limit: 100 requests per 10 seconds per IP. Read x-ratelimit-* for the live budget rather than assuming this figure.
curl --request GET \
--url https://builder.prod.bedrock.ostium.io/v1/depth/{pair}import requests
url = "https://builder.prod.bedrock.ostium.io/v1/depth/{pair}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://builder.prod.bedrock.ostium.io/v1/depth/{pair}', 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://builder.prod.bedrock.ostium.io/v1/depth/{pair}",
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://builder.prod.bedrock.ostium.io/v1/depth/{pair}"
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://builder.prod.bedrock.ostium.io/v1/depth/{pair}")
.asString();require 'uri'
require 'net/http'
url = URI("https://builder.prod.bedrock.ostium.io/v1/depth/{pair}")
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{
"pair": "ADA-USD",
"mid": 0.18299,
"asks": [
{
"cumSizeUsd": 5000,
"cumAvgPrice": 0.182935,
"impactBps": 0.56
},
{
"cumSizeUsd": 10000,
"cumAvgPrice": 0.182971,
"impactBps": 1.12
}
],
"bids": [
{
"cumSizeUsd": 5000,
"cumAvgPrice": 0.182845,
"impactBps": 0.56
},
{
"cumSizeUsd": 10000,
"cumAvgPrice": 0.182809,
"impactBps": 1.12
}
],
"maxNotionalUsd": 1000000,
"availableNotionalUsd": {
"bid": 610900,
"ask": 587700
},
"openInterest": {
"longUsd": 412300,
"shortUsd": 389100,
"capUsd": 1000000
},
"topOfBook": {
"bid": 0.18291,
"ask": 0.18306
},
"priceTimestampMs": 1787198161000
}{
"error": "Bad Request",
"message": "Validation failed",
"issues": [
"<unknown>"
],
"details": "<unknown>"
}{
"error": "Bad Request",
"message": "Validation failed",
"issues": [
"<unknown>"
],
"details": "<unknown>"
}{
"error": "Bad Request",
"message": "Validation failed",
"issues": [
"<unknown>"
],
"details": "<unknown>"
}Path Parameters
Trading pair as BASE-QUOTE, e.g. BTC-USD or FTSE-GBP
^[A-Z0-9]+-[A-Z0-9]+$Query Parameters
Number of price levels per side
1 <= x <= 100Response
Ladder for both sides
Taker buy
Show child attributes
Show child attributes
Taker sell
Show child attributes
Show child attributes
Where both ladders stop — the pair's OI ceiling, or current OI where that is larger. Shared across sides, so asks[i] and bids[i] price the same size and spread-at-size is one subtraction.
Remaining OI capacity per side. Deep levels can exceed these — the ladder is the whole impact curve, and this is how much of it is reachable now.
Show child attributes
Show child attributes
Raw open interest behind those numbers
Show child attributes
Show child attributes
Show child attributes
Show child attributes