# Social momentum

- Method: `GET`
- Path: `/social-momentum`
- Tier: Pro
- HTML docs: https://docs.hiddensystems.ai/nebula/reference/get-social-momentum/
- Interactive docs: https://docs.hiddensystems.ai/nebula/api/#endpoint=get-social-momentum

## Description

Returns post activity, unique posters, sentiment counts, and average sentiment over time, grouped by author cluster. Omit identity selectors for the global view; asset_class then defaults to equity. Asset selectors support equities, commodities, indices, and crypto assets returned by GET /assets; commodity and index IDs use asset_class=equity. Parameter rules: asset_id requires asset_class. subject_id and asset_class cannot be combined. subject_id and asset_id cannot be combined.

## cURL Example

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

## Path Parameters

No path parameters for this endpoint.

## Query Parameters

- `asset_id` (string, optional): Canonical identifier returned by /assets. Stock, commodity, and index IDs are normally ticker or market symbols and use asset_class=equity; crypto IDs are canonical crypto slugs. asset_class is mandatory whenever asset_id is present.
- `asset_class` (string, optional, allowed: equity, crypto): Namespace of asset_id, or the market class for endpoints with a class-scoped global view. Stocks, commodities, and indices use equity. Equity is the documented default only where the endpoint description states a default.
- `subject_id` (string, optional): Canonical non-asset identifier returned by /subjects. It cannot be combined with asset_id or asset_class.
- `hours` (integer, optional, default: 168): Lookback window in hours.
- `granularity` (string, optional, allowed: 1h, 2h, 4h, 12h, 1d): Requested time-series bucket size. When omitted, the service chooses a bucket size appropriate for the lookback window.

## Response

OK

- `clusters` (object, required): Social-momentum series keyed by canonical author-cluster identifier.
- `clusters.{key}[].average_sentiment_score` (number (double), required): Arithmetic mean of the source sentiment scores in the bucket.
- `clusters.{key}[].bearish_posts` (integer (int64), required): Posts classified as bearish.
- `clusters.{key}[].bullish_posts` (integer (int64), required): Posts classified as bullish.
- `clusters.{key}[].neutral_posts` (integer (int64), required): Posts classified as neutral.
- `clusters.{key}[].timestamp` (string (date-time), required): UTC RFC 3339 timestamp for the observation or bucket start.
- `clusters.{key}[].total_posts` (integer (int64), required): Post count over the metric's active lookback window.
- `clusters.{key}[].unique_posters` (integer (int64), required): Distinct posting accounts in the bucket; at coarser-than-hourly granularity this is an upper bound summed from hourly counts.

Media type: `application/json`

## JSON Response

```json
{
  "clusters": {
    "smart_money": [
      {
        "average_sentiment_score": 0.42,
        "bearish_posts": 41,
        "bullish_posts": 112,
        "neutral_posts": 31,
        "timestamp": "2026-08-07T15:00:00Z",
        "total_posts": 184,
        "unique_posters": 73
      }
    ]
  }
}
```
