GET /correlation
GET /correlation
Section titled “GET /correlation”How closely 14 large perpetuals move with BTC: the Pearson correlation of hourly returns over one window, by default the last 30 hours (30 returns), not 30 days. Returns are joined on candle time; a coin whose newest candle lags BTC’s is left out rather than mismatched. Each correlation comes with its sample size and standard error, so a noisy 30-hour figure can be told apart from a 30-day one.
Coins: BTC, ETH, SOL, DOGE, XRP, AVAX, LINK, ARB, OP, SUI, NEAR, INJ, APT, ADA, PEPE.
Request
Section titled “Request”GET https://api.cerebruspulse.xyz/correlationQuery Parameters
Section titled “Query Parameters”| Parameter | Type | Default | Description |
|---|---|---|---|
window | string | 30h | 30h (30 hourly returns), 7d (168) or 30d (719). Any other value is refused with 400 before any price is quoted. |
Response
Section titled “Response”| Field | Type | Description |
|---|---|---|
endpoint | string | correlation |
timestamp_iso | string | When the response was computed (UTC) |
btc_correlation.<coin> | number | null | Pearson r of the coin’s 1h returns against BTC’s, −1 to 1. BTC is 1.0. Null when the coin lags BTC, lacks candles, or has fewer than max(20, window / 2) joined returns |
correlation_stats.<coin> | object | For each coin with a correlation: n (joined returns used) and stderr ((1 − r²) / √(n − 1)) |
average_correlation | number | null | Mean of the non-null correlations, BTC excluded |
regime | string | CORRELATED (average > 0.7), DECORRELATED (< 0.3), MIXED, or UNKNOWN |
sector_averages.<sector> | number | Mean correlation per sector with data: L1 (ETH, SOL, AVAX, NEAR, APT, SUI, ADA), L2 (ARB, OP), DeFi (LINK, INJ), Meme (DOGE, PEPE) |
meta | object | Common metadata (Response Schemas) |
meta.offering | string | pulse_correlation |
meta.coins_analyzed | number | Coins with a correlation, BTC included |
meta.window | string | The window used |
meta.lookback_bars | number | Hourly returns in the window |
meta.timeframe | string | 1h |
meta.method | string | The method, as text |
meta.lagging_coins | array | Coins left out because their newest candle is older than BTC’s (also flagged in meta.warnings as lagging_coins) |
meta.as_of.candles_1h is the close of BTC’s newest candle, which every correlated coin reaches.
Example
Section titled “Example”GET /correlation: real engine output on market data captured at 2026-09-24 17:05 UTC. Lists are cut to 3 items. Live responses may also carry meta.disclaimer, which the gateway adds.
{ "endpoint": "correlation", "timestamp_iso": "2026-09-24T17:05:00Z", "btc_correlation": { "BTC": 1, "ETH": 0.9319, "SOL": null, "DOGE": 0.8839, "XRP": null, "AVAX": null, "LINK": null, "ARB": null, "OP": null, "SUI": null, "NEAR": null, "INJ": null, "APT": null, "ADA": null, "PEPE": null }, "correlation_stats": { "ETH": { "n": 30, "stderr": 0.0244 }, "DOGE": { "n": 30, "stderr": 0.0406 } }, "average_correlation": 0.9079, "regime": "CORRELATED", "sector_averages": { "L1": 0.9319, "Meme": 0.8839 }, "meta": { "provider": "Cerebrus Pulse", "offering": "pulse_correlation", "execution_ms": 0, "coins_analyzed": 3, "window": "30h", "lookback_bars": 30, "timeframe": "1h", "method": "Pearson r of 1h returns joined on candle time; stderr = (1 - r^2) / sqrt(n - 1)", "lagging_coins": [], "as_of": { "candles_1h": "2026-09-24T17:00:00Z" }, "sources": [ { "name": "Hyperliquid", "url": "https://hyperliquid.xyz" } ] }}This capture held 1h candles for BTC, ETH and DOGE only, so the other coins read null and coins_analyzed
is 3. A live response fills every coin that has enough data.
Errors
Section titled “Errors”| Status | Reason |
|---|---|
| 400 | window not one of 30h, 7d, 30d (before any price is quoted), or not enough BTC candles (not charged) |
| 402 | Payment required (the standard x402 flow) |
| 429 | Rate limit exceeded |
| 503 | Service disabled, payments down, or the candle feed is missing or stale; no price is quoted |
| 504 | Engine timeout (not charged) |