sifting/io
GET/v1/hist/:venue/:symbol/signals

Signal history

Get the technical-analysis signal as a time series, one point per bar: summary, score, close, 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.

Format
JSON

Example

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/hist/crypto/BTCUSD/signals?interval=1d&limit=90"
200OKapplication/json
{  "data": [    {      "t": 1754870400000,      "close": 60120.0,      "summary": "buy",      "score": 0.28,      "events": []    },    {      "t": 1754956800000,      "close": 61010.5,      "summary": "strong_buy",      "score": 0.55,      "events": ["macd_cross_up"]    },    {      "t": 1755043200000,      "close": 61980.4,      "summary": "strong_buy",      "score": 0.61,      "events": ["golden_cross"]    }  ],  "meta": {    "as_of": "2026-08-13T14:32:07Z",    "symbol": "BTCUSD",    "interval": "1d"  }}
Loading runner…
First load only

Parameters

Parameter
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

Field
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.
meta.symbolstring
Echoed symbol.
meta.intervalstring
Echoed bar size.
meta.as_ofstring
When the response was produced. RFC 3339, UTC.

Reference

Events (data[].events)
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.

Error responses

  • 422insufficient_history

    Not 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"}
  • 404not_found

    Unknown venue, or a symbol outside our coverage for that venue.

    { "error": "not_found" }
  • 400invalid_parameter

    Bad interval, limit, or malformed symbol.

    {  "error": "invalid_parameter",  "message": "interval must be one of: 1m, 5m, 15m, 30m, 1h, 1d, 1w, 1mo."}
  • 403market_not_entitled

    US 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" }

More in Technical signals

See all