# Ruma Public API Base URL: https://api.ruma.fun/api/v1/public Reference index: https://docs.ruma.fun/reference/ OpenAPI JSON: https://docs.ruma.fun/openapi.json This file concatenates the main endpoint reference pages in Markdown so AI agents can read the whole public API without rendering JavaScript. # Token BTC dominance - Method: `GET` - Path: `/token/{id}/btc-dominance` - Tier: Starter - HTML docs: https://docs.ruma.fun/reference/get-token-id-btc-dominance/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-btc-dominance ## Description Market cap vs BTC dominance time-series for the token. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/btc-dominance' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `change` (object): Current period-over-period change metrics. - `change.pct` (number (double)): No description provided. - `current` (object): Latest BTC dominance snapshot for the token. - `current.btc_dominance_pct` (number (double)): BTC share of combined BTC + token market cap (percentage). - `current.btc_market_cap` (number (double)): Bitcoin market capitalization in USD for this bucket. - `current.token_market_cap` (number (double)): Token market capitalization in USD for this bucket. - `data` (array): Token market cap and BTC dominance time series. - `data[].btc_dominance_pct` (number (double)): BTC share of combined BTC + token market cap (percentage). - `data[].btc_market_cap` (number (double)): Bitcoin market capitalization in USD for this bucket. - `data[].time` (string (date-time)): UTC timestamp for the data point. - `data[].token_market_cap` (number (double)): Token market capitalization in USD for this bucket. Media type: `application/json` ## JSON Response ```json { "change": { "pct": 0 }, "current": { "btc_dominance_pct": 0, "btc_market_cap": 0, "token_market_cap": 0 }, "data": [ { "btc_dominance_pct": 0, "btc_market_cap": 0, "time": "2026-01-15T12:00:00Z", "token_market_cap": 0 } ] } ``` # Token cultiness index - Method: `GET` - Path: `/token/{id}/cultiness-index` - Tier: Scale - HTML docs: https://docs.ruma.fun/reference/get-token-id-cultiness-index/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-cultiness-index ## Description Cultiness index time-series for the token. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/cultiness-index' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `series` (array): Cultiness index time series. - `series[].index` (number (double)): Index value (typically 0-100 scale). - `series[].time` (string (date-time)): UTC timestamp for the data point. Media type: `application/json` ## JSON Response ```json { "series": [ { "index": 0, "time": "2026-01-15T12:00:00Z" } ] } ``` # Token dumb money sentiment - Method: `GET` - Path: `/token/{id}/dumb-money-sentiment` - Tier: Growth - HTML docs: https://docs.ruma.fun/reference/get-token-id-dumb-money-sentiment/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-dumb-money-sentiment ## Description Sentiment time-series from dumb money cohort only. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/dumb-money-sentiment' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `data` (array): Dumb-money sentiment series only. - `data[].bearish_posts` (number (double)): Count of bearish posts included in the computed window. - `data[].bucket_start` (string (date-time)): UTC bucket start timestamp. - `data[].bullish_posts` (number (double)): Count of bullish posts included in the computed window. - `data[].interval_bearish_posts` (number (double)): Bearish posts in the current emitted interval bucket. - `data[].interval_bullish_posts` (number (double)): Bullish posts in the current emitted interval bucket. - `data[].interval_neutral_posts` (number (double)): Neutral posts in the current emitted interval bucket. - `data[].interval_posts` (number (double)): Posts in the current emitted interval bucket. - `data[].neutral_posts` (number (double)): Count of neutral posts included in the computed window. - `data[].sentiment_score` (number (double)): Sentiment score on a 0-100 scale (higher is more bullish). - `data[].sentiment_score_smoothed` (number (double)): Smoothed sentiment score (0-100) when available. - `data[].sentiment_score_z` (number (double)): Z-score normalized sentiment where available. - `data[].sentiment_signal` (number (double)): Model-level sentiment signal used for downstream ranking when available. - `data[].total_posts` (number (double)): Total posts included in the computed window. - `data[].total_posts_smoothed` (number (double)): Smoothed total-posts series where available. Media type: `application/json` ## JSON Response ```json { "data": [ { "bearish_posts": 0, "bucket_start": "2026-01-15T12:00:00Z", "bullish_posts": 0, "interval_bearish_posts": 0, "interval_bullish_posts": 0, "interval_neutral_posts": 0, "interval_posts": 0, "neutral_posts": 0, "sentiment_score": 0, "sentiment_score_smoothed": 0, "sentiment_score_z": 0, "sentiment_signal": 0, "total_posts": 0, "total_posts_smoothed": 0 } ] } ``` # Token emotions series - Method: `GET` - Path: `/token/{id}/emotions-series` - Tier: Starter - HTML docs: https://docs.ruma.fun/reference/get-token-id-emotions-series/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-emotions-series ## Description Emotion distribution (joy, fear, etc.) over time for the token. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/emotions-series' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `series` (object, allowed keys: anger, anticipation, boredom, confidence, disgust, distrust, fear, greed, joy, love, optimism, pessimism, sadness, surprise, trust): Per-emotion time series keyed by emotion label. Media type: `application/json` ## JSON Response ```json { "series": { "anger": [ { "proportion": 0.08, "time": "2026-01-15T12:00:00Z" } ], "anticipation": [ { "proportion": 0.04, "time": "2026-01-15T12:00:00Z" } ], "boredom": [ { "proportion": 0.01, "time": "2026-01-15T12:00:00Z" } ], "confidence": [ { "proportion": 0.07, "time": "2026-01-15T12:00:00Z" } ], "disgust": [ { "proportion": 0.01, "time": "2026-01-15T12:00:00Z" } ], "distrust": [ { "proportion": 0.02, "time": "2026-01-15T12:00:00Z" } ], "fear": [ { "proportion": 0.15, "time": "2026-01-15T12:00:00Z" } ], "greed": [ { "proportion": 0.2, "time": "2026-01-15T12:00:00Z" } ], "joy": [ { "proportion": 0.25, "time": "2026-01-15T12:00:00Z" } ], "love": [ { "proportion": 0.03, "time": "2026-01-15T12:00:00Z" } ], "optimism": [ { "proportion": 0.06, "time": "2026-01-15T12:00:00Z" } ], "pessimism": [ { "proportion": 0.03, "time": "2026-01-15T12:00:00Z" } ], "sadness": [ { "proportion": 0.02, "time": "2026-01-15T12:00:00Z" } ], "surprise": [ { "proportion": 0.01, "time": "2026-01-15T12:00:00Z" } ], "trust": [ { "proportion": 0.02, "time": "2026-01-15T12:00:00Z" } ] } } ``` # Token follower history - Method: `GET` - Path: `/token/{id}/follower-history` - Tier: Starter - HTML docs: https://docs.ruma.fun/reference/get-token-id-follower-history/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-follower-history ## Description Total follower counts over time for the token. Query by days. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/follower-history' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `days` (integer, optional): Lookback window in days. ## Response OK - `data` (array): Follower history points for tracked project/handle accounts. - `data[].followers_count` (integer (int64)): Total followers at the snapshot timestamp. - `data[].snapshot_at` (string (date-time)): UTC timestamp of the follower snapshot. Media type: `application/json` ## JSON Response ```json { "data": [ { "followers_count": 0, "snapshot_at": "2026-01-15T12:00:00Z" } ] } ``` # Token FOMO/FUD index - Method: `GET` - Path: `/token/{id}/fomo-fud-index` - Tier: Free - HTML docs: https://docs.ruma.fun/reference/get-token-id-fomo-fud-index/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-fomo-fud-index ## Description FOMO & FUD index time-series for the token (0–100 scale). ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/fomo-fud-index' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `current` (object): Latest FOMO/FUD index value. - `current.index` (number (double)): Index value (typically 0-100 scale). - `current.label` (string): Human-readable label for the index regime. - `debug` (object): No description provided. - `metadata` (object): Model metadata and component weights. - `metadata.components` (array): Model components contributing to the index. - `metadata.components[].description` (string): No description provided. - `metadata.components[].name` (string): Display name. - `metadata.components[].weight` (number (double)): No description provided. - `metadata.hours` (integer): Lookback window in hours used to compute the metric. - `metadata.labels` (array): Human-readable labels for index regimes. - `metadata.scale` (string): No description provided. - `metadata.token_id` (integer (int64)): Internal token identifier. - `series` (array): FOMO/FUD index time series. - `series[].absolute_momentum` (number (double)): Composite absolute momentum component. - `series[].debug_mom_long` (integer): No description provided. - `series[].debug_mom_short` (integer): No description provided. - `series[].debug_sent_long` (integer): No description provided. - `series[].debug_sent_short` (integer): No description provided. - `series[].debug_vol_long` (integer): No description provided. - `series[].debug_vol_short` (integer): No description provided. - `series[].emotions` (number (double)): No description provided. - `series[].immediate_momentum` (number (double)): Momentum contribution from the most recent window. - `series[].immediate_sentiment` (number (double)): Sentiment contribution from the most recent window. - `series[].immediate_volume` (number (double)): Volume contribution from the most recent window. - `series[].index` (number (double)): Index value (typically 0-100 scale). - `series[].label` (string): Human-readable label for the index regime. - `series[].long_abs_momentum` (number (double)): Long-horizon absolute momentum component. - `series[].long_rel_momentum` (number (double)): Long-horizon relative momentum component. - `series[].momentum` (number (double)): No description provided. - `series[].post_volume` (number (double)): Post volume used in the FOMO/FUD index calculation. - `series[].relative_momentum` (number (double)): Composite relative momentum component. - `series[].relative_volume` (number (double)): Relative social or trading volume vs baseline. - `series[].sentiment` (number (double)): No description provided. - `series[].short_abs_momentum` (number (double)): Short-horizon absolute momentum component. - `series[].short_rel_momentum` (number (double)): Short-horizon relative momentum component. - `series[].social_volume_multiplier` (number (double)): Multiplier capturing how elevated social volume is vs baseline. - `series[].time` (string (date-time)): UTC timestamp for the data point. - `series[].volatility` (number (double)): No description provided. Media type: `application/json` ## JSON Response ```json { "current": { "index": 0, "label": "string" }, "debug": {}, "metadata": { "components": [ { "description": "string", "name": "string", "weight": 0 } ], "hours": 0, "labels": [ "string" ], "scale": "string", "token_id": 0 }, "series": [ { "absolute_momentum": 0, "debug_mom_long": 0, "debug_mom_short": 0, "debug_sent_long": 0, "debug_sent_short": 0, "debug_vol_long": 0, "debug_vol_short": 0, "emotions": 0, "immediate_momentum": 0, "immediate_sentiment": 0, "immediate_volume": 0, "index": 0, "label": "string", "long_abs_momentum": 0, "long_rel_momentum": 0, "momentum": 0, "post_volume": 0, "relative_momentum": 0, "relative_volume": 0, "sentiment": 0, "short_abs_momentum": 0, "short_rel_momentum": 0, "social_volume_multiplier": 0, "time": "2026-01-15T12:00:00Z", "volatility": 0 } ] } ``` # Token insights - Method: `GET` - Path: `/token/{id}/insights` - Tier: Scale - HTML docs: https://docs.ruma.fun/reference/get-token-id-insights/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-insights ## Description Paginated list of insights for the token. Filter by time range, tags, order. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/insights' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `limit` (integer, optional): Maximum number of items to return (default and max may vary by endpoint). - `offset` (integer, optional): Number of items to skip for pagination (use with limit). - `startTimeAfter` (string (date-time), optional): Return insights that start after this ISO 8601 date-time. - `startTimeBefore` (string (date-time), optional): Return insights that start before this ISO 8601 date-time. - `updatedAtAfter` (string (date-time), optional): Return insights last updated after this ISO 8601 date-time. - `updatedAtBefore` (string (date-time), optional): Return insights last updated before this ISO 8601 date-time. - `tags` (string, optional): Filter insights by tags (comma-separated; include only insights with any of these tags). - `excludeTags` (string, optional): Exclude insights that have any of these tags (comma-separated). - `orderBy` (string, optional): Sort order for insights (e.g. start_time_asc, start_time_desc, updated_at_desc). ## Response OK - `insights` (array): Paginated insight records related to the token. - `insights[].accounts` (array): No description provided. - `insights[].accounts[].author_id` (integer (int64)): Internal Ruma author identifier for this account. - `insights[].accounts[].avatar_url` (string): URL of the account’s avatar image. - `insights[].accounts[].display_name` (string): Display name of the author account. - `insights[].accounts[].handle` (string): No description provided. - `insights[].accounts[].screen_name` (string): Screen name or handle on the source platform. - `insights[].accounts[].source` (string): Origin/source of the insight data. - `insights[].accounts[].source_user_id` (string): Identifier for the author on the source platform. - `insights[].embedding` (array): Numeric embedding vector for semantic similarity search. - `insights[].enriched_related_posts` (array): Posts related to this insight with additional enrichment. - `insights[].enriched_related_posts[].allHandles` (array): No description provided. - `insights[].enriched_related_posts[].allProjects` (array): No description provided. - `insights[].enriched_related_posts[].callPerformance` (object): No description provided. - `insights[].enriched_related_posts[].permalink` (string): No description provided. - `insights[].enriched_related_posts[].postId` (string): No description provided. - `insights[].enriched_related_posts[].postType` (string): No description provided. - `insights[].enriched_related_posts[].postedAt` (string (date-time)): No description provided. - `insights[].enriched_related_posts[].project` (object): No description provided. - `insights[].enriched_related_posts[].relatedHandle` (string): No description provided. - `insights[].enriched_related_posts[].relatedToken` (integer (int64)): No description provided. - `insights[].enriched_related_posts[].sentimentScore` (number (double)): No description provided. - `insights[].enriched_related_posts[].source` (string): Origin/source of the insight data. - `insights[].enriched_related_posts[].tags` (array): Tag selectors applied to the request. - `insights[].enriched_related_posts[].tweet` (object): No description provided. - `insights[].enriched_related_posts[].user` (object): No description provided. - `insights[].headline` (string): No description provided. - `insights[].id` (integer (int64)): No description provided. - `insights[].importance_score` (integer): Relative importance score for the insight (higher is more important). - `insights[].projects` (array): No description provided. - `insights[].projects[].handle` (string): No description provided. - `insights[].projects[].image_url` (string): Project or token logo URL. - `insights[].projects[].internal_id` (integer (int64)): Internal Ruma identifier for the account or project. - `insights[].projects[].name` (string): Display name. - `insights[].projects[].symbol` (string): Token symbol. - `insights[].sentiment` (integer): No description provided. - `insights[].start_time` (string (date-time)): When the insight became active or relevant (UTC). - `insights[].summary` (string): Summary output for the endpoint. - `insights[].tags` (array): Tag selectors applied to the request. - `insights[].updated_at` (string (date-time)): Last time the insight record was updated (UTC). Media type: `application/json` ## JSON Response ```json { "insights": [ { "accounts": [ { "author_id": 0, "avatar_url": "string", "display_name": "string", "handle": "string", "screen_name": "string", "source": "string", "source_user_id": "string" } ], "embedding": [ 0 ], "enriched_related_posts": [ { "allHandles": [], "allProjects": [], "callPerformance": {}, "permalink": "string", "postId": "string", "postType": "string", "postedAt": "2026-01-15T12:00:00Z", "project": {}, "relatedHandle": "string", "relatedToken": 0, "sentimentScore": 0, "source": "string", "tags": [], "tweet": {}, "user": {} } ], "headline": "string", "id": 0, "importance_score": 0, "projects": [ { "handle": "string", "image_url": "string", "internal_id": 0, "name": "string", "symbol": "string" } ], "sentiment": 0, "start_time": "2026-01-15T12:00:00Z", "summary": "string", "tags": [ "string" ], "updated_at": "2026-01-15T12:00:00Z" } ] } ``` # Token long/short ratio - Method: `GET` - Path: `/token/{id}/long-short-ratio` - Tier: Starter - HTML docs: https://docs.ruma.fun/reference/get-token-id-long-short-ratio/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-long-short-ratio ## Description Counts of unique long vs short callers over time for the token. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/long-short-ratio' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `data` (array): Time series of long/short caller counts. - `data[].long_callers` (integer (int64)): Unique callers with bullish/long stance in the bucket. - `data[].short_callers` (integer (int64)): Unique callers with bearish/short stance in the bucket. - `data[].time` (string (date-time)): UTC timestamp for the data point. Media type: `application/json` ## JSON Response ```json { "data": [ { "long_callers": 0, "short_callers": 0, "time": "2026-01-15T12:00:00Z" } ] } ``` # Token mindshare - Method: `GET` - Path: `/token/{id}/mindshare` - Tier: Free - HTML docs: https://docs.ruma.fun/reference/get-token-id-mindshare/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-mindshare ## Description Mindshare (social attention) time-series for the token. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/mindshare' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `mindshare` (array): Token social mindshare series. - `mindshare[].time` (string (date-time)): UTC timestamp for the data point. - `mindshare[].value` (number (double)): Numeric metric value for the timestamp. Media type: `application/json` ## JSON Response ```json { "mindshare": [ { "time": "2026-01-15T12:00:00Z", "value": 0 } ] } ``` # Token post volume - Method: `GET` - Path: `/token/{id}/post-volume` - Tier: Free - HTML docs: https://docs.ruma.fun/reference/get-token-id-post-volume/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-post-volume ## Description Post volume time-series for the token (all authors). ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/post-volume' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `post_volume` (array): Token social post-volume series (all tracked authors). - `post_volume[].tag_breakdown` (array): Per-bucket post-tag counts. - `post_volume[].tag_breakdown[].count` (integer (int64)): Posts carrying the tag in the bucket. - `post_volume[].tag_breakdown[].tag` (string, enum: technical_analysis, fundamental_analysis, onchain, macro, fomo, fud, shilling, news_report, project_update, alpha_leak, prediction_market, ipo, etf, listing, delisting, hack, scam_warning, airdrop, whale, breaking_news, potential_catalyst, mindshare, fundraising, rumour, long_call, short_call): Normalized post tag. - `post_volume[].time` (string (date-time)): UTC timestamp for the data point. - `post_volume[].value` (number (double)): Numeric metric value for the timestamp. Media type: `application/json` ## JSON Response ```json { "post_volume": [ { "tag_breakdown": [ { "count": 0, "tag": "technical_analysis" } ], "time": "2026-01-15T12:00:00Z", "value": 0 } ] } ``` # Token sentiment timeframes - Method: `GET` - Path: `/token/{id}/sentiment-timeframes` - Tier: Free - HTML docs: https://docs.ruma.fun/reference/get-token-id-sentiment-timeframes/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-sentiment-timeframes ## Description Sentiment broken down by short/medium/long timeframes. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/sentiment-timeframes' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `metadata` (object): Computation metadata for timeframe sentiment output. - `metadata.as_of` (string (date-time)): No description provided. - `metadata.calculation` (string): No description provided. - `metadata.formula` (string): No description provided. - `metadata.half_life_h` (number (double)): No description provided. - `metadata.handle` (string): No description provided. - `metadata.handles` (array): Normalized handles used by the query. - `metadata.lookback_days` (integer): No description provided. - `metadata.scale` (string): No description provided. - `metadata.token_id` (integer (int64)): Internal token identifier. - `series` (object): Sentiment time series split by timeframe buckets (short, medium, long). - `summary` (object): Current summary sentiment by timeframe key. Media type: `application/json` ## JSON Response ```json { "metadata": { "as_of": "2026-01-15T12:00:00Z", "calculation": "string", "formula": "string", "half_life_h": 0, "handle": "string", "handles": [ "string" ], "lookback_days": 0, "scale": "string", "token_id": 0 }, "series": {}, "summary": {} } ``` # Token simple sentiment - Method: `GET` - Path: `/token/{id}/simple-sentiment` - Tier: Free - HTML docs: https://docs.ruma.fun/reference/get-token-id-simple-sentiment/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-simple-sentiment ## Description Simplified sentiment series (summary and cohorts). ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/simple-sentiment' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `cohorts` (object): Sentiment series by cohort key. Keys are cohort ids as strings. - `summary` (array): Aggregate sentiment series across non-baseline cohorts. - `summary[].bearish_posts` (number (double)): Count of bearish posts included in the computed window. - `summary[].bucket_start` (string (date-time)): UTC bucket start timestamp. - `summary[].bullish_posts` (number (double)): Count of bullish posts included in the computed window. - `summary[].interval_bearish_posts` (number (double)): Bearish posts in the current emitted interval bucket. - `summary[].interval_bullish_posts` (number (double)): Bullish posts in the current emitted interval bucket. - `summary[].interval_neutral_posts` (number (double)): Neutral posts in the current emitted interval bucket. - `summary[].interval_posts` (number (double)): Posts in the current emitted interval bucket. - `summary[].neutral_posts` (number (double)): Count of neutral posts included in the computed window. - `summary[].sentiment_score` (number (double)): Sentiment score on a 0-100 scale (higher is more bullish). - `summary[].sentiment_score_smoothed` (number (double)): Smoothed sentiment score (0-100) when available. - `summary[].sentiment_score_z` (number (double)): Z-score normalized sentiment where available. - `summary[].sentiment_signal` (number (double)): Model-level sentiment signal used for downstream ranking when available. - `summary[].total_posts` (number (double)): Total posts included in the computed window. - `summary[].total_posts_smoothed` (number (double)): Smoothed total-posts series where available. Media type: `application/json` ## JSON Response ```json { "cohorts": {}, "summary": [ { "bearish_posts": 0, "bucket_start": "2026-01-15T12:00:00Z", "bullish_posts": 0, "interval_bearish_posts": 0, "interval_bullish_posts": 0, "interval_neutral_posts": 0, "interval_posts": 0, "neutral_posts": 0, "sentiment_score": 0, "sentiment_score_smoothed": 0, "sentiment_score_z": 0, "sentiment_signal": 0, "total_posts": 0, "total_posts_smoothed": 0 } ] } ``` # Token smart money bias - Method: `GET` - Path: `/token/{id}/smart-money-bias` - Tier: Starter - HTML docs: https://docs.ruma.fun/reference/get-token-id-smart-money-bias/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-smart-money-bias ## Description Current bias (smart money sentiment minus overall sentiment) in basis points. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/smart-money-bias' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `current` (object): Latest point-in-time smart-money bias metrics. - `current.bucket_start` (string (date-time)): UTC bucket start timestamp. - `current.overall_sentiment_score` (number (double)): Overall sentiment score (0-100). - `current.sentiment_bias_bps` (number (double)): Difference between smart-money and overall sentiment, in basis points. - `current.smart_money_sentiment_score` (number (double)): Smart-money cohort sentiment score (0-100). Media type: `application/json` ## JSON Response ```json { "current": { "bucket_start": "2026-01-15T12:00:00Z", "overall_sentiment_score": 0, "sentiment_bias_bps": 0, "smart_money_sentiment_score": 0 } } ``` # Token smart money post volume - Method: `GET` - Path: `/token/{id}/smart-money-post-volume` - Tier: Starter - HTML docs: https://docs.ruma.fun/reference/get-token-id-smart-money-post-volume/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-smart-money-post-volume ## Description Post volume time-series from smart money (giga brain) cohort only. Note: /token/{id}/smartmoney-post-volume is a deprecated alias and will be removed after 30 days. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/smart-money-post-volume' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `giga_brain_volume` (array): Token social post-volume series for smart-money cohort. - `giga_brain_volume[].tag_breakdown` (array): Per-bucket post-tag counts for smart-money posts. - `giga_brain_volume[].tag_breakdown[].count` (integer (int64)): Smart-money posts carrying the tag in the bucket. - `giga_brain_volume[].tag_breakdown[].tag` (string, enum: technical_analysis, fundamental_analysis, onchain, macro, fomo, fud, shilling, news_report, project_update, alpha_leak, prediction_market, ipo, etf, listing, delisting, hack, scam_warning, airdrop, whale, breaking_news, potential_catalyst, mindshare, fundraising, rumour, long_call, short_call): Normalized post tag. - `giga_brain_volume[].time` (string (date-time)): UTC timestamp for the data point. - `giga_brain_volume[].value` (number (double)): Numeric metric value for the timestamp. Media type: `application/json` ## JSON Response ```json { "giga_brain_volume": [ { "tag_breakdown": [ { "count": 0, "tag": "technical_analysis" } ], "time": "2026-01-15T12:00:00Z", "value": 0 } ] } ``` # Token smart money sentiment - Method: `GET` - Path: `/token/{id}/smart-money-sentiment` - Tier: Starter - HTML docs: https://docs.ruma.fun/reference/get-token-id-smart-money-sentiment/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-smart-money-sentiment ## Description Sentiment time-series from smart money cohort only. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/smart-money-sentiment' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `data` (array): Smart-money sentiment series only. - `data[].bearish_posts` (number (double)): Count of bearish posts included in the computed window. - `data[].bucket_start` (string (date-time)): UTC bucket start timestamp. - `data[].bullish_posts` (number (double)): Count of bullish posts included in the computed window. - `data[].interval_bearish_posts` (number (double)): Bearish posts in the current emitted interval bucket. - `data[].interval_bullish_posts` (number (double)): Bullish posts in the current emitted interval bucket. - `data[].interval_neutral_posts` (number (double)): Neutral posts in the current emitted interval bucket. - `data[].interval_posts` (number (double)): Posts in the current emitted interval bucket. - `data[].neutral_posts` (number (double)): Count of neutral posts included in the computed window. - `data[].sentiment_score` (number (double)): Sentiment score on a 0-100 scale (higher is more bullish). - `data[].sentiment_score_smoothed` (number (double)): Smoothed sentiment score (0-100) when available. - `data[].sentiment_score_z` (number (double)): Z-score normalized sentiment where available. - `data[].sentiment_signal` (number (double)): Model-level sentiment signal used for downstream ranking when available. - `data[].total_posts` (number (double)): Total posts included in the computed window. - `data[].total_posts_smoothed` (number (double)): Smoothed total-posts series where available. Media type: `application/json` ## JSON Response ```json { "data": [ { "bearish_posts": 0, "bucket_start": "2026-01-15T12:00:00Z", "bullish_posts": 0, "interval_bearish_posts": 0, "interval_bullish_posts": 0, "interval_neutral_posts": 0, "interval_posts": 0, "neutral_posts": 0, "sentiment_score": 0, "sentiment_score_smoothed": 0, "sentiment_score_z": 0, "sentiment_signal": 0, "total_posts": 0, "total_posts_smoothed": 0 } ] } ``` # Token top degens sentiment - Method: `GET` - Path: `/token/{id}/top-degens-sentiment` - Tier: Growth - HTML docs: https://docs.ruma.fun/reference/get-token-id-top-degens-sentiment/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-top-degens-sentiment ## Description Sentiment time-series from top degens cohort only. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/top-degens-sentiment' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `data` (array): Top-degens sentiment series only. - `data[].bearish_posts` (number (double)): Count of bearish posts included in the computed window. - `data[].bucket_start` (string (date-time)): UTC bucket start timestamp. - `data[].bullish_posts` (number (double)): Count of bullish posts included in the computed window. - `data[].interval_bearish_posts` (number (double)): Bearish posts in the current emitted interval bucket. - `data[].interval_bullish_posts` (number (double)): Bullish posts in the current emitted interval bucket. - `data[].interval_neutral_posts` (number (double)): Neutral posts in the current emitted interval bucket. - `data[].interval_posts` (number (double)): Posts in the current emitted interval bucket. - `data[].neutral_posts` (number (double)): Count of neutral posts included in the computed window. - `data[].sentiment_score` (number (double)): Sentiment score on a 0-100 scale (higher is more bullish). - `data[].sentiment_score_smoothed` (number (double)): Smoothed sentiment score (0-100) when available. - `data[].sentiment_score_z` (number (double)): Z-score normalized sentiment where available. - `data[].sentiment_signal` (number (double)): Model-level sentiment signal used for downstream ranking when available. - `data[].total_posts` (number (double)): Total posts included in the computed window. - `data[].total_posts_smoothed` (number (double)): Smoothed total-posts series where available. Media type: `application/json` ## JSON Response ```json { "data": [ { "bearish_posts": 0, "bucket_start": "2026-01-15T12:00:00Z", "bullish_posts": 0, "interval_bearish_posts": 0, "interval_bullish_posts": 0, "interval_neutral_posts": 0, "interval_posts": 0, "neutral_posts": 0, "sentiment_score": 0, "sentiment_score_smoothed": 0, "sentiment_score_z": 0, "sentiment_signal": 0, "total_posts": 0, "total_posts_smoothed": 0 } ] } ``` # Token volatility index - Method: `GET` - Path: `/token/{id}/volatility-index` - Tier: Starter - HTML docs: https://docs.ruma.fun/reference/get-token-id-volatility-index/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-volatility-index ## Description Volatility index time-series for the token. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/volatility-index' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. Only `1d` is supported for this endpoint. ## Response OK - `volatility` (array): Token volatility index series. - `volatility[].time` (string (date-time)): UTC timestamp for the data point. - `volatility[].value` (number (double)): Numeric metric value for the timestamp. Media type: `application/json` ## JSON Response ```json { "volatility": [ { "time": "2026-01-15T12:00:00Z", "value": 0 } ] } ``` # Token volume series - Method: `GET` - Path: `/token/{id}/volume-series` - Tier: Starter - HTML docs: https://docs.ruma.fun/reference/get-token-id-volume-series/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-token-id-volume-series ## Description Trading volume time-series for the token over the lookback window. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/token/bitcoin/volume-series' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters - `id` (string, required): Token identifier. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). ## Query Parameters - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `volume` (array): Token trading volume series. - `volume[].time` (string (date-time)): UTC timestamp for the data point. - `volume[].value` (number (double)): Numeric metric value for the timestamp. Media type: `application/json` ## JSON Response ```json { "volume": [ { "time": "2026-01-15T12:00:00Z", "value": 0 } ] } ``` # Handles sentiment - Method: `GET` - Path: `/handles/sentiment` - Tier: Starter - HTML docs: https://docs.ruma.fun/reference/get-handles-sentiment/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-handles-sentiment ## Description Aggregated sentiment for author handles. Provide up to 5 handles and/or one tag. Supported tags: watchlist, top_callers, top_crypto_kols, top_celebrities. Optionally pass token_id to filter sentiment to posts related to a specific token (accepts internal token_id or coingecko_id). Hours lookback is capped at 2160 (90d). Non-watchlist tags are snapshot-backed by day for backtest-safe historical queries. Returns 400 for invalid hours, invalid tag, invalid token_id, missing snapshots for the requested lookback window, more than one tag, more than 5 handles, missing handles/tags, or an empty watchlist selection. Note: /sentiment/handles is a deprecated alias and will be removed after 30 days. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/handles/sentiment' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters No path parameters for this endpoint. ## Query Parameters - `handles` (string, optional): Author handles as comma-separated list or repeated query param (max 5 total). - `tags` (string, optional): Optional single tag (one value only): watchlist, top_callers, top_crypto_kols, or top_celebrities. - `token_id` (string, optional): Optional token filter. Accepts internal token_id (integer) or coingecko_id (string, e.g. bitcoin). - `hours` (integer, optional): Lookback window in hours. - `granularity` (string, optional): Optional bucket size override. If provided, response is aggregated at this interval regardless of lookback window. ## Response OK - `handles` (array): Normalized handles included in the aggregation set. - `summary` (array): Aggregate sentiment time series across the selected handles. - `summary[].bearish_posts` (number (double)): Count of bearish posts included in the computed window. - `summary[].bucket_start` (string (date-time)): UTC bucket start timestamp. - `summary[].bullish_posts` (number (double)): Count of bullish posts included in the computed window. - `summary[].interval_bearish_posts` (number (double)): Bearish posts in the current emitted interval bucket. - `summary[].interval_bullish_posts` (number (double)): Bullish posts in the current emitted interval bucket. - `summary[].interval_neutral_posts` (number (double)): Neutral posts in the current emitted interval bucket. - `summary[].interval_posts` (number (double)): Posts in the current emitted interval bucket. - `summary[].neutral_posts` (number (double)): Count of neutral posts included in the computed window. - `summary[].sentiment_score` (number (double)): Sentiment score on a 0-100 scale (higher is more bullish). - `summary[].sentiment_score_smoothed` (number (double)): Smoothed sentiment score (0-100) when available. - `summary[].sentiment_score_z` (number (double)): Z-score normalized sentiment where available. - `summary[].sentiment_signal` (number (double)): Model-level sentiment signal used for downstream ranking when available. - `summary[].total_posts` (number (double)): Total posts included in the computed window. - `summary[].total_posts_smoothed` (number (double)): Smoothed total-posts series where available. - `tags` (array): Applied selector tag(s) used to build the handle set. Media type: `application/json` ## JSON Response ```json { "handles": [ "string" ], "summary": [ { "bearish_posts": 0, "bucket_start": "2026-01-15T12:00:00Z", "bullish_posts": 0, "interval_bearish_posts": 0, "interval_bullish_posts": 0, "interval_neutral_posts": 0, "interval_posts": 0, "neutral_posts": 0, "sentiment_score": 0, "sentiment_score_smoothed": 0, "sentiment_score_z": 0, "sentiment_signal": 0, "total_posts": 0, "total_posts_smoothed": 0 } ], "tags": [ "string" ] } ``` # Token list (paged) - Method: `GET` - Path: `/tokens` - Tier: Free - HTML docs: https://docs.ruma.fun/reference/get-tokens/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-tokens ## Description Paginated list of tokens with token_id, coingecko_id, symbol, name, price_usd, market_cap_usd, volume_usd, and address. Sorted by market_cap_usd DESC NULLS LAST by default. Use limit (max 500) and offset for paging. ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/tokens' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters No path parameters for this endpoint. ## Query Parameters - `limit` (integer, optional): Maximum number of items to return (default and max may vary by endpoint). - `offset` (integer, optional): Number of items to skip for pagination (use with limit). ## Response OK - `limit` (integer): Applied response size limit. - `offset` (integer): Applied page offset (always 0 for non-paginated token snapshots). - `tokens` (array): Paged token rows. One entry per indexed token. - `tokens[].address` (string): Canonical contract address when available; null for native assets or unknown contracts. - `tokens[].coingecko_id` (string): CoinGecko asset identifier when available; null otherwise. - `tokens[].market_cap_usd` (number (double)): Latest known market capitalization in USD; null when unavailable. - `tokens[].mindshare_24h` (number (double)): Percent change in mindshare over the latest comparison window when available. - `tokens[].mindshare_change` (number (double)): Percent change in mindshare over the latest comparison window when available. - `tokens[].mindshare_change_pct` (number (double)): Percent change in mindshare over the latest comparison window when available. - `tokens[].name` (string): Human-readable token name. - `tokens[].price_usd` (number (double)): Latest known USD price; null when unavailable. - `tokens[].symbol` (string): Primary trading symbol. - `tokens[].token_id` (integer (int64)): Internal Ruma token identifier. - `tokens[].volume_usd` (number (double)): Latest known 24h volume in USD; null when unavailable. - `total` (integer): Total number of tokens in this response set. Media type: `application/json` ## JSON Response ```json { "limit": 0, "offset": 0, "tokens": [ { "address": "string", "coingecko_id": "string", "market_cap_usd": 0, "mindshare_24h": 0, "mindshare_change": 0, "mindshare_change_pct": 0, "name": "string", "price_usd": 0, "symbol": "string", "token_id": 0, "volume_usd": 0 } ], "total": 0 } ``` # Trending token list - Method: `GET` - Path: `/tokens/trending` - Tier: Growth - HTML docs: https://docs.ruma.fun/reference/get-tokens-trending/ - Interactive docs: https://docs.ruma.fun/#endpoint=get-tokens-trending ## Description Trending token snapshot sorted by mindshare_change DESC. Returns the same response shape as /tokens, with optional trend metrics (mindshare_24h, mindshare_change, mindshare_change_pct). Use limit (max 50). ## cURL Example ```bash curl --request GET \ --url 'https://api.ruma.fun/api/v1/public/tokens/trending' \ --header 'X-API-Key: YOUR_API_KEY' ``` ## Path Parameters No path parameters for this endpoint. ## Query Parameters - `limit` (integer, optional): Maximum number of trending tokens to return (default 10, max 50). ## Response OK - `limit` (integer): Applied response size limit. - `offset` (integer): Applied page offset (always 0 for non-paginated token snapshots). - `tokens` (array): Paged token rows. One entry per indexed token. - `tokens[].address` (string): Canonical contract address when available; null for native assets or unknown contracts. - `tokens[].coingecko_id` (string): CoinGecko asset identifier when available; null otherwise. - `tokens[].market_cap_usd` (number (double)): Latest known market capitalization in USD; null when unavailable. - `tokens[].mindshare_24h` (number (double)): Percent change in mindshare over the latest comparison window when available. - `tokens[].mindshare_change` (number (double)): Percent change in mindshare over the latest comparison window when available. - `tokens[].mindshare_change_pct` (number (double)): Percent change in mindshare over the latest comparison window when available. - `tokens[].name` (string): Human-readable token name. - `tokens[].price_usd` (number (double)): Latest known USD price; null when unavailable. - `tokens[].symbol` (string): Primary trading symbol. - `tokens[].token_id` (integer (int64)): Internal Ruma token identifier. - `tokens[].volume_usd` (number (double)): Latest known 24h volume in USD; null when unavailable. - `total` (integer): Total number of tokens in this response set. Media type: `application/json` ## JSON Response ```json { "limit": 0, "offset": 0, "tokens": [ { "address": "string", "coingecko_id": "string", "market_cap_usd": 0, "mindshare_24h": 0, "mindshare_change": 0, "mindshare_change_pct": 0, "name": "string", "price_usd": 0, "symbol": "string", "token_id": 0, "volume_usd": 0 } ], "total": 0 } ```