Skip to content

GET /pulse/{coin}

$0.025 USDC

Multi-timeframe technical analysis for one Hyperliquid perpetual: indicators computed on closed candles for each requested timeframe, a derivatives snapshot, the market regime and a confluence vote share.

GET https://api.cerebruspulse.xyz/pulse/{coin}
ParameterTypeRequiredDescription
coinstringYesMarket symbol, case-insensitive (BTC, ETH, SOL). Hyperliquid’s name for a 1000-token market (kPEPE) works too. GET /coins lists them.
ParameterTypeDefaultDescription
timeframesstring1h,4hComma-separated, from 5m, 15m, 1h, 4h, 1d, 1w. 1d and 1w are built from 1h candles.

An unknown coin (404) or timeframe (400) is refused before any price is quoted.

FieldTypeDescription
coinstringThe symbol, upper-case (PEPE, not kPEPE)
market_symbolstringHyperliquid’s name for the market (kPEPE for PEPE)
price_unitstringWhat prices are quoted per, and what sizes count: 1 BTC, or 1000 PEPE for a 1000-token market
timestamp_isostringWhen the response was computed (UTC)
price.currentnumberHyperliquid mid price in USD per price_unit. Absent if the price feed has no mid for the market
timeframesobjectOne entry per requested timeframe, keyed by timeframe ("1h")
derivativesobjectFunding, open interest and impact prices. Empty if Hyperliquid’s context lacks the market
regimeobjectThe market regime
confluenceobjectA vote share across four indicators
metaobjectCommon metadata (Response Schemas)

Indicators use closed candles only; the candle still forming is never included.

FieldTypeDescription
timeframes.<tf>.indicators.rsi_14number | nullRSI (14, Wilder’s smoothing), 0–100
timeframes.<tf>.indicators.rsi_zonestringoverbought (≥ 70), bullish (60–70), neutral (40–60), bearish (30–40), oversold (≤ 30), unknown
timeframes.<tf>.indicators.atr_14number | nullAverage true range (14), in price units
timeframes.<tf>.indicators.atr_pctnumber | nullATR as a percentage of the last close
timeframes.<tf>.indicators.ema_20number | null20-period EMA of closes; null with fewer than 20 candles
timeframes.<tf>.indicators.ema_50number | null50-period EMA; null with fewer than 50 candles
timeframes.<tf>.indicators.ema_200number | null200-period EMA; null with fewer than 200 candles
timeframes.<tf>.indicators.vwap_20number | nullVolume-weighted average close of the last 20 candles
timeframes.<tf>.indicators.zscore_100number | nullZ-score of the last close against the last 100 closes
timeframes.<tf>.indicators.bollinger.uppernumber20-period SMA + 2 standard deviations
timeframes.<tf>.indicators.bollinger.middlenumber20-period SMA
timeframes.<tf>.indicators.bollinger.lowernumber20-period SMA − 2 standard deviations
timeframes.<tf>.indicators.bollinger.width_pctnumber(upper − lower) / middle, as a percentage
timeframes.<tf>.indicators.bollinger.position_pctnumberWhere the last close sits in the bands as a fraction: 0 = lower band, 1 = upper band; outside 0–1 when the close is outside the bands
timeframes.<tf>.indicators.trend.directionnumber1, -1 or 0
timeframes.<tf>.indicators.trend.labelstringbullish (price > EMA20 > EMA50 > EMA200), bearish (the reverse), weak_bullish (above EMA200 otherwise), weak_bearish (below it), neutral, or insufficient_data (fewer than 200 candles)
timeframes.<tf>.indicators.trend.ema_stackstringbull_aligned, bear_aligned, mixed, flat, or unknown with insufficient_data
timeframes.<tf>.candle_freshness_secondsnumberSeconds since the newest closed candle closed
timeframes.<tf>.last_closed_candle_timestringWhen the newest closed candle closed (ISO 8601, UTC)
timeframes.<tf>.stalebooleantrue when no candle has closed for two intervals (the candle feed stalled)
timeframes.<tf>.errorstringOptional. Replaces the fields above when a timeframe cannot be computed, e.g. insufficient_data (12 candles). If every requested timeframe fails, the request gets a 400 and is not charged
FieldTypeDescription
derivatives.funding_ratenumberCurrent Hyperliquid funding rate per hour. 0.0000125 (0.00125% an hour) is Hyperliquid’s baseline
derivatives.funding_annualized_pctnumberfunding_rate × 24 × 365 × 100: the baseline annualizes to 10.95%
derivatives.funding_interval_hoursnumber1: Hyperliquid pays funding every hour
derivatives.open_interestnumberOpen interest counted in price_unit (BTC for BTC), not USD. Multiply by price.current for USD notional
derivatives.impact_bidnumberHyperliquid’s impact bid: the average fill price of an impact-size market sell, not the top of the book
derivatives.impact_asknumberHyperliquid’s impact ask
derivatives.impact_spread_bpsnumber(impact_ask − impact_bid) / mid × 10000
derivatives.spread_bpsnumberDeprecated: the same value as impact_spread_bps
FieldTypeDescription
regime.currentstringThe market regime label published by the trading system, lower-case (for example risk_on, risk_off), or unknown when none is published. Treat values you do not recognize as opaque
regime.as_ofnumberUnix time in seconds (may be fractional) the regime was set; 0 when unknown
regime.stalebooleanOptional. Added by the gateway when the regime is more than 6 hours old; current is then the last known regime, not a live one
regime.age_secondsnumberOptional. With stale: how old the regime is
regime.notestringOptional. With stale: a sentence saying so

