Data API v2.4

Retrieve subscribed SentimenTrader indicators, historical readings, sentiment values, and intraday series through a read-only REST API.

Documentation access 22 endpoints, including intraday and custom indicators
Base URL
api.sentimentrader.com/ws
Protocol
HTTPS · GET only
Authentication
HTTP Basic
Format
JSON
This page documents the separate Data API hosted at api.sentimentrader.com. The page is hosted with the Tools and Backtest references, but the Data API endpoints are served by the legacy /ws application.

Quickstart

curl -u "you@example.com:your-password" \
  "https://api.sentimentrader.com/ws/getSymbolDataLimitDays/etf_spy?days=5"

Endpoint directory

GroupEndpointPurpose
Catalog/getAllSymbolsAll available indicators
Catalog/getAllSymbolswithIndexesIndicators with default market symbols
Catalog/getAllUserSelectedSymbolsIndicators available to the current user
Catalog/getAllUserSelectedSymbolsWithIndexesUser indicators with market symbols
Catalog/getModelDataModel indicators
Catalog/getModelSymbolswithIndexesModel indicators with market symbols
Catalog/getGroupSymbols/{group}Indicators in a named group
History/getSymbolData/{symbol}Complete indicator history
History/getSymbolSentimentData/{symbol}History with sentiment
History/getSymbolDataLimitDays/{symbol}Recent indicator periods
History/getSymbolDataSentimentLimitDays/{symbol}Recent periods with sentiment
Snapshot/getTodayDataLatest daily values
Snapshot/getTodayDataIndexesLatest values with market symbols
Snapshot/getSymbolLimitDate/{symbol}One symbol on one date
Snapshot/getAllDataForDateAll subscribed values on one date
Bulk/getAllSymbolDataLimitDaysRecent data for all subscribed indicators
Intraday/getIntradaySymbolsAvailable intraday symbols
Intraday/getSymbolIntradayHistory/{symbol}Complete intraday history
Intraday/getSymbolIntradayLimitDays/{symbol}Recent intraday periods
Intraday/getTodayIntradayDataRecords from the latest available date
Custom/getUserIndicatorsCustom indicator definitions
Custom/getUserIndicatorDataCalculated custom indicator data

Authentication

Send your SentimenTrader account email and password with HTTP Basic authentication. Access also requires an eligible Data subscription.

# cURL
curl -u "EMAIL:PASSWORD" \
  "https://api.sentimentrader.com/ws/getAllSymbols"

# Python
requests.get(
    "https://api.sentimentrader.com/ws/getAllSymbols",
    auth=(email, password),
    timeout=30,
)
RequirementBehavior
CredentialsValidated against the SentimenTrader user account.
Eligible plansData, Light Data Yearly, and Premium Data Yearly plans are accepted by the current service.
Indicator accessResponses may be filtered to the user's selected indicators and plan-level base indicators.
TransportAlways use HTTPS. Basic credentials are encoded, not encrypted by the header itself.

Request and response conventions

The service uses legacy response shapes. Read these rules before binding responses to typed models.

ConventionContract
MethodAll documented requests use GET.
Symbol fieldCatalog endpoints return url. Use this value as the path {symbol}.
Historical shapeDates are normally object keys, not a date field in an array element.
Date formatDate filters require YYYYMMDD, for example 20230103.
PeriodsThe days query parameter counts data periods. Bulk history accepts 1 through 90.
Legacy encodingSome deployments return a JSON string containing serialized JSON. If the first decode yields a string, decode that string once more.
The v2.4 PDF labels the catalog field chart_url. The implementation returns url. It also prints getAllUserSelectedSymbolswithIndexes, while the implemented route uses an uppercase WithIndexes.
Response verification. Examples marked Live verified were checked with authenticated, read-only production GET requests on July 20, 2026. Payloads are trimmed to one or two records and account-specific values may be anonymized. Unmarked examples show the documented contract shape and have not been individually live-requested.

