---
title: "Historical technical-signal series"
method: GET
path: "/v1/hist/{venue}/{symbol}/signals"
tags: ["Signals"]
---

# Historical technical-signal series

`GET /v1/hist/{venue}/{symbol}/signals`

## Request

- Base URL: `https://api.sifting.io`
- URL: `https://api.sifting.io/v1/hist/{venue}/{symbol}/signals`
- Auth: one of:
  - API key in header `X-API-Key`
  - API key in query parameter `api_key`
- TypeScript: <https://skmtc.dev/sifting/apis/siftingio-market-data-api/docs/v1/hist/:venue/:symbol/signals/get.ts> (a function with typed inputs; its response is checked against the schema)

The technical-analysis signal as a time series, one point per bar: summary, score, close, vote counts, the 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. `t` is the bar-open time in Unix epoch milliseconds, the same as the `/v1/hist/*` bars routes.

## Path parameters

- `venue` 'stocks' | 'crypto' | 'forex' | 'commodities', required
- `symbol` string, required

## Query parameters

- `interval` '1m' | '5m' | '15m' | '30m' | '1h' | '1d' | '1w' | '1mo'
- `limit` integer

## Response `200`

Historical signal series.

- SignalHistoryResponse
  - `data` SignalPoint[]
    - `t` integer: Bar open time, Unix epoch ms.
    - `close` number
    - `summary` 'strong_sell' | 'sell' | 'neutral' | 'buy' | 'strong_buy': Decision-ready label. `score` runs -1 (strong_sell) to +1 (strong_buy).
    - `score` number: Score for the bar, -1 to +1.
    - `events` SignalEvent[]
    - `counts` SignalCounts: Vote tally across every indicator returned.
      - `buy` integer
      - `neutral` integer
      - `sell` integer
    - `oscillators` SignalGroup: One indicator group (oscillators or moving averages) with its own verdict.
      - `signal` 'strong_sell' | 'sell' | 'neutral' | 'buy' | 'strong_buy': Decision-ready label. `score` runs -1 (strong_sell) to +1 (strong_buy).
      - `score` number: Group score, -1 to +1.
      - `indicators` SignalIndicator[]
        - `name` string: Indicator name and parameters, e.g. RSI(14).
        - `value` number: Primary reading. Omitted on rows reported via component fields only.
        - `signal_line` number: MACD signal line (MACD rows only).
        - `k` number: Stochastic %K (Stochastic rows only).
        - `d` number: Stochastic %D (Stochastic rows only).
        - `vote` 'buy' | 'neutral' | 'sell': A single indicator's vote.
    - `moving_averages` SignalGroup: One indicator group (oscillators or moving averages) with its own verdict.
      - `signal` 'strong_sell' | 'sell' | 'neutral' | 'buy' | 'strong_buy': Decision-ready label. `score` runs -1 (strong_sell) to +1 (strong_buy).
      - `score` number: Group score, -1 to +1.
      - `indicators` SignalIndicator[]
        - `name` string: Indicator name and parameters, e.g. RSI(14).
        - `value` number: Primary reading. Omitted on rows reported via component fields only.
        - `signal_line` number: MACD signal line (MACD rows only).
        - `k` number: Stochastic %K (Stochastic rows only).
        - `d` number: Stochastic %D (Stochastic rows only).
        - `vote` 'buy' | 'neutral' | 'sell': A single indicator's vote.
  - `meta` SignalMeta
    - `as_of` string, date-time
    - `symbol` string
    - `interval` string

## Other responses

- `400`: Invalid request parameters.
- `401`: Missing or invalid API key.
- `403`: Valid key, but the plan or tier does not include this market/venue.
- `404`: Resource not found.
- `422`: Not enough bars to compute a signal for this symbol and interval.
- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/sifting/apis/siftingio-market-data-api.md) - [All operations](https://skmtc.dev/sifting/apis/siftingio-market-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sifting/apis/siftingio-market-data-api/revisions/c570068c2359?raw)
