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/ callEdge cache
Off
Uptime 24h
100.00%
p95
330ms
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| 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
# 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"// 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);# 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())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.