Symbol catalog

Discover indicator identifiers before requesting history. Catalog values are metadata; the url value is the API symbol.

GET/getAllSymbols

Returns all indicators exposed by the Data API, excluding internal and relative-trend records.

Response200application/jsonCatalogItem[]
chart_namestringurlstring
Example responseJSON
[
  {
    "chart_name": "SPY Optix",
    "url": "etf_spy"
  }
]
GET/getAllSymbolswithIndexes

Returns the full indicator catalog with the default market symbol used for comparison. Missing market symbols default to SPX.

Response200application/jsonCatalogItemWithMarket[]
chart_namestringurlstringmarket_symbolstring
Example responseJSON
[
  {
    "chart_name": "SPY Optix",
    "url": "etf_spy",
    "market_symbol": "SPX"
  }
]
GET/getAllUserSelectedSymbols

Returns the catalog filtered by the authenticated user's indicator selections and plan permissions.

Response200application/jsonCatalogItem[]
chart_namestringurlstring
Example responseJSON
[
  {
    "chart_name": "SPY Optix",
    "url": "etf_spy"
  }
]
GET/getAllUserSelectedSymbolsWithIndexes

Returns the user's available indicators with their default comparison symbols. URL paths are case-sensitive; use the uppercase W shown here.

Response200application/jsonCatalogItemWithMarket[]
chart_namestringurlstringmarket_symbolstring
Example responseJSON
[
  {
    "chart_name": "Smart Money / Dumb Money Confidence Spread",
    "url": "model_smart_dumb_spread",
    "market_symbol": "SPX"
  }
]
GET/getModelData

Returns subscribed indicators whose metadata subtype is model.

Response200application/jsonCatalogItem[]
chart_namestringurlstring
Example responseJSON
[
  {
    "chart_name": "Macro Index Model",
    "url": "model_macro_index"
  }
]
GET/getModelSymbolswithIndexes

Returns model indicators with their default comparison symbols. This implemented endpoint was omitted from the v2.4 PDF.

Response200application/jsonCatalogItemWithMarket[]
chart_namestringurlstringmarket_symbolstring
Example responseJSON
[
  {
    "chart_name": "Macro Index Model",
    "url": "model_macro_index",
    "market_symbol": "SPX"
  }
]
GET/getGroupSymbols/{group}

Returns indicators assigned to a metadata group. This implemented endpoint was omitted from the v2.4 PDF.

group path · required
Response200application/jsonCatalogItem[]
chart_namestringurlstring
Example responseJSON
[
  {
    "chart_name": "SPY Optix",
    "url": "etf_spy"
  }
]

Daily, weekly, and monthly history

Frequency follows the selected indicator. The API does not resample a series based on the endpoint.

GET/getSymbolData/{symbol}

Returns the complete available history for one indicator, ordered from oldest to newest.

symbol path · catalog url
Response200application/jsonRecord<ISO datetime, Reading>
datetime keystringclosenumber
Example responseJSON
{
  "2026-07-16T00:00:00.000": { "close": 10 },
  "2026-07-17T00:00:00.000": { "close": 10 }
}

Seasonality-month symbols are an exception and return symbol, month, TotReturn, AvgReturn, and std.

GET/getSymbolSentimentData/{symbol}

Returns historical readings with the associated SentimenTrader sentiment rank or reading.

symbol path · required
Response200application/jsonRecord<ISO datetime, SentimentReading>
datetime keystringclosenumbersentimentnumber
Example responseJSON
{
  "2025-01-08T00:00:00.000": {
    "close": 51.6,
    "sentiment": 64.2
  }
}
GET/getSymbolDataLimitDays/{symbol}?days={n}

Returns the last n periods for one indicator, sorted from oldest to newest.

