Get a technical snapshot
A full technical-indicator snapshot (RSI, MACD, SMA/EMA/WMA, Bollinger, ATR, Stochastic, Ichimoku, VWAP, candlestick and chart patterns, plus a consensus trend) over stored daily bars. Every indicator is a deterministic transform of the stored closes/OHLCV. The snapshot is POINT-IN-TIME correct: asOf bounds the bars to those on or before it, so a backtest reads the indicator as it stood then. An indicator that needs more bars than the window holds is null - never a garbage value from too little data - and assumptions.barsUsed reports exactly how many bars were available so the reason is visible. Returns 404 for an unknown instrument or a window with no stored bars.
A full technical-indicator snapshot (RSI, MACD, SMA/EMA/WMA, Bollinger, ATR, Stochastic, Ichimoku, VWAP, candlestick and chart patterns, plus a consensus trend) over stored daily bars. Every indicator is a deterministic transform of the stored closes/OHLCV. The snapshot is POINT-IN-TIME correct: asOf bounds the bars to those on or before it, so a backtest reads the indicator as it stood then. An indicator that needs more bars than the window holds is null - never a garbage value from too little data - and assumptions.barsUsed reports exactly how many bars were available so the reason is visible. Returns 404 for an unknown instrument or a window with no stored bars.
Authorization
ApiKeyAuth technicals:readPresent your API key as a bearer token: Authorization: Bearer pk_live_....
Two environments are issued per account. A pk_test_ sandbox key returns the SAME real historical data as a live key and does NOT consume your LIVE allowance, so learning the API is free. It has its own separate windows and can be rate limited on them. A pk_live_ key reads against your allowance.
Keys carry explicit scopes (instruments:read, prices:read, actions:read, fx:read, earnings:read, options:read, news:read, sentiment:read, events:read, analytics:read, correlations:read, technicals:read, macro:read) and are enforced fail-closed, so a leaked key is bounded to what it was issued for. Revocation is immediate.
In: header
Scope: technicals:read
Path Parameters
Instrument identifier (UUID).
uuidQuery Parameters
Lookback window in CALENDAR days of stored daily bars to compute the snapshot from. Trading days are roughly 70% of this, so an indicator needing 200 bars (EMA-200) needs ~290 calendar days; below that it is reported null. Defaults to 200, bounded 1-1000.
1 <= value <= 1000200Point-in-time cut-off (yyyy-mm-dd). Only bars ON OR BEFORE this date are used, so the snapshot is the one that would have stood then. Omit for the latest snapshot.
^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{1,3})?Z)?$Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/instruments/497f6eca-6276-4993-bfeb-53cbbbba6f08/technicals"{ "data": { "rsi": { "value": 0, "signal": "overbought", "period": 0, "description": "string" }, "macd": { "value": 0, "signal": 0, "histogram": 0, "trend": "bullish", "crossover": "bullish_crossover", "description": "string" }, "stochastic": { "stochK": 0, "stochD": 0, "signal": "overbought", "description": "string" }, "ema": { "ema12": 0, "ema20": 0, "ema50": 0, "ema200": 0, "trend": "bullish", "strength": 0, "description": "string" }, "sma": { "sma20": 0, "sma50": 0, "sma200": 0, "trend": "bullish", "description": "string" }, "wma": { "wma20": 0, "wma50": 0, "wma100": 0, "trend": "bullish", "description": "string" }, "ichimoku": { "tenkan": 0, "kijun": 0, "senkouSpanA": 0, "senkouSpanB": 0, "chikouSpan": 0, "signal": "bullish", "description": "string" }, "bollingerBands": { "upper": 0, "middle": 0, "lower": 0, "bandwidth": 0, "percentB": 0, "signal": "overbought", "description": "string" }, "atr": { "value": 0, "signal": "high_volatility", "period": 0, "description": "string" }, "vwap": { "value": 0, "signal": "above", "description": "string" }, "candlestick": { "signal": "bullish", "confidence": 0, "patterns": [ { "name": "string", "confidence": 0 } ], "description": "string" }, "chartPatterns": { "patterns": [ { "type": "string", "signal": "bullish", "confidence": 0, "startIndex": 0, "endIndex": 0, "priceTarget": 0, "description": "string" } ], "dominantPattern": { "type": "string", "signal": "bullish", "confidence": 0, "priceTarget": 0, "description": "string" }, "description": "string" }, "trend": { "direction": "bullish", "strength": 0, "confidence": 0, "description": "string" }, "timestamp": "string", "dataPoints": -9007199254740991, "symbol": "string", "assumptions": { "lookbackDays": -9007199254740991, "barsUsed": -9007199254740991, "asOf": "string" } }, "meta": { "asOf": "string", "source": "string", "stale": true }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}{ "error": { "code": "invalid_request", "message": "string", "docsUrl": "http://example.com", "details": { "property1": [ "string" ], "property2": [ "string" ] } }}List sentiment scores GET
Signed sentiment scores for an instrument, returned EXACTLY as stored and never rescaled - negative is bearish, positive is bullish, magnitude is the source own scale. Every row carries subjectClass (business sentiment may LEAD price; market_commentary is REACTIVE and must not be read as a signal) and isHeadlineOnly (whether the score is headline-only, a lower-confidence coverage depth). Filter by as-of date range, subjectClass and source.
Get a macro time series GET
A FRED macro time series (e.g. DGS10, CPIAUCSL, VIXCLS) with its title, units, native frequency and dated observations in ascending order, optionally bounded by start and end. The series id MUST be on the published allowlist - an unknown id is rejected with invalid_request rather than proxied, so this is never an open FRED gateway. FRED encodes a missing observation as "." and those rows are OMITTED rather than coerced to 0, so a gap never reads as a real zero. When no FRED API key is configured the endpoint returns a typed unavailable error rather than a fabricated series.