/v1/hist/:venue/:symbol/signalsSignal history
Get the technical-analysis signal as a time series, one point per bar: summary, score, close, vote counts, the full oscillator and moving-average breakdown with each indicator's value and vote, and any discrete events (golden_cross, death_cross, macd_cross_up, macd_cross_down) that fired on that bar. Same computation as the live signal, so a historical point is identical to the one that fired live: backtest what you saw. t is the bar-open time in Unix epoch milliseconds, the same as the bars routes.
- Auth
X-API-Keyheader- Format
- JSON
- Rate limits
- Per-key, see limits
Example
curl -H "X-API-Key: $KEY" \
"https://api.sifting.io/v1/hist/forex/EURUSD/signals?interval=1h&limit=1"{ "data": [ { "t": 1791148800000, "close": 1.17342, "summary": "buy", "score": 0.28, "events": ["macd_cross_up"], "counts": { "buy": 9, "neutral": 5, "sell": 4 }, "oscillators": { "signal": "neutral", "score": 0.17, "indicators": [ { "name": "RSI(14)", "value": 58.21, "vote": "neutral" }, { "name": "MACD(12,26,9)", "value": 0.00042, "signal_line": 0.00031, "vote": "buy" }, { "name": "Stoch(14,3,3)", "k": 71.4, "d": 66.8, "vote": "neutral" }, { "name": "CCI(20)", "value": 84.12, "vote": "neutral" }, { "name": "Williams %R(14)", "value": -31.5, "vote": "neutral" }, { "name": "Mom(10)", "value": 0.00215, "vote": "buy" } ] }, "moving_averages": { "signal": "buy", "score": 0.33, "indicators": [ { "name": "SMA(10)", "value": 1.17211, "vote": "buy" }, { "name": "SMA(20)", "value": 1.17104, "vote": "buy" }, { "name": "SMA(30)", "value": 1.16988, "vote": "buy" }, { "name": "SMA(50)", "value": 1.16852, "vote": "buy" }, { "name": "SMA(100)", "value": 1.17301, "vote": "buy" }, { "name": "SMA(200)", "value": 1.17655, "vote": "sell" }, { "name": "EMA(10)", "value": 1.17238, "vote": "buy" }, { "name": "EMA(20)", "value": 1.17141, "vote": "buy" }, { "name": "EMA(30)", "value": 1.17047, "vote": "buy" }, { "name": "EMA(50)", "value": 1.16992, "vote": "buy" }, { "name": "EMA(100)", "value": 1.17188, "vote": "buy" }, { "name": "EMA(200)", "value": 1.17402, "vote": "sell" } ] } } ], "meta": { "as_of": "2026-10-04T14:32:10Z", "symbol": "EURUSD", "interval": "1h" }}Parameters
venuerequiredenum · path- stocks | crypto | forex | commodities.
symbolrequiredstring · path- Concatenated USD-quoted form, uppercase (e.g. BTCUSD, EURUSD, XAUUSD, AAPL). Case-insensitive.
intervalstring · query- Bar size each point is computed on. One of: 1m, 5m, 15m, 30m, 1h, 1d, 1w, 1mo. Default 1d. Same enum as the /hist bars routes.
limitinteger · query- Return the most recent N points, newest last. Default 100.
Response fields
data[]array- Signal points, oldest first, one per interval bucket.
data[].tint64 (epoch ms)- Bar open time, Unix epoch milliseconds, UTC. Same as the /hist bars routes.
data[].closefloat- Close for the bar.
data[].summaryenum- Label for the bar: strong_sell | sell | neutral | buy | strong_buy.
data[].scorefloat- Score for the bar, -1 to +1.
data[].eventsarray- Discrete markers that fired on the bar (see the events legend). Empty array when none.
data[].countsobject- Vote tally across every indicator returned for the bar: { buy, neutral, sell }.
data[].oscillators.signalenum- Group label for the oscillator block on the bar.
data[].oscillators.scorefloat- Group score for the oscillator block, -1 to +1.
data[].oscillators.indicators[]array- One row per oscillator, only those out of warmup on that bar.
data[].oscillators.indicators[].namestring- Indicator name and parameters, e.g. RSI(14).
data[].oscillators.indicators[].valuefloat- Indicator reading. Some rows carry extra fields (MACD: signal_line; Stochastic: k, d instead of value).
data[].oscillators.indicators[].voteenum- buy | neutral | sell for this indicator.
data[].moving_averagesobject- Same shape as oscillators: signal, score, and an indicators array of SMA/EMA rows.
meta.symbolstring- Echoed symbol.
meta.intervalstring- Echoed bar size.
meta.as_ofstring- When the response was produced. RFC 3339, UTC.
Reference
- golden_cross
- Fast moving average crossed above a slow one.
- death_cross
- Fast moving average crossed below a slow one.
- macd_cross_up
- MACD line crossed above its signal line.
- macd_cross_down
- MACD line crossed below its signal line.
- Oscillators
- RSI, MACD, Stochastic, CCI, Williams %R, Momentum.
- Moving averages
- SMA and EMA at 10, 20, 30, 50, 100, and 200 periods.
Error responses
- 422
insufficient_historyNot enough bars to compute the signal for this symbol and interval (short listings, illiquid pairs).
{ "error": "insufficient_history", "message": "not enough history to compute a signal for this symbol and interval"} - 404
not_foundUnknown venue, or a symbol outside our coverage for that venue.
{ "error": "not_found" } - 400
invalid_parameterBad interval, limit, or malformed symbol.
{ "error": "invalid_parameter", "message": "interval must be one of: 1m, 5m, 15m, 30m, 1h, 1d, 1w, 1mo."} - 403
market_not_entitledUS stock signals on the free tier. Stocks is a paid market, the same gate as stock bars.
{ "error": "your subscription doesn't include the stocks market" }