The confluence score is a vote share, not a confidence or probability, and it has not been validated as predictive. Four indicators vote on the primary timeframe: bullish counts 1, neutral 0.5, bearish 0.

FieldTypeDescription
confluence.scorenumberThe primary timeframe’s vote share, 0–1, to 2 decimals: 1 = every vote bullish, 0.5 = balanced or neutral, 0 = every vote bearish. Sort by it to rank bullish to bearish, not by strength
confluence.bull_fractionnumber | nullThe same share to 3 decimals
confluence.biasstringbullish (share ≥ 0.625), bearish (≤ 0.375), neutral, or unknown when no timeframe computed
confluence.signals.rsistringRSI ≥ 60 bullish, ≤ 40 bearish, else neutral
confluence.signals.trendstringThe EMA trend direction
confluence.signals.bollingerstringMean reversion: position above 0.8 bearish, below 0.2 bullish
confluence.signals.zscorestringMean reversion: above 1.5 bearish, below −1.5 bullish
confluence.bullish_countnumberBullish votes on the primary timeframe
confluence.bearish_countnumberBearish votes on the primary timeframe
confluence.family_scores.trend_followingnumber | nullVote share of rsi and trend alone
confluence.family_scores.mean_reversionnumber | nullVote share of bollinger and zscore alone. The two families often disagree, which the combined score hides
confluence.primary_timeframestring | nullThe first requested timeframe that computed; every top-level confluence field comes from it only
confluence.per_timeframe.<tf>objectThe same score, bull_fraction, family_scores, bias, signals and counts for each computed timeframe
confluence.alignedbooleantrue when at least two timeframes lean the same way and none leans the other, or all are neutral
confluence.alignment_scorenumberShare of timeframes leaning the common way; 0 when they disagree, 0.5 when all are neutral
confluence.score_typestringheuristic_vote_share
confluence.validatedbooleanfalse: the score has no measured predictive value
confluence.definitionstringThe formula, as text
FieldTypeDescription
meta.offeringstringcerebrus_pulse
meta.coins_availablenumberHow many markets the API covers
meta.as_of.<input>stringWhen each input was current: market_data (price and derivatives feed) and candles_<tf> (close of the newest closed candle)
meta.warningstringOptional. stale_data when the price feed is more than 15 minutes old
meta.warningsarrayOptional. stale_candles when a timeframe’s candles stalled; the gateway adds stale_regime

GET /pulse/BTC?timeframes=1h,4h: 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.

