Skip to content

Squeeze Alerts

GET/v1/cryptodata/market-intelligence/squeeze-alerts

Coins whose forced-liquidation flow is one-sided and abnormal *right now*. A cascade tripwire, not a news feed. Scored catalysts on ``/news/market-moving`` are 15-45 minutes behind a breaking story — RSS is polled every 5 minutes and desks publish well after the fact — which is no use to a leveraged position. This reads the liquidation websocket directly: on 2026-08-19 the BTC tape printed **$322.8M of short liquidations in one 5-minute bucket at a 334x short/long ratio, 23 minutes before** the first related headline qualified for the tape. **`direction` names the side being LIQUIDATED, not the price.** A short liquidation is the exchange closing a short at market — forced buying — so `short_squeeze` is upward pressure and `long_flush` is downward, and the label is correct before price confirms it. **`oi_state` is what separates the two cases that matter.** Open interest falling into a short squeeze means shorts are being closed out (the move is consuming its own fuel); OI rising means fresh positioning is being added into it. It reads `null` until the OI history has two samples, and `unclear` inside a ±0.5% noise band rather than being forced into a story. **Severity is built from ratios**, not dollars: `spike_ratio` (this window against the coin's own trailing-24h mean) and `asymmetry` (the dominant side's share) carry 80% of the weight. Absolute notionals are the figure most distorted by the coverage gap below, so they are weighted least. **Coverage:** the same venue subset as ``/market-intelligence/liquidations`` (OKX + Bybit + Hyperliquid where armed; Hyperliquid is exact per-fill). Binance geo-blocks its liquidation stream from our infrastructure, so notionals run below a true all-exchange total. **Check `baseline_span_h`, not `window_uptime_h`.** `spike_ratio` compares a window against a trailing-24h mean, and `baseline_span_h` is how many hours of history are actually behind that mean — it is what triggering is gated on. `window_uptime_h` is process uptime and resets on every deploy, while the feed restores up to 24h of events from its snapshot on boot, so the two routinely disagree by a full day. **`triggered` requires every gate**: `spike_ratio` ≥ 2, `asymmetry` ≥ 0.70, `severity` ≥ 0.35, window notional ≥ $100k and ≥ 1h of baseline history. `suppressed_by` names whichever blocked it. The two absolute floors exist because notional is only 20% of the severity weight — without them a perfectly one-sided window scores 0.80 on any size at all, which in production raised alerts on $760 of liquidations. They gate the alert, not the scoring, so `include_quiet=true` still returns the row with the reason. The free tier is scoped to BTC; full-universe coverage is Pro and Pro Plus.

Price

$0.01/ call

Edge cache

Off

Uptime 24h

100.00%

p95

330ms

Parameters

NameInTypeDescription
symbol query string Filter to a single coin (e.g. BTC)
window_s query integer = 300 Trailing window in seconds (default 300 = 5 min)
min_severity query number = 0.35 Minimum severity to report
include_quiet query boolean = false Return every coin with a usable window, not just the ones firing. For calibration
limit query integer = 250 Max coins to scan

Code

curl
# 1. No key, no payment: the gateway answers 402 with the price
curl -i "https://api.realtimeapi.ai/v1/cryptodata/market-intelligence/squeeze-alerts"

# 2. Pay: retry with a signed x402 payment (any x402 client builds this header)
curl "https://api.realtimeapi.ai/v1/cryptodata/market-intelligence/squeeze-alerts" -H "PAYMENT-SIGNATURE: $X402_PAYMENT"
TypeScript · @x402/fetch
// npm i @x402/fetch @x402/core @x402/evm viem
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const client = x402Client.fromConfig({ schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(privateKeyToAccount(PRIVATE_KEY)) }] });
const pay = wrapFetchWithPayment(fetch, client);
const data = await (await pay("https://api.realtimeapi.ai/v1/cryptodata/market-intelligence/squeeze-alerts")).json();
console.log(data);
Python · x402
# pip install x402 eth-account requests
from eth_account import Account
from x402.clients.requests import x402_requests

session = x402_requests(Account.from_key(PRIVATE_KEY))
print(session.get("https://api.realtimeapi.ai/v1/cryptodata/market-intelligence/squeeze-alerts").json())
With an API key
curl "https://api.realtimeapi.ai/v1/cryptodata/market-intelligence/squeeze-alerts" -H "X-API-Key: $RTAPI_KEY"

Frequently asked questions

How do I get squeeze alerts from CryptoDataAPI?

Send GET https://api.realtimeapi.ai/v1/cryptodata/market-intelligence/squeeze-alerts. Pay $0.01 per request with x402, or send an X-API-Key header.

What does GET /market-intelligence/squeeze-alerts cost?

$0.01 per successful request in USDC on Base. Failed requests are never charged.

Can I call this endpoint from an MCP client?

Yes. Connect any MCP client to the RealtimeAPI server and use call_feed with this endpoint's URL, or get_quote to check the price first.

Get a free key

1,000 calls a month across every feed. Who is setting it up?

No key needed at all: agents can pay per call in USDC with x402.