symbol path · requireddays query · positive integer
Response200application/jsonRecord<ISO datetime, Reading>
datetime keystringclosenumber
Example responseJSON
{
  "2026-07-16T00:00:00.000": { "close": 10 },
  "2026-07-17T00:00:00.000": { "close": 10 }
}
GET/getSymbolDataSentimentLimitDays/{symbol}?days={n}

Returns recent indicator readings with sentiment and the default comparison symbol.

symbol path · requireddays query · positive integer
Response200application/jsonRecord<ISO datetime, MarketSentimentReading>
datetime keystringclosenumbersentimentnumbermarket_symbolstring
Example responseJSON
{
  "2026-07-17T00:00:00.000": {
    "close": 10,
    "sentiment": 1,
    "market_symbol": "AAPL"
  }
}

Latest values and specific dates

Use snapshot endpoints for compact cross-sectional data, or request a strict calendar date in YYYYMMDD form.

GET/getTodayData

Returns the latest stored value and sentiment reading for each subscribed indicator. “Today” means the latest metadata value and may differ by indicator.

Response200application/jsonRecord<numeric key, Snapshot>
numeric keystringnamestringindicatorstringlast_closenumberupdate_dateISO datetime stringsentiment_valuestring
Example responseJSON
{
  "0": {
    "name": "Smart Money / Dumb Money Confidence Spread",
    "indicator": "model_smart_dumb_spread",
    "last_close": -22,
    "update_date": "2026-07-17T00:00:00.000",
    "sentiment_value": "4"
  }
}
GET/getTodayDataIndexes

Returns the same snapshot as getTodayData, plus each indicator's default comparison symbol.

Response200application/jsonRecord<numeric key, SnapshotWithMarket>
numeric keystringnamestringindicatorstringlast_closenumberupdate_dateISO datetime stringsentiment_valuestringmarket_symbolstring
Example responseJSON
{
  "0": {
    "name": "Smart Money / Dumb Money Confidence Spread",
    "indicator": "model_smart_dumb_spread",
    "last_close": -22,
    "update_date": "2026-07-17T00:00:00.000",
    "sentiment_value": "4",
    "market_symbol": "SPX"
  }
}
GET/getSymbolLimitDate/{symbol}?date={YYYYMMDD}

Returns a single indicator value for the requested date. The actual payload is date-keyed and contains close.

symbol path · requireddate query · YYYYMMDD
Response200application/jsonRecord<ISO datetime, Reading>
datetime keystringclosenumber
Example responseJSON
{
  "2026-07-17T00:00:00.000": { "close": 10 }
}
GET/getAllDataForDate?date={YYYYMMDD}

Returns available values and sentiment readings for the requested date, filtered to the authenticated user's indicator access.

date query · YYYYMMDD
Response200application/jsonRecord<indicator, Snapshot>
indicator keystringnamestringlast_closenumberupdate_datedate stringsentiment_valuenumber
Example responseJSON
{
  "model_score_short": {
    "name": "Short-term Optimism Index (Optix)",
    "last_close": 42,
    "update_date": "2026-07-17",
    "sentiment_value": 4
  }
}

Bulk recent history

Fetch multiple subscribed series in one request when building a recent-data snapshot.

GET/getAllSymbolDataLimitDays?days={n}

Returns recent cached data grouped by indicator symbol. The current implementation reads one cached record set per requested period.

days query · integer from 1 to 90
Response200application/jsonRecord<indicator, Reading[]>
indicator keystringdatedate stringclosenumber
Example responseJSON
{
  "PR_relvolatility_60d": [
    { "date": "2026-04-02", "close": 2.08 }
  ]
}

Intraday data

Intraday series use 30-minute periods. The limited-history implementation calculates 13 records per market day.

GET/getIntradaySymbols

Returns the currently supported intraday indicators. The response is keyed by chart_name.

Response200application/jsonRecord<chart_name, IntradaySymbol>
chart_name keystringurlstringmarket_symbolstring
Example responseJSON
{
  "S&P 500": {
    "url": "SPX",
    "market_symbol": "SPX"
  }
}
GET/getSymbolIntradayHistory/{symbol}