{
"coin": "BTC",
"market_symbol": "BTC",
"price_unit": "1 BTC",
"timestamp_iso": "2026-09-24T17:05:00Z",
"price": {
"current": 84512.5
},
"timeframes": {
"1h": {
"indicators": {
"rsi_14": 49.16,
"rsi_zone": "neutral",
"atr_14": 495.286126,
"atr_pct": 0.5881,
"ema_20": 84134.27882,
"ema_50": 84555.185241,
"ema_200": 82476.178645,
"vwap_20": 84001.13142,
"zscore_100": -0.173,
"bollinger": {
"upper": 84796.137043,
"middle": 84040.55,
"lower": 83284.962957,
"width_pct": 1.7981,
"position_pct": 0.6194
},
"trend": {
"direction": 1,
"label": "weak_bullish",
"ema_stack": "mixed"
}
},
"candle_freshness_seconds": 300.8,
"last_closed_candle_time": "2026-09-24T17:00:00Z",
"stale": false
},
"4h": {
"indicators": {
"rsi_14": 47.17,
"rsi_zone": "neutral",
"atr_14": 727.64216,
"atr_pct": 0.8715,
"ema_20": 84338.703076,
"ema_50": 82423.649073,
"ema_200": 77957.991913,
"vwap_20": 84859.417592,
"zscore_100": 1.1847,
"bollinger": {
"upper": 87855.263546,
"middle": 85270.85,
"lower": 82686.436454,
"width_pct": 6.0617,
"position_pct": 0.1557
},
"trend": {
"direction": 1,
"label": "weak_bullish",
"ema_stack": "mixed"
}
},
"candle_freshness_seconds": 3900.8,
"last_closed_candle_time": "2026-09-24T16:00:00Z",
"stale": false
}
},
"derivatives": {
"funding_rate": 0.0000125,
"funding_annualized_pct": 10.95,
"funding_interval_hours": 1,
"open_interest": 39370.3015,
"impact_bid": 84485.4,
"impact_ask": 84500,
"impact_spread_bps": 1.73,
"spread_bps": 1.73
},
"regime": {
"current": "unknown",
"as_of": 0
},
"confluence": {
"score": 0.62,
"bias": "bullish",
"signals": {
"rsi": "neutral",
"trend": "bullish",
"bollinger": "neutral",
"zscore": "neutral"
},
"bullish_count": 1,
"bearish_count": 0,
"per_timeframe": {
"1h": {
"score": 0.62,
"bull_fraction": 0.625,
"family_scores": {
"trend_following": 0.75,
"mean_reversion": 0.5
},
"bias": "bullish",
"signals": {
"rsi": "neutral",
"trend": "bullish",
"bollinger": "neutral",
"zscore": "neutral"
},
"bullish_count": 1,
"bearish_count": 0
},
"4h": {
"score": 0.75,
"bull_fraction": 0.75,
"family_scores": {
"trend_following": 0.75,
"mean_reversion": 0.75
},
"bias": "bullish",
"signals": {
"rsi": "neutral",
"trend": "bullish",
"bollinger": "bullish",
"zscore": "neutral"
},
"bullish_count": 2,
"bearish_count": 0
}
},
"aligned": true,
"alignment_score": 1,
"bull_fraction": 0.625,
"family_scores": {
"trend_following": 0.75,
"mean_reversion": 0.5
},
"primary_timeframe": "1h",
"score_type": "heuristic_vote_share",
"validated": false,
"definition": "score = bull_fraction = (bullish + 0.5*neutral) / votes on primary_timeframe; an unvalidated heuristic, not a confidence or probability"
},
"meta": {
"provider": "Cerebrus Pulse",
"offering": "cerebrus_pulse",
"execution_ms": 0,
"coins_available": 51,
"data_age_seconds": 60,
"as_of": {
"market_data": "2026-09-24T17:04:00Z",
"candles_1h": "2026-09-24T17:00:00Z",
"candles_4h": "2026-09-24T16:00:00Z"
},
"sources": [
{
"name": "Hyperliquid",
"url": "https://hyperliquid.xyz"
}
]
}
}
StatusReason
400Unsupported timeframe (before any price is quoted), or no requested timeframe could be computed (not charged)
402Payment required (the standard x402 flow)
404Unknown coin (before any price is quoted)
429Rate limit exceeded
503Service disabled, payments down, or an upstream feed is missing or stale; no price is quoted
504Engine timeout (not charged)