Integrate LiquidityAlert's real-time OCM score, on-chain signals and historical data directly into your platform, bot or TradingView strategy.
Test the API before committing. Limited to 10 requests per day, current OCM score only.
Unlimited access to all endpoints. Real-time OCM score, indicators breakdown, full history and TradingView-compatible output.
Same full access as monthly, billed annually. Save $38 vs monthly — equivalent to 2 months free.
Pass your API key in the X-API-Key request header. Works with all HTTP clients.
Alternatively, pass the key as a URL parameter. Useful for quick tests and TradingView Pine Script integrations.
curl https://liquidityalert.net/api/v1/ping
{
"status": "ok",
"version": "1.0",
"timestamp": "2026-05-23T10:00:00"
}
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
| key | string | API key — optional, use X-API-Key header or ?key=. Free tier: 10 req/day without key. |
# Free tier (10 req/day, no key needed) curl https://liquidityalert.net/api/v1/ocm # Paid tier (unlimited) curl -H "X-API-Key: la_YOUR_KEY" \ https://liquidityalert.net/api/v1/ocm
import requests headers = {"X-API-Key": "la_YOUR_KEY"} res = requests.get("https://liquidityalert.net/api/v1/ocm", headers=headers) data = res.json() print(data["ocm_score"]) # e.g. 62 print(data["zone"]) # "BOTTOM SIGNAL" print(data["action"]) # "Accumulate — high conviction zone"
// Pine Script v5 — fetch OCM score via HTTP // Use a server-side relay that returns the score as a plain number. // Point request.security() at your relay endpoint. // Or use /api/v1/tv/score (see below) which returns // TradingView-compatible OHLC-style JSON directly. score = request.security("LIQUIDITYALERT:OCM", "W", close) plot(score, title="OCM Score", color=color.new(color.red, 0))
{
"timestamp": "2026-05-23T10:00:00",
"date": "2026-05-23",
"ocm_score": 62,
"zone": "BOTTOM SIGNAL",
"signal": "Strong accumulation signal",
"action": "Accumulate — high conviction zone",
"indicators": {
"btc_price": "104820",
"m2_yoy": "3.8",
"igv_rsi": "52.4",
"net_liquidity": "6200B",
"dxy": "98.4",
"gaussian": "bullish",
"cvd": "+1200M",
"tvl_24h": "+0.8%",
"tvl_7d": "+2.1%"
},
"plan": "api",
"client": "YOUR_CLIENT_NAME"
}
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
| key | string | API key (requires paid plan) |
| limit | integer | Number of records to return (default: 90, max: 9999) |
curl -H "X-API-Key: la_YOUR_KEY" \ "https://liquidityalert.net/api/v1/ocm/history?limit=30"
import requests, pandas as pd headers = {"X-API-Key": "la_YOUR_KEY"} res = requests.get( "https://liquidityalert.net/api/v1/ocm/history", params={"limit": 90}, headers=headers ) data = res.json() df = pd.DataFrame(data["signals"]) print(df[["period", "score", "signal", "btc"]])
{
"generated_at": "2026-05-23T10:00:00",
"count": 3,
"signals": [
{ "period": "2026-05-23", "score": 62, "btc": 104820, "signal": "BOTTOM SIGNAL" },
{ "period": "2026-05-16", "score": 58, "btc": 101200, "signal": "NEUTRAL" },
{ "period": "2026-05-09", "score": 71, "btc": 96500, "signal": "NEUTRAL" }
]
}
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
| key | string | API key (requires paid plan) |
curl -H "X-API-Key: la_YOUR_KEY" \ https://liquidityalert.net/api/v1/article
import requests headers = {"X-API-Key": "la_YOUR_KEY"} res = requests.get("https://liquidityalert.net/api/v1/article", headers=headers) article = res.json() print(article["title"]) print(article["summary"])
{
"title": "BTC Weekly Signal Report — W21 2026",
"date": "2026-05-23",
"score": 62,
"zone": "BOTTOM SIGNAL",
"summary": "On-chain metrics remain healthy. IGV RSI at 52 signals neutral tech momentum...",
"url": "https://liquidityalert.net/report/2026-W21"
}
| PARAMETER | TYPE | DESCRIPTION |
|---|---|---|
| key | string | API key (requires paid plan) |
curl "https://liquidityalert.net/api/v1/tv/score?key=la_YOUR_KEY"
// Pine Script v5 — request OCM score series // The /tv/score endpoint returns standard UDF format. // Use with a TradingView custom data feed. indicator("OCM Score", overlay=false) // fetch via server-side relay forwarding /tv/score ocm = request.security("MYSYMBOL", timeframe.period, close) plot(ocm, "OCM", color.red, linewidth=2) hline(70, "Top Zone", color.orange, linestyle=hline.style_dashed) hline(30, "Bottom Zone", color.green, linestyle=hline.style_dashed)
{
"s": "ok",
"t": [1748044800, 1747440000, 1746835200],
"c": [62, 58, 71]
}