DepthSignal API Documentation
Customer API-key access is documented. Issuance requires enabled API access and an eligible account; signup or plan selection does not issue a key.
Derivatives coverage is documented. Availability depends on enabled analytics, plan scope and current source data; collecting inputs alone does not establish customer access.
Looking for the platform? Go to /platform. This page is for developers building with the DepthSignal API.
The authoritative reference for the DepthSignal API. This page describes market-context endpoints; exchange sources and historical windows are covered only where admitted and verified for the current release.
Quick Start
These steps illustrate documented request shapes, not a verified customer API response. Requests require enabled API access and an authorized key with the appropriate scope.
Step 1: Check account access
Platform access is controlled separately from API access. Verified customers can create accounts now; we email you when platform sign-in opens. Neither path issues a customer API key.
Step 2: API key handling (reference only)
Customer API-key access is documented. Issuance requires enabled API access and an eligible account; signup or plan selection does not issue a key. This placeholder illustrates keeping an authorized key out of source code.
# Linux / macOS
export DEPTHSIGNAL_API_KEY="sk_live_..."
# Windows PowerShell
$env:DEPTHSIGNAL_API_KEY = "sk_live_..."
# .env file (for frameworks / Docker)
DEPTHSIGNAL_API_KEY=sk_live_...Step 3: Example request shape
curl -H "X-API-Key: $DEPTHSIGNAL_API_KEY" \
https://api.depthsignal.io/v1/orderbook/features/BTCUSDTThis is an illustrative response shape, not a live response or availability statement. Feature fields and freshness metadata depend on the documented backend response path.
{
"symbol": "BTC/USDT",
"features": {
"binance": {
"bid_ask_spread": 0.00012,
"depth_imbalance": 0.15,
"order_flow_imbalance": 0.08,
"order_flow_imbalance_proxy": 0.42,
"price_impact_coefficient": 0.0034,
"book_pressure": 1.23,
"weighted_mid_offset": -0.0001,
"manip_risk": 0.12
}
},
"data_freshness": {
"binance": { "age_seconds": 1.4, "is_stale": false }
},
"tier": "professional",
"timestamp": "2026-03-05T14:22:01.123Z"
}Field meanings are in the Glossary below.
Language Quick Start
Copy, paste, run. Python requires requests (pip install requests). JavaScript uses the built-in fetch API (Node 18+).
JavaScript
import os
import requests
API_KEY = os.environ.get("DEPTHSIGNAL_API_KEY", "your_api_key_here")
BASE = "https://api.depthsignal.io"
HEADERS = {"X-API-Key": API_KEY}
def get_features(symbol: str) -> dict:
"""Fetch orderbook features for a symbol across all exchanges."""
r = requests.get(f"{BASE}/v1/orderbook/features/{symbol}", headers=HEADERS)
r.raise_for_status()
return r.json()
def get_composites(symbol: str) -> dict:
"""Fetch the 5 composite reads (Trader+ tier)."""
r = requests.get(f"{BASE}/v1/orderbook/composite/{symbol}", headers=HEADERS)
r.raise_for_status()
return r.json()
def get_liquidations(symbol: str) -> dict:
"""Fetch real-time liquidation metrics (Trader+ tier)."""
r = requests.get(f"{BASE}/v1/flow/liquidations/{symbol}", headers=HEADERS)
r.raise_for_status()
return r.json()
# -- Orderbook Features ---------------------------------------------------
data = get_features("BTCUSDT")
for exchange, features in data["features"].items():
print(f"\n--- {exchange} ---")
print(f" Spread: {features.get('bid_ask_spread', 'N/A')}")
print(f" Large-Order Pressure: {features.get('order_flow_imbalance_proxy', 'N/A')}")
print(f" Price Impact: {features.get('price_impact_coefficient', 'N/A')}")
print(f" Flow Imbalance: {features.get('order_flow_imbalance', 'N/A')}")
print(f" Manip Risk: {features.get('manip_risk', 'N/A')}")
# -- Composite Reads -------------------------------------------------------
composites = get_composites("BTCUSDT")
for read, value in composites.get("composites", {}).items():
print(f" {read}: {value}")
# -- Liquidation Data ------------------------------------------------------
liq = get_liquidations("BTCUSDT")
print(f" Cascade Stress: {liq.get('cascade_risk', 'N/A')}")
print(f" Liq Rate/min: {liq.get('rate_per_minute', 'N/A')}")Full API Reference
Base URL: https://api.depthsignal.io. All authenticated endpoints require the X-API-Key header.
/v1/orderbook/features/{symbol}Documents an orderbook analysis response shape broken down by exchange. Customer API-key access is documented. Issuance requires enabled API access and an eligible account; signup or plan selection does not issue a key.
Response shape
{
"symbol": "BTC/USDT",
"features": {
"<exchange>": {
"bid_ask_spread": 0.00012,
"depth_imbalance": 0.15,
"order_flow_imbalance": 0.08,
"book_pressure": 1.23,
"weighted_mid_offset": -0.0001,
"bid_depth_ratio": 0.52,
"top_level_size_ratio": 0.85,
"spread_volatility": 0.0003,
// Professional+ features:
"order_flow_imbalance_proxy": 0.42,
"price_impact_coefficient": 0.0034,
"level_ofi_1": 0.1,
"level_ofi_2": -0.05,
"level_ofi_3": 0.02,
"level_ofi_4": 0.0,
"level_ofi_5": -0.03,
"manip_risk": 0.12,
"large_order_activity": 0.35
// Enterprise: all 49+ features
}
},
"data_freshness": {
"<exchange>": { "age_seconds": 1.4, "is_stale": false }
},
"tier": "professional",
"timestamp": "2026-03-05T14:22:01.123Z"
}/v1/orderbook/composite/{symbol}Returns 5 synthesized composite reads that combine multiple raw features into a monitoring-oriented context summary.
Response shape
{
"symbol": "BTC/USDT",
"composites": {
"directional_pressure": 0.65,
"liquidity_risk": 0.22,
"whale_conviction": 0.48,
"flow_momentum": 0.31,
"cross_exchange_agreement": 0.87
},
"timestamp": "2026-03-05T14:22:01.123Z"
}/v1/orderbook/support-resistance/{symbol}Detected support and resistance zones with strength scores, bounce/breach counts, and a persistence model that decays over approximately 5.7 minutes.
Response shape
{
"symbol": "BTC/USDT",
"zones": [
{
"type": "support",
"price_low": 62100.0,
"price_high": 62250.0,
"strength": 0.82,
"bounce_count": 3,
"breach_count": 0,
"age_seconds": 145.2,
"decayed_strength": 0.71
}
],
"timestamp": "2026-03-05T14:22:01.123Z"
}/v1/flow/liquidations/{symbol}Real-time liquidation rate, long/short imbalance, and cascade stress score aggregated from Binance and Bybit liquidation streams.
Response shape
{
"symbol": "BTC/USDT",
"rate_per_minute": 12.5,
"long_short_imbalance": -0.35,
"cascade_risk": 0.62,
"total_volume_usd_1h": 8450000,
"timestamp": "2026-03-05T14:22:01.123Z"
}/v1/flow/large-trades/{symbol}Large-trade detection. Tracks outsized prints with buy/sell ratio and large-size flow scoring.
Response shape
{
"symbol": "BTC/USDT",
"count_5m": 7,
"buy_sell_ratio": 1.45,
"institutional_score": 0.68,
"total_volume_usd_5m": 2350000,
"timestamp": "2026-03-05T14:22:01.123Z"
}/v1/flow/cvd/{symbol}Cumulative Volume Delta -- net buying vs selling pressure computed from aggTrade streams. Includes taker ratio and CVD slope.
Response shape
{
"symbol": "BTC/USDT",
"cvd_1m": 125000.50,
"cvd_5m": 580000.25,
"cvd_slope": 0.032,
"taker_ratio": 0.58,
"crowd_positioning": 0.12,
"timestamp": "2026-03-05T14:22:01.123Z"
}/v1/flow/spot-futures/{symbol}Spot-vs-futures comparison engine. Basis spread, depth divergence, cross-venue flow analysis, and large-order agreement across venues.
Response shape
{
"symbol": "BTC/USDT",
"basis_spread": 0.0012,
"depth_divergence": 0.18,
"ofi_lead_lag": -0.05,
"whale_agreement": 0.72,
"liquidity_ratio": 1.15,
"timestamp": "2026-03-05T14:22:01.123Z"
}/v1/flow/derivativesMulti-exchange derivatives consensus across Binance, Bybit, and OKX. Funding rates, open interest, long/short ratios, and agreement scores.
Response shape
{
"exchanges": {
"binance": {
"funding_rate": 0.0001,
"open_interest_usd": 12500000000,
"long_short_ratio": 1.12
},
"bybit": { "..." : "..." },
"okx": { "..." : "..." }
},
"consensus": {
"funding_agreement": 0.92,
"oi_divergence": 0.15,
"ls_consensus": 0.78
},
"timestamp": "2026-03-05T14:22:01.123Z"
}/v1/flow/positioning/{symbol}Positioning context data -- taker positioning, venue-reported ratio structure, and retail vs larger-size flow breakdown.
Response shape
{
"symbol": "BTC/USDT",
"positioning": {
"top_trader_long_ratio": 0.55,
"taker_buy_ratio": 0.52,
"retail_sentiment": 0.62,
"institutional_bias": -0.10
},
"timestamp": "2026-03-05T14:22:01.123Z"
}/v1/historical/features/{symbol}Historical time-series of orderbook features. Useful for research and analysis. Lookback depends on tier (Trader: 14 days, Professional: 30 days, Expert and Enterprise: 90 days).
Response shape
{
"symbol": "BTC/USDT",
"exchange": "binance",
"interval": "1m",
"data": [
{
"timestamp": "2026-03-05T14:00:00Z",
"bid_ask_spread": 0.00011,
"order_flow_imbalance_proxy": 0.39,
"price_impact_coefficient": 0.0031,
"order_flow_imbalance": 0.05
}
]
}/v1/historical/composites/{symbol}Historical time-series of composite reads for research and analysis. Same lookback rules as historical features.
Response shape
{
"symbol": "BTC/USDT",
"interval": "1m",
"data": [
{
"timestamp": "2026-03-05T14:00:00Z",
"directional_pressure": 0.55,
"liquidity_risk": 0.20,
"whale_conviction": 0.42,
"flow_momentum": 0.28,
"cross_exchange_agreement": 0.90
}
]
}/v1/symbolsDiscover all available symbols and which data types exist for each. No authentication required.
Response shape
{
"symbols": {
"BTCUSDT": {
"exchanges": ["binance", "bybit"],
"data_types": {
"orderbook": true,
"liquidations": true,
"spot_futures": true,
"derivatives": true,
"cvd": true,
"positioning": true,
"large_trades": true
}
},
"ETHUSDT": { "exchanges": ["binance"], "data_types": { "orderbook": true } }
},
"total_symbols": 52,
"total_exchanges": 11
}/v1/tiersLegacy entitlement data and the current commercial catalogue. Use_meta.current_catalogfor current pricing; the legacy tier map remains for existing accounts and historical compatibility. No authentication required.
Offer and plan IDs are server-issued catalog keys. Read their exact values from_meta.current_catalog.offers; the example uses placeholders. Current customer-facing names are Founding Plan and Standard Plan.
Response shape
{
"observer": { "legacy": true, "price_monthly_usd": 0, "rate_limit_per_minute": 10 },
"trader": {
"legacy": true,
"price_monthly_usd": 149,
"price_annual_usd": 119,
"rate_limit_per_minute": 60,
"features": ["bid_ask_spread", "depth_imbalance", "...12 total"]
},
"professional": {
"legacy": true,
"price_monthly_usd": 399,
"price_annual_usd": 319,
"rate_limit_per_minute": 300,
"features": ["order_flow_imbalance_proxy", "price_impact_coefficient", "liquidations", "...28 total"]
},
"expert": {
"legacy": true,
"price_monthly_usd": 999,
"price_annual_usd": 799,
"rate_limit_per_minute": 1500,
"features": ["all 49+", "sse_streaming", "per_venue", "cross_exchange"]
},
"enterprise": {
"legacy": true,
"price_monthly_usd": 1499,
"price_annual_usd": 1199,
"rate_limit_per_minute": 1000,
"features": ["all 49+", "unlimited team keys", "SSE streaming"]
},
"_meta": {
"current_catalog": {
"contract_version": "1",
"currency": "USD",
"interval": "monthly",
"offers": [
{ "id": "<offer id>", "plan_id": "<plan id>", "name": "Founding Plan", "price_usd": 29, "first_100_activated": true, "price_protection_months": 12 },
{ "id": "<offer id>", "plan_id": "<plan id>", "name": "Standard Plan", "price_usd": 49 }
]
},
"legacy_api_only_discount_pct": 20,
"legacy_rate_limit_addons": ["+60 rpm/$29", "+300 rpm/$99", "+1000 rpm/$249"]
}
}Advanced Analytics
Market-context analytics endpoints for orderbook structure, cross-venue context, uncertainty monitoring, technical-analysis context, depth profiling, and basis analysis.
/v1/regime/{symbol}Statistical categorization of current market conditions based on proprietary regime analysis.
Response fields
regime (string) -- API contract model context label: BULL, BEAR, CRASH, BREAKOUT, CALM. Labels are not trade calls.
confidence (float) -- Legacy API field name interpreted as classification read strength [0-1], not prediction confidence.
distribution (object) -- Uncertainty distribution across all 5 states
fitted (boolean) -- Whether model is fitted
exchange_source (string) -- Data source exchange
/v1/drift/{symbol}Measures how current data patterns deviate from recent baselines using proprietary statistical methods.
Response fields
overall_status (string) -- ok, warning, alert
drift_score (float) -- Aggregate drift magnitude [0-1]
drifted_features (integer) -- Count of features with significant drift
scope (string) -- "global" (computed across all features)
/v1/cascade-risk/{symbol}Normalized liquidation stress context from exchange feeds and depth analysis.
Response fields
cascade_probability (float) -- Legacy API field name; interpret as a normalized cascade stress read [0-1], not a market probability, forecast, or trading signal.
liquidation_rate (float) -- Liquidations per minute (USD volume)
long_short_imbalance (float) -- Directional imbalance [-1,1]
depth_thinning (float) -- Depth-thinning pressure [0-1]
/v1/consensus/{symbol}Multi-model statistical agreement score. Not a trade recommendation.
Response fields
directional_consensus (float) -- Agreement strength [0-1]
statistical_bias (string) -- API contract model bias label: bullish, bearish, neutral. Labels are not trade calls.
model_agreement (string) -- e.g. "4/6"
confidence_band (string) -- read strength band: low, medium, high
disclaimer (string) -- Legal disclaimer
/v1/arbitrage|/v1/arbitrage/{symbol}Cross-exchange price discrepancy data.
Response fields
count (integer) -- Number of active opportunities
opportunities (array) -- Spread data per pair
/v1/market-protection/{symbol}Market anomaly detection -- 8 exploitation detectors.
Response fields
integrity_score (float) -- Overall market integrity [0-1]
detectors (object) -- 8 individual detector scores
/v1/depth-profile/{symbol}Cumulative liquidity at standardized price bands.
Response fields
total_depth_10bp/50bp (float) -- Total depth at price bands
bid_depth_10bp/50bp (float) -- Bid-side depth
ask_depth_10bp/50bp (float) -- Ask-side depth
price_impact_coefficient (float) -- Price impact coefficient [0-1]
order_flow_imbalance_proxy (float) -- Order-flow imbalance proxy read [0-1] (canonical; smart_money_score is a deprecated alias honored inbound through the current release cycle)
/v1/basis/{symbol}Spot and derivatives market structural comparison.
Response fields
basis_spread (float) -- Spot vs futures differential (%)
annualized_basis (float) -- Basis annualized (%)
lead_lag_score (float) -- Price discovery leadership [-1,1]
funding_rate (float) -- Current perpetual funding rate
Feature Glossary
What each feature means, how to interpret it, and its academic origin where applicable. See the live metrics and context on the platform.
Large-Order Pressure
Professional+Composite score summarizing whether larger or more active participants are dominating the current orderbook read. Range 0 to 1. Higher values indicate heavier larger-participant pressure in the current context.
Price Impact
Professional+Price impact coefficient estimating how sensitive price is to incremental flow in the current depth snapshot. Computed from live depth snapshots. Higher values indicate a thinner book around the top of book.
Level OFI
Professional+Five scalar fields, level_ofi_1 through level_ofi_5, record Order Flow Imbalance for the five price levels. Each field is in [-1, 1]; positive values indicate net buying pressure and negative values indicate net selling pressure at that level.
See live: /platform/orderbook
Cascade Stress Score
Professional+Normalized 0 to 1 read for liquidation stress. Combines liquidation rate acceleration, volume clustering, and long/short imbalance. Higher values mean the market is more exposed to forced-position pressure and deserves closer review.
Spoofing Stress Read
Professional+Context read for spoofing-like behavior - large orders placed and quickly cancelled in ways that can distort perceived supply/demand. Computed from order placement/cancellation pattern analysis over short time windows. Range 0 to 1. Higher values indicate stronger spoofing-like stress in the current read.
Directional Pressure
Professional+Composite read combining OFI, depth imbalance, and large-order trade direction to summarize the current pressure balance across the market. Positive values lean toward buy pressure; negative values lean toward sell pressure. Magnitude indicates strength.
See live: /platform/composite
Liquidity Research
Professional+Microstructure research surface: spread stress percentiles vs trailing history, per-symbol spread-bucket forward-move statistics across 31 microstructure features, per-venue integrity medians, a composite 0-100 market stress index, cross-asset contagion matrix, and per-horizon Spearman IC. Descriptive historical research, not predictions or signals.
See live: /platform/liquidity
Core Orderbook Features
These are documented API field definitions, not a promise of enabled launch endpoints or a verification of customer access. Customer API-key access is documented. Issuance requires enabled API access and an eligible account; signup or plan selection does not issue a key.
bid_ask_spreadThe difference between the best ask and best bid price, normalized by mid-price. Tighter spreads indicate higher liquidity. A sudden widening can signal uncertainty or a withdrawal of market makers.
depth_imbalance(bid base quantity - ask base quantity) / (bid base quantity + ask base quantity), using the included bid and ask depth. Range: -1 to 1. A valid zero indicates balanced pressure only when the computation used available bid and ask depth and the observation is fresh. Some legacy responses may also return numeric zero when a value was unavailable or not yet computed, without enough information to distinguish those cases. Zero alone does not establish balanced pressure. Treat missing or ambiguous values, and any value whose freshness is unknown, as unknown; treat stale values as unverified rather than current.
order_flow_imbalanceNet order flow computed from changes in the order book over time. Positive = net buying; negative = net selling. Unlike trade-based OFI, this captures passive order additions and cancellations.
book_pressureRatio of total bid volume to total ask volume in the visible order book. Values above 1.0 indicate more buying interest; below 1.0 indicate more selling interest.
weighted_mid_offsetDifference between the volume-weighted mid-price and the simple mid-price. When positive, buy-side depth outweighs sell-side at the top of book, pulling the fair value estimate higher.
bid_depth_ratioProportion of total visible depth that sits on the bid side. Range 0 to 1. A value of 0.5 is perfectly balanced; above 0.5 means more bid depth; below 0.5 means more ask depth.
top_level_size_ratioRatio of the top-of-book order size to the average size across visible levels. High values indicate a concentration of liquidity at the best bid/ask.
spread_volatilityRolling standard deviation of the bid-ask spread. High spread volatility suggests unstable liquidity conditions where market makers are frequently adjusting their quotes.
Rate Limits
Rate limits are enforced per API key using a sliding window algorithm.
| Tier | Rate Limit | Burst |
|---|---|---|
| Trader | 60 req/min | 10 req/s |
| Professional | 300 req/min | 10 req/s |
| Expert | 1,500 req/min | 10 req/s |
| Enterprise | 1,000 req/min | 10 req/s |
Rate Limit Headers
Every response includes these headers so you can track your usage programmatically:
X-RateLimit-Limit-- Your per-minute request allowanceX-RateLimit-Remaining-- Requests remaining in the current windowX-RateLimit-Reset-- Unix timestamp when the window resetsWhen you exceed the limit, the API returns HTTP 429 Too Many Requests with a Retry-After header indicating how many seconds to wait before retrying.
Handling Rate Limits (Python)
import time
import requests
def get_with_retry(url, headers, max_retries=3):
"""GET request with automatic rate-limit retry."""
for attempt in range(max_retries):
r = requests.get(url, headers=headers)
if r.status_code == 429:
wait = int(r.headers.get("Retry-After", 5))
print(f"Rate limited. Waiting {wait}s...")
time.sleep(wait)
continue
r.raise_for_status()
return r.json()
raise Exception("Max retries exceeded")Error Codes
All error responses include a JSON body with a detail field describing the issue.
| Code | Meaning | What To Do |
|---|---|---|
| 200 | Success | Parse the JSON response body |
| 400 | Bad Request | Invalid symbol or malformed request. Check the symbol format (e.g., BTCUSDT not BTC/USDT). |
| 401 | Unauthorized | Missing or invalid API key. Verify the X-API-Key header is set correctly. |
| 403 | Forbidden | Endpoint not available on your tier. Upgrade at /pricing or check /v1/tiers. |
| 404 | Not Found | Symbol not available. Use /v1/symbols to discover valid symbols. |
| 429 | Rate Limited | Too many requests. Read the Retry-After header and wait before retrying. |
| 500 | Internal Server Error | Something went wrong on our end. Retry after a few seconds. If persistent, contact support. |
| 502 / 503 | Upstream Unavailable | An upstream data source is temporarily unavailable. Retry in 2-5 seconds. These are typically brief. |
Error Response Format
// HTTP 401
{
"detail": "Invalid or missing API key"
}
// HTTP 403
{
"detail": "Endpoint /v1/flow/spot-futures requires Professional tier"
}
// HTTP 429
{
"detail": "Rate limit exceeded. Retry after 12 seconds"
}
// HTTP 404
{
"detail": "Symbol INVALIDUSDT not found. Use /v1/symbols for available symbols."
}