---
title: "Token Deep Dive"
method: GET
path: "/research/tokens/{symbol}"
tags: ["research"]
---

# Token Deep Dive

`GET /research/tokens/{symbol}`

## Request

- Base URL: `https://mcp.f1ow.com/v1`
- URL: `https://mcp.f1ow.com/v1/research/tokens/{symbol}`
- Auth: one of:
  - HTTP bearer
  - none

Aggregated single-coin dossier: market data (spot/perp price, funding, market-wide OI, long/short, liquidations — the same enriched line as market_quotes), global market context (dominance, Fear & Greed), multi-timeframe technicals computed in-house from candles (4h + 1d: RSI, EMA/SMA, MACD, ATR, Bollinger, ADX, trend — the same numbers as ta_technicals), on-chain TVL/fees (when the symbol is a tracked chain), news, a grounded narrative synthesis with citations, upcoming catalyst events, social sentiment, ETF flows, prediction-market odds, live provider coverage, and a per-section status list that distinguishes an empty section from a failed feed — for one symbol (e.g. 'ETH').

## Path parameters

- `symbol` string, required: Coin symbol, e.g. 'ETH' or 'BTC'

## Response `200`

The result.

- object
  - `data` object
    - `symbol` string, required
    - `market` object: Same shape as one market_quotes item; omitted when no provider covers the symbol
    - `technicals` object[]: In-house per-timeframe snapshots; same item shape as ta_technicals's timeframes. Empty when no timeframe could be analyzed.
    - `news` object[]
      - `title` string
      - `url` string
      - `snippet` string
      - `date` string: Publish date; omitted when unknown
      - `source` string
      - `kind` string: Item type: article, tweet or exchange (announcement); empty when the feed doesn't say
      - `coins` string[]: Coin symbols the feed tagged on the item, e.g. ["BTC","ETH"]
      - `impact` object: Measured price move after the headline broke; omitted when not measured
        - `coin` string
        - `pct` number: Net move over the window, percentage points, e.g. 1.9
        - `up` number: Best move reached in the window, percentage points
        - `down` number: Worst move reached in the window, percentage points
        - `windowMs` number: Measurement window in milliseconds, e.g. 3600000
    - `narrative` object
      - `answer` string
      - `citations` string[]
    - `catalysts` object[]
      - `title` string
      - `coins` string[]
      - `eventDate` string
      - `dateAdded` string
      - `categories` string[]
      - `source` string
    - `marketContext` object: Same shape as market_overview
    - `onChain` object
      - `chainName` string
      - `tvlUsd` number: Total value locked, USD
      - `fees24hUsd` number
      - `fees7dUsd` number
      - `fees30dUsd` number
      - `feesChangePct24h` number: 24h fees change, percentage points
    - `social` object
      - `symbol` string
      - `galaxyScore` number: 0-100 composite
      - `altRank` number: 1-based rank, lower is stronger
      - `sentimentPct` number: Bullish share, percentage points
      - `socialVolume24h` number
      - `socialDominancePct` number: Share of total crypto social volume, percentage points
      - `interactions24h` number
    - `etfFlow` object
      - `asset` string
      - `dateMs` integer: Flow date, Unix epoch milliseconds
      - `asOfAt` string: Flow date, ISO-8601 UTC
      - `ageHours` number: How old the flow date is now, in hours. ETF flows settle behind spot and skip weekends, so this is routinely >24.
      - `stale` boolean: True when the flow date is more than 96h old — the series has missed a publication
      - `totalFlowUsd` number: Net flow across all funds, USD (positive = inflow)
      - `priceUsd` number: The underlying's price ON THE FLOW DATE, not spot — compare against ageHours before reading it as current
      - `byTicker` object[]
        - `ticker` string
        - `flowUsd` number: Per-fund net flow, USD
    - `predictionMarkets` object[]
      - `question` string
      - `outcomes` object[]
        - `outcome` string
        - `probability` number: Market-implied probability, 0-1
      - `volumeUsd` number
      - `liquidityUsd` number
      - `endDate` string
      - `url` string
      - `source` string
    - `sections` object[]: Per-section outcome, so an empty section can be told apart from a failed feed. Check this before reading an empty array as a real absence.
      - `name` string: Section key, e.g. news, narrative, catalysts
      - `status` string: ok, empty (feed answered, nothing for this symbol), not_applicable, or unavailable (feed failed)
      - `reason` string: Present for not_applicable and unavailable
    - `providerCoverage` object[]
      - `name` string
      - `status` string: healthy, degraded, or offline
      - `reason` string: Present only when degraded or offline
  - `text` string, required: Human-readable rendering of the result.
  - `meta` ResponseMeta
    - `generatedAt` string, date-time: When the data was produced (source timestamp where the provider has one), ISO 8601 UTC

## Other responses

- `400`: An argument is missing or invalid.
- `401`: No credential was sent.
- `402`: x402 route: a priced call without a valid payment (challenge in the base64 PAYMENT-REQUIRED header). Metered routes: the account balance or access period is spent.
- `403`: The credential was rejected.
- `500`: Unexpected server error.
- `502`: The data source could not answer.

---

[API](https://skmtc.dev/f1ow/apis/f1ow-api.md) · [All operations](https://skmtc.dev/f1ow/apis/f1ow-api/llms.txt) · [OpenAPI document](https://skmtc.dev/f1ow/apis/f1ow-api/revisions/6974f25b6067?raw)