Returns all available intraday records for one symbol, ordered from oldest to newest.

symbol path · intraday catalog url
Response200application/jsonRecord<ISO datetime, IntradayReading>
datetime keystringclosenumbermarket_symbolstring
Example responseJSON
{
  "2025-01-08T09:30:00.000": {
    "close": 0.82,
    "market_symbol": "SPX"
  }
}
GET/getSymbolIntradayLimitDays/{symbol}?days={n}

Returns approximately days × 13 intraday records for one symbol.

symbol path · requireddays query · positive integer
Response200application/jsonRecord<ISO datetime, IntradayReading>
datetime keystringclosenumbermarket_symbolstring
Example responseJSON
{
  "2026-07-17T10:00:00.000": { "close": 7473.11, "market_symbol": "SPX" },
  "2026-07-17T10:30:00.000": { "close": 7488.85, "market_symbol": "SPX" }
}
GET/getTodayIntradayData

Returns all non-index intraday records from the latest date present in the database. It is not limited to one latest record per symbol.

Response200application/jsonRecord<numeric key, LatestIntradayReading>
numeric keystringdatetimeISO datetime stringclosenumbersymbolstringmarket_symbolstring
Example responseJSON
{
  "0": {
    "datetime": "2026-07-17T16:00:00.000",
    "close": 62.0184,
    "symbol": "VXN_Strength",
    "market_symbol": "SPX"
  }
}

Custom indicators

These endpoints were added after the v2.4 PDF. They expose indicators created in the SentimenTrader web application through the same Basic-authenticated Data API.

GET/getUserIndicators

Returns all custom indicator records for the authenticated account by default, ordered newest first. Query parameters are forwarded to the custom-indicator service.

all query · default trueordering query · default -create_date
Response200application/jsonCustomIndicator[]
indicator_1_urlstringindicator_2_urlstringnamestringurlstringupper_extreme_valuenumberlower_extreme_valuenumbertimeframestringmastringcalculatestringcreate_dateISO datetime string

Additional calculation settings can include indicator_weight, mul_indicator, combine_type, benchmark, next_process, and tech_code; some values may be null.

Example responseJSON
[
  {
    "indicator_1_url": "XLE",
    "indicator_2_url": "crude",
    "name": "XLE Crude ROC1 Spread",
    "url": "sy9192-sy9218-1roc_1roc_1-0-0-sh0_c|sh0_c",
    "timeframe": "daily",
    "calculate": "spread",
    "create_date": "2026-07-14T12:12:19Z"
  }
]
GET/getUserIndicatorData?url={indicator}

Calculates or retrieves data for one custom indicator owned by the authenticated account.

url query · required indicator identifier
Response200application/jsonCustomIndicatorReading[]
DTISO datetime stringclosenumbersymbolstring
Example responseJSON
[
  {
    "DT": "1998-12-23T00:00:00",
    "close": -2.6607,
    "symbol": "XLE Crude ROC1 Spread"
  }
]

Errors, access, and limits

The legacy API may express an application error in the response body even when an intermediary reports a successful HTTP response. Check both the HTTP code and payload.

StatusMeaning
401Credentials are invalid or the account does not have an eligible Data plan.
404The symbol or group was not found.
405The authenticated user has not subscribed to the requested indicator.
406The date is not in YYYYMMDD form.
410Bulk days is outside the accepted 1 through 90 range.
503Catalog data is unavailable. Retry after a short delay.
504The downstream custom-indicator service timed out.

Trial access

The source implementation limits trial accounts to the last 90 records for full-history requests. This supersedes the PDF statement that trial history is approximately one year.

Request volume

The v2.4 service does not implement a documented request-rate limit. Keep bulk requests bounded, cache catalog responses, and prefer the bulk recent-history endpoint over many repeated symbol requests.