> ## Documentation Index
> Fetch the complete documentation index at: https://docs.glider.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# tRPC TradFi Market Data API

> Glider-tradeable asset news, U.S. equity and index snapshots, and ticker overviews backed by Massive market data.

The `tradFiMarketData.*` namespace is available on the public tRPC base
endpoint:

* Base endpoint: `POST /v1/trpc`
* Namespace: `tradFiMarketData.*`
* Auth: public
* Upstream: [Massive REST API](https://massive.com/docs/rest/quickstart)
* Server cache: 300 seconds by default. Platform API uses process memory plus
  Redis or the asset-data-sync KV-backed remote cache when configured.

## REST Assets

* `GET /v1/tradfi-market-data/tickers/{ticker}/branding/{kind}`
  * Purpose: proxy Massive ticker branding images without exposing the Massive
    API key to browser clients
  * Params:
    * `ticker`: normalized stock ticker
    * `kind`: `logo` or `icon`
  * Response: image bytes with the upstream content type when branding exists;
    `404` when Massive has no branding for that ticker

## Procedures

* `tradFiMarketData.getStockNews`
  * Purpose: fetch recent stock-market news, optionally scoped to caller-provided
    tickers
  * Input:
    * optional `tickers`, up to 25 symbols
    * optional `limit`, 1-50, default `6`
  * Upstream endpoint:
    [`GET /v2/reference/news`](https://massive.com/docs/rest/stocks/news)
  * Response includes normalized articles, publishers, tickers, insights, and
    cache metadata

* `tradFiMarketData.getTradeableAssetNews`
  * Purpose: fetch recent stock-market news for Glider-tradeable RWA underlyings
    without requiring clients to know the tradeable ticker universe
  * Input:
    * optional `limit`, 1-50, default `6`
  * Upstream endpoint:
    [`GET /v2/reference/news`](https://massive.com/docs/rest/stocks/news)
  * Response includes normalized articles, publishers, tradeable tickers,
    tradeable insights, and cache metadata. Results are limited to canonical RWA
    assets with `asset_class` `equity` or `fund` and an issuer product with at
    least one linked onchain asset.

* `tradFiMarketData.getStockSnapshot`
  * Purpose: fetch the latest stock snapshot for one ticker
  * Input:
    * required `ticker`
  * Upstream endpoint:
    [`GET /v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}`](https://massive.com/docs/rest/stocks/snapshots/single-ticker-snapshot)
  * Response includes a normalized single-item `snapshots` array plus cache
    metadata

* `tradFiMarketData.getStockSnapshots`
  * Purpose: fetch latest stock snapshots for a ticker set, using Massive's
    full-market snapshot endpoint with a ticker filter
  * Input:
    * required `tickers`, 1-100 symbols
    * optional `includeOtc`, default `false`
  * Upstream endpoint:
    [`GET /v2/snapshot/locale/us/markets/stocks/tickers`](https://massive.com/docs/rest/stocks/snapshots/full-market-snapshot)
  * Response includes normalized snapshots, count, request id, and cache
    metadata

* `tradFiMarketData.getStockAggregateBars`
  * Purpose: fetch OHLC bars for stock detail charts
  * Input:
    * required `ticker`
    * required `multiplier`, 1-1440
    * required `timespan`: `minute`, `hour`, `day`, `week`, `month`,
      `quarter`, or `year`
    * required `from` and `to` as `YYYY-MM-DD` or millisecond timestamps
    * optional `adjusted`, default `true`
    * optional `sort`, `asc` or `desc`, default `asc`
    * optional `limit`, 1-50000, default `5000`
  * Upstream endpoint:
    [`GET /v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to}`](https://massive.com/docs/stocks/get_v2_aggs_ticker__stocksTicker__range__multiplier___timespan___from___to)
  * Response includes normalized timestamped OHLC bars, volume, VWAP,
    transaction count, request id, and cache metadata

* `tradFiMarketData.getIndexSnapshots`
  * Purpose: fetch latest market index snapshots for dashboard surfaces such as
    the S\&P 500, Nasdaq 100, Dow Jones, Russell 2000, or VIX
  * Input:
    * required `tickers`, 1-20 index symbols such as `I:SPX` or `I:VIX`
  * Upstream endpoint:
    [`GET /v3/snapshot/indices`](https://massive.com/docs/rest/indices/snapshots/indices-snapshot)
  * Response includes normalized index values, session open/high/low/close,
    change, change percent, count, request id, and cache metadata

* `tradFiMarketData.getStockDetails`
  * Purpose: hydrate a stock detail surface with Massive ticker overview,
    snapshot, and recent news
  * Input:
    * required `ticker`
    * optional `newsLimit`, 1-20, default `5`
  * Upstream endpoints:
    [`GET /v3/reference/tickers/{ticker}`](https://massive.com/docs/rest/stocks/tickers/ticker-overview),
    [`GET /v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}`](https://massive.com/docs/rest/stocks/snapshots/single-ticker-snapshot),
    and [`GET /v2/reference/news`](https://massive.com/docs/rest/stocks/news)
  * Response includes ticker overview fields such as company description,
    branding logo/icon URLs, homepage, market cap, SIC code/industry, FIGIs,
    employees, normalized snapshot, latest news articles, and separate cache
    metadata for each upstream request

## Runtime Notes

* Tickers are trimmed, validated, uppercased, and limited to alphanumeric
  symbols plus `.` and `-`.
* Index tickers are trimmed, validated, uppercased, and also allow `:` for
  Massive index symbols such as `I:SPX`.
* Dashboard stock news uses canonical RWA assets in `core.asset_canonical` with
  `asset_class` `equity` or `fund`, then requires an issuer product with at
  least one linked onchain asset before requesting/filtering Massive news
  through `getTradeableAssetNews`. This is issuer-neutral so Ondo, xStocks, or
  future issuer products can enter the news universe through data.
* If `MASSIVE_API_KEY` is not configured, procedures return successful empty
  payloads with `configured: false` so browser surfaces can degrade cleanly.
* Ticker overview lookup treats missing Massive reference rows as a successful
  `overview: null` response so symbol pages can still show issuer products,
  snapshots, or news when only part of the provider surface is available.
* Massive stock snapshots can include all-zero intraday bars outside an active
  market session. The API treats those bars as missing data and falls back to
  previous-day close for display surfaces instead of returning a `$0` price.
* The platform API reads `MASSIVE_BASE_URL` and
  `MASSIVE_CACHE_TTL_SECONDS` from environment config, defaulting to
  `https://api.massive.com` and `300`.

## Example Calls

Fetch latest Glider-tradeable equity and ETF market news:

```bash theme={null}
curl --request POST \
  --url 'https://api.glider.fi/v1/trpc/tradFiMarketData.getTradeableAssetNews' \
  --header 'content-type: application/json' \
  --data '{"json":{"limit":4}}'
```

Fetch recent news for NVIDIA:

```bash theme={null}
curl --request POST \
  --url 'https://api.glider.fi/v1/trpc/tradFiMarketData.getStockDetails' \
  --header 'content-type: application/json' \
  --data '{"json":{"ticker":"NVDA","newsLimit":5}}'
```

Fetch snapshots for several tokenized equity underlyings:

```bash theme={null}
curl --request POST \
  --url 'https://api.glider.fi/v1/trpc/tradFiMarketData.getStockSnapshots' \
  --header 'content-type: application/json' \
  --data '{"json":{"tickers":["AAPL","MSFT","NVDA"],"includeOtc":false}}'
```

Fetch intraday aggregate bars for Apple:

```bash theme={null}
curl --request POST \
  --url 'https://api.glider.fi/v1/trpc/tradFiMarketData.getStockAggregateBars' \
  --header 'content-type: application/json' \
  --data '{"json":{"ticker":"AAPL","multiplier":5,"timespan":"minute","from":"2026-04-29","to":"2026-04-30","limit":500}}'
```

Fetch major market index snapshots:

```bash theme={null}
curl --request POST \
  --url 'https://api.glider.fi/v1/trpc/tradFiMarketData.getIndexSnapshots' \
  --header 'content-type: application/json' \
  --data '{"json":{"tickers":["I:SPX","I:NDX","I:DJI","I:RUT","I:VIX"]}}'
```
