SiftingIO Signals API

Technical-analysis signals (live and historical) across stocks, forex, crypto, and commodities.

Operations 2

GET /v1/last/signals/{venue}/{symbol} Live technical signal #
GET /v1/hist/{venue}/{symbol}/signals Historical technical-signal series #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/siftingio-signals-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

siftingio-signals-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: SiftingIO Market Data Signals API
  version: 1.0.0
  description: 'REST data-plane for the SiftingIO market data API: live prices,

    SEC fundamentals (filings, XBRL financials, ratios, insiders, ownership),

    historical OHLCV bars, market calendars, DEX wallet portfolios, and the

    US economic calendar.


    Authentication is by API key, sent as the `X-API-Key` header (preferred)

    or the `api_key` query parameter.


    Several endpoints return large payloads and **require** `Accept-Encoding: gzip`

    (they respond `406` otherwise): the screener, both financials endpoints,

    all historical-bars endpoints, and the market snapshot.


    This document describes the data plane only. Account, billing, and auth

    (the `/ops/v1` control plane) are out of scope.

    '
  license:
    name: MIT
    identifier: MIT
  contact:
    name: SiftingIO
    url: https://sifting.io/docs
servers:
- url: https://api.sifting.io
  description: Production
security:
- ApiKeyHeader: []
- ApiKeyQuery: []
tags:
- name: Signals
  description: Technical-analysis signals (live and historical) across stocks, forex, crypto, and commodities.
paths:
  /v1/last/signals/{venue}/{symbol}:
    get:
      tags:
      - Signals
      operationId: getLiveSignal
      summary: Live technical signal
      description: 'Current technical-analysis signal for a stock, FX pair, crypto asset, or commodity: a decision-ready summary (strong_sell to strong_buy) with a score from -1 to +1, plus the oscillator and moving-average indicators behind it, each with its value(s) and vote. Indicators still in warmup are omitted, so the vote counts sum to the rows returned. `price.bar_status` is `forming` when a live tick is folded into the current bar, `closed` when the last settled bar is used.

        '
      parameters:
      - $ref: '#/components/parameters/VenueSignals'
      - $ref: '#/components/parameters/Symbol'
      - name: interval
        in: query
        description: Bar interval the signal is computed on. Default 1h.
        schema:
          type: string
          enum:
          - 1m
          - 5m
          - 15m
          - 30m
          - 1h
          - 1d
          - 1w
          - 1mo
          default: 1h
      responses:
        '200':
          description: Live technical signal.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LiveSignalResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/InsufficientHistory'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/hist/{venue}/{symbol}/signals:
    get:
      tags:
      - Signals
      operationId: getSignalHistory
      summary: Historical technical-signal series
      description: '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. `t` is the bar-open time in Unix epoch milliseconds, the same as the `/v1/hist/*` bars routes.

        '
      parameters:
      - $ref: '#/components/parameters/VenueSignals'
      - $ref: '#/components/parameters/Symbol'
      - name: interval
        in: query
        description: Bar interval each point is computed on. Default 1d.
        schema:
          type: string
          enum:
          - 1m
          - 5m
          - 15m
          - 30m
          - 1h
          - 1d
          - 1w
          - 1mo
          default: 1d
      - name: limit
        in: query
        description: Return the most recent N points (newest last).
        schema:
          type: integer
          default: 100
          maximum: 1000
      responses:
        '200':
          description: Historical signal series.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignalHistoryResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/InsufficientHistory'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          description: Machine-readable error code, e.g. `unknown_ticker`.
        message:
          type: string
        retry_after:
          type: number
          description: Present on rate-limit errors.
      additionalProperties: true
    SignalGroup:
      type: object
      description: One indicator group (oscillators or moving averages) with its own verdict.
      properties:
        signal:
          $ref: '#/components/schemas/SignalVerdict'
        score:
          type: number
          description: Group score, -1 to +1.
        indicators:
          type: array
          items:
            $ref: '#/components/schemas/SignalIndicator'
    LiveSignal:
      type: object
      properties:
        summary:
          $ref: '#/components/schemas/SignalSummary'
        oscillators:
          $ref: '#/components/schemas/SignalGroup'
        moving_averages:
          $ref: '#/components/schemas/SignalGroup'
        price:
          $ref: '#/components/schemas/SignalPrice'
    SignalSummary:
      type: object
      properties:
        signal:
          $ref: '#/components/schemas/SignalVerdict'
        score:
          type: number
          description: Overall score, -1 to +1.
        counts:
          $ref: '#/components/schemas/SignalCounts'
    SignalEvent:
      type: string
      description: A discrete marker that fired on a bar.
      enum:
      - golden_cross
      - death_cross
      - macd_cross_up
      - macd_cross_down
    SignalVerdict:
      type: string
      description: Decision-ready label. `score` runs -1 (strong_sell) to +1 (strong_buy).
      enum:
      - strong_sell
      - sell
      - neutral
      - buy
      - strong_buy
    SignalPoint:
      type: object
      properties:
        t:
          type: integer
          format: int64
          description: Bar open time, Unix epoch ms.
        close:
          type: number
        summary:
          $ref: '#/components/schemas/SignalVerdict'
        score:
          type: number
          description: Score for the bar, -1 to +1.
        events:
          type: array
          items:
            $ref: '#/components/schemas/SignalEvent'
    SignalCounts:
      type: object
      description: Vote tally across every indicator returned.
      properties:
        buy:
          type: integer
        neutral:
          type: integer
        sell:
          type: integer
    SignalVote:
      type: string
      description: A single indicator's vote.
      enum:
      - buy
      - neutral
      - sell
    SignalHistoryResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/SignalPoint'
        meta:
          $ref: '#/components/schemas/SignalMeta'
    SignalMeta:
      type: object
      properties:
        as_of:
          type: string
          format: date-time
        symbol:
          type: string
        interval:
          type: string
    LiveSignalResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/LiveSignal'
        meta:
          $ref: '#/components/schemas/SignalMeta'
    SignalIndicator:
      type: object
      properties:
        name:
          type: string
          description: Indicator name and parameters, e.g. RSI(14).
        value:
          type: number
          description: Primary reading. Omitted on rows reported via component fields only.
        signal_line:
          type: number
          description: MACD signal line (MACD rows only).
        k:
          type: number
          description: Stochastic %K (Stochastic rows only).
        d:
          type: number
          description: Stochastic %D (Stochastic rows only).
        vote:
          $ref: '#/components/schemas/SignalVote'
    SignalPrice:
      type: object
      properties:
        close:
          type: number
        bar_status:
          type: string
          description: '`forming` (live tick folded into the current bar) or `closed` (last settled bar).'
          enum:
          - forming
          - closed
  responses:
    TooManyRequests:
      description: Rate limit exceeded.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Invalid request parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: Valid key, but the plan or tier does not include this market/venue.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InsufficientHistory:
      description: Not enough bars to compute a signal for this symbol and interval.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    VenueSignals:
      name: venue
      in: path
      required: true
      description: Market venue for technical signals.
      schema:
        type: string
        enum:
        - stocks
        - crypto
        - forex
        - commodities
    Symbol:
      name: symbol
      in: path
      required: true
      description: Symbol, normalized to the venue's canonical form.
      schema:
        type: string
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api_key