Sentiment

GET /sentiment
GetSentiment

How bullish or bearish the conversation is about an asset, a subject, or a whole market, over time. sentiment_signal is bullish minus bearish posts over the trailing 24 hours, recent posts weighted more: positive is net bullish. It grows with volume, so compare an asset with its own history.

cohorts gives the same measure for bots and, for one asset or subject, top callers. Send clusters to read one or more author groups, or leave out the asset and subject for a market-wide view.

Parameter rules:

  • asset_id must be sent with asset_class.
  • subject_id cannot be combined with asset_id or asset_class.
  • Without asset_id, asset_class must be equity or crypto; commodity and index need an asset_id.

Wallet payment available at https://nebula-api.hiddensystems.ai/api/v1/x402/sentiment. No Nebula account or API key required; check the payment offer before signing. x402 payment guide.

Parameters

asset_id string QUERY

Asset ID from /assets or /search, such as NVDA, GLD, SPX, or bitcoin. Send it with the asset_class returned alongside it.

Example:NVDA

asset_class string QUERY

With asset_id, the asset's class. Without it, the market to aggregate: equity (stocks, commodities, and indices; the default) or crypto.

Allowed values
equitycommodityindexcrypto

Example:equity

subject_id string QUERY

Canonical non-asset identifier returned by /subjects or /search, such as text:jensen huang or handle:elonmusk. Accepted in any case. It cannot be combined with asset_id or asset_class.

Example:text:jensen huang

hours integer QUERY

Lookback window in hours. Free plans reach back 90 days; further returns 403.

Default:168

granularity string QUERY

Requested time-series bucket size. When omitted, the service chooses a bucket size appropriate for the lookback window.

Allowed values
1h2h4h12h1d

Example:1h

clusters array<string> QUERY

Author clusters to read; repeat to combine, for example clusters=kols&clusters=media. Selected clusters are added together, and an author can belong to several.

  • Callers: smart_money (best-performing callers), dumb_money (worst-performing), top_degens (best on small-cap crypto)
  • Timing: early_movers (first to talk about an asset as attention rises), late_movers (arrive at the peak or after)
  • Builders: developers, founders, team_leaders, project_accounts
  • Institutions: vcs, asset_managers, dao_guild_funds, incubators, exchanges
  • Influence: kols, celebrities, media, marketer, shiller
  • Analysts: ta_analyst, fa_analyst, macro_analyst, onchain_analyst, investigators
  • Traders: position_trader, swing_trader, day_trader
  • Bias: perma_bull, doomer, tribalist
  • Other: political, nft, bots, automated_ai
  • Communities, by where the post was made: wallstreetbets, reddit

Example:smart_money

cURL Example

curl --request GET \
  --url 'https://nebula-api.hiddensystems.ai/api/v1/public/sentiment' \
  --header 'X-API-Key: YOUR_API_KEY'

Responses

200 OK
400 Bad Request
401 Unauthorized
402 Credits used up; response includes renewal timing and purchased credit balance
403 Forbidden
404 Not Found
405 Method not allowed; the Allow header lists the supported method
429 Too Many Requests
500 Internal Server Error
503 Service Unavailable

Media type application/json

cohorts
object required

The same measure for other author groups: bots, and top_callers when that population is available. The non-bot population is series itself.

Allowed keys
botstop_callers
cohorts.{key}[].bearish_posts
number (double) required

Bearish posts over the trailing 24 hours ending at this point; interval_bearish_posts is the bucket's.

cohorts.{key}[].bullish_posts
number (double) required

Bullish posts over the trailing 24 hours ending at this point; interval_bullish_posts is the bucket's.

cohorts.{key}[].interval_bearish_posts
number (double) optional

Bearish posts in this emitted time bucket.

cohorts.{key}[].interval_bullish_posts
number (double) optional

Bullish posts in this emitted time bucket.

cohorts.{key}[].interval_neutral_posts
number (double) optional

Neutral posts in this emitted time bucket.

cohorts.{key}[].interval_posts
number (double) optional

Posts in this emitted time bucket, before lookback accumulation.

cohorts.{key}[].neutral_posts
number (double) required

Neutral posts over the trailing 24 hours ending at this point; interval_neutral_posts is the bucket's.

cohorts.{key}[].sentiment_signal
number (double) required

Decay-weighted net bullish posts: bullish minus bearish. Positive is bullish, negative is bearish, and magnitude grows with activity.

cohorts.{key}[].timestamp
string (date-time) required

UTC RFC 3339 timestamp for the observation or bucket start.

cohorts.{key}[].total_posts
number (double) required

Posts over the trailing 24 hours ending at this point, not this bucket alone; interval_posts is the bucket's.

series
array<object> required

Chronologically ordered observations.

series[].bearish_posts
number (double) required

Bearish posts over the trailing 24 hours ending at this point; interval_bearish_posts is the bucket's.

series[].bullish_posts
number (double) required

Bullish posts over the trailing 24 hours ending at this point; interval_bullish_posts is the bucket's.

series[].interval_bearish_posts
number (double) optional

Bearish posts in this emitted time bucket.

series[].interval_bullish_posts
number (double) optional

Bullish posts in this emitted time bucket.

series[].interval_neutral_posts
number (double) optional

Neutral posts in this emitted time bucket.

series[].interval_posts
number (double) optional

Posts in this emitted time bucket, before lookback accumulation.

series[].neutral_posts
number (double) required

Neutral posts over the trailing 24 hours ending at this point; interval_neutral_posts is the bucket's.

series[].sentiment_signal
number (double) required

Decay-weighted net bullish posts: bullish minus bearish. Positive is bullish, negative is bearish, and magnitude grows with activity.

series[].timestamp
string (date-time) required

UTC RFC 3339 timestamp for the observation or bucket start.

series[].total_posts
number (double) required

Posts over the trailing 24 hours ending at this point, not this bucket alone; interval_posts is the bucket's.

{
  "cohorts": {
    "bots": [
      {
        "bearish_posts": 438,
        "bullish_posts": 1120,
        "neutral_posts": 284,
        "sentiment_signal": 128.6,
        "timestamp": "2026-08-07T15:00:00Z",
        "total_posts": 1842
      }
    ]
  },
  "series": [
    {
      "bearish_posts": 438,
      "bullish_posts": 1120,
      "interval_bearish_posts": 18,
      "interval_bullish_posts": 46,
      "interval_neutral_posts": 10,
      "interval_posts": 74,
      "neutral_posts": 284,
      "sentiment_signal": 128.6,
      "timestamp": "2026-08-07T15:00:00Z",
      "total_posts": 1842
    }
  ]
}