API documentation

The type parameter keeps the formal names — equities, funds, and cryptocurrencies — even though the site labels them Stocks, ETFs, and Crypto.

REST API

Eleven endpoints cover the surface area: a screener, an asset snapshot, timeseries, written summaries, related assets, an event calendar, financial statements, market-wide trends, a news feed with its publisher list, and search. Every endpoint speaks JSON, accepts the same X-API-Key header, and shares the same error envelope.

GEThttps://api.rumor.io/v1/assets/{type}Free demo · 100/day

List assets (screener)

Returns a columnar list of assets of the given type — the website's screener as an API. Supports field projection, sorting, and Stripe-style filtering (filter[field][gt|lt|contains|include|exclude]). Column names are the asset endpoint's fields. Unknown field, sort, or filter column names return a 400 that suggests the closest names. Choosing `fields` or passing any filter needs a Personal plan; sort, order and limit are free. Inactive assets are left out.

Parameters
FieldTypeDescription
type*stringThe asset type.
range:equities · funds · cryptocurrencies
fieldsstringComma-separated list of field names to include in the response. Omit for the screener's default columns. Needs a Personal plan.
sortstringField name to sort by (numeric columns only, e.g. 'marketCap'). Nulls sort last. Omit for the type's default ranking: marketCap for equities and cryptocurrencies, socialEngagementMonth for funds.
orderstringSort order. Applies only when sort is passed; the default ranking is always desc.
range:asc · desc
default:desc
limitintegerMaximum number of assets to return. Default 50; values outside 1–100 are clamped.
range:1 – 100
default:50
filter[<field>][gt|lt|contains|include|exclude]stringStripe-style filter parameters. gt/lt are inclusive bounds on numeric columns, where a null counts as 0; contains is a case-insensitive substring match on text columns; include/exclude take comma-separated categorical values. Examples: filter[marketCap][gt]=1000000000, filter[sector][include]=Technology,Energy, filter[companyName][contains]=micro. Repeatable.
Response · 200
FieldTypeDescription
dataobjectColumnar dataset. Contains an `ids` array and one array per requested field, all the same length.
metaobject

Sign in to try this endpoint live with your own API key.

Sign in to try it →
GEThttps://api.rumor.io/v1/assets/{type}/{ticker}Free demo · 100/day

Get asset data

Returns the current row for one asset: price and profile, and its attention, engagement and sentiment over the last day, week, month and year, with ranks, percentiles and changes. Several hundred fields per asset; the available fields depend on the asset type. Prices are live. Pass fields=* to see every field the asset carries, values included, and read names off that.

Parameters
FieldTypeDescription
type*stringThe asset type.
range:equities · funds · cryptocurrencies
ticker*stringThe asset's ticker (AAPL, SPY, BTC) or its id (nasdaq_aapl, bitcoin). Case-insensitive. /search finds it from a name.
fieldsstringComma-separated field names, or * for every field the asset carries. Omit for the screener's default columns. Unknown names are a 400 that suggests the closest.
Response · 200
FieldTypeDescription
data—Asset fields. Schema depends on the `type` path parameter.
metaobjectResponse metadata included with every successful response.

Sign in to try this endpoint live with your own API key.

Sign in to try it →
GEThttps://api.rumor.io/v1/assets/{type}/{ticker}/timeseriesFree demo · 100/day

Get timeseries data

Returns historical series for one asset, anywhere in its full history: price candles and volume, social engagement and attention, bullish and bearish engagement, engagement per topic, and engagement by community tenure. Data is columnar: a `dates` array (Unix seconds, ascending) and one array per field, with null where a series has no bucket. Every `*Engagement` series has a `*Attention` twin, the asset's 0-1 share of the cross-entity pool (null where the pool is empty). `communityNewEngagement`/`communityRegularsEngagement` split engagement by the author's tenure with the asset (New = first or second lifetime active month, Regulars = third or later); they sum to slightly less than `socialEngagement` because engagement from unidentifiable authors is excluded — do not renormalize. Pass `dates` instead of a window to get only named days. A window starting further back than 90 days, or at hour or month resolution, needs a Personal plan.

Parameters
FieldTypeDescription
type*stringThe asset type.
range:equities · funds · cryptocurrencies
ticker*stringThe asset's ticker (AAPL, SPY, BTC) or its id (nasdaq_aapl, bitcoin). Case-insensitive. /search finds it from a name.
fieldsstringComma-separated field names. Price: opens, highs, lows, closes, volumes, changes. Social: socialEngagement, sentimentBullishEngagement, sentimentBearishEngagement, topic{Topic}Engagement for the type's topics, communityNewEngagement, communityRegularsEngagement, and the *Attention twin of each. Omit for the candles, volumes and every engagement series. Unknown names are a 400 that suggests the closest.
startstringStart of the window: Unix seconds or YYYY-MM-DD (00:00 UTC). Omit for 30 days before the end, or the whole history at month resolution.
endstringEnd of the window: Unix seconds or YYYY-MM-DD, which means the end of that UTC day. Omit to end now.
resolutionstringBucket size. Day whatever the window's length — hour and month are asked for by name. An hour window may span at most 30 days; a wider one is a 400. Hour and month need a Personal plan.
range:hour · day · month
default:day
datesstringComma-separated YYYY-MM-DD days, at most 100. Returns only those daily buckets, in the order asked, with a null row for a day the series has no bucket for. Exclusive with start, end and resolution. Plan gating reads the oldest day as the start.
Response · 200
FieldTypeDescription
dataobjectColumnar timeseries data. Contains a `dates` array (Unix timestamps in seconds) and one array per requested field, all the same length.
metaobjectResponse metadata for timeseries and summary responses, extending the base Meta schema.

Sign in to try this endpoint live with your own API key.

Sign in to try it →
GEThttps://api.rumor.io/v1/assets/{type}/{ticker}/summaryFree demo · 100/day

Get written summaries

Returns written summaries of what was said about one asset, as lists of plain-text bullets per day or per month. Keys: messages (the whole conversation), sentimentBullish and sentimentBearish (the case each side made), topic{Topic} for the type's topics, and communityNew and communityRegulars where the asset carries them. Pass latest=1 for each key's newest non-empty summary whatever its date; that read is never plan-gated. A named window starting further back than 90 days, or at month resolution, needs a Personal plan.

Parameters
FieldTypeDescription
type*stringThe asset type.
range:equities · funds · cryptocurrencies
ticker*stringThe asset's ticker (AAPL, SPY, BTC) or its id (nasdaq_aapl, bitcoin). Case-insensitive. /search finds it from a name.
fieldsstringComma-separated summary keys. Topic keys are singular (topicMacro, not topicsMacro). Omit for messages, both sentiments and the type's topics.
lateststring1 for each key's newest non-empty summary, with the day it is from; 0 or omitted for the window read. Exclusive with start, end and resolution.
range:1 · 0
startstringStart of the window: Unix seconds or YYYY-MM-DD (00:00 UTC). Omit for 30 days before the end, or the whole history at month resolution.
endstringEnd of the window: Unix seconds or YYYY-MM-DD, which means the end of that UTC day. Omit to end now.
resolutionstringBucket size. There is no hourly summary. Month needs a Personal plan.
range:day · month
default:day
Response · 200
FieldTypeDescription
dataobjectWindow read: a `dates` array (Unix seconds) plus one array per requested key, each cell an array of plain-text bullet strings (empty = nothing to summarise). With latest=1: an object per key, {date, day, bullets}, and a key with no summary left out.
metaobjectResponse metadata for timeseries and summary responses, extending the base Meta schema.

Sign in to try this endpoint live with your own API key.

Sign in to try it →
GEThttps://api.rumor.io/v1/assets/{type}/{ticker}/eventsFree demo · 100/day

Get asset events

Returns earnings reports, dividends, splits and analyst rating changes for one asset, as one array sorted newest first, each row stamped with its `kind`. Every row carries `date` (Unix seconds, UTC midnight) and `day` (YYYY-MM-DD). Fields by kind: earnings `epsActual` (null for a scheduled report), `epsEstimated`; dividend `dividend`, `adjDividend`, `frequency` (the date is the ex-date); split `numerator`, `denominator`; rating `firm`, `action`, `ratingCurrent`, `ratingPrior`. Every figure is nullable. The feed includes future rows: the next scheduled report and a declared dividend not yet ex. Equities only; funds and cryptocurrencies answer with an empty array and a note in `meta`.

Parameters
FieldTypeDescription
type*stringThe asset type.
range:equities · funds · cryptocurrencies
ticker*stringThe asset's ticker (AAPL, SPY, BTC) or its id (nasdaq_aapl, bitcoin). Case-insensitive. /search finds it from a name.
kindsstringComma-separated event kinds: earnings, dividend, split, rating. Omit for all four.
startstringDrop events before this: Unix seconds or YYYY-MM-DD. Omit for the whole calendar. A filter, not a plan limit — no window is refused here.
endstringDrop events after this: Unix seconds or YYYY-MM-DD, which includes that whole UTC day. Omit for the whole calendar, future rows included.
Response · 200
FieldTypeDescription
dataarray<object>Events, newest first. Each has kind, date (Unix seconds) and day (YYYY-MM-DD), plus the fields of its kind.
metaobject

Sign in to try this endpoint live with your own API key.

Sign in to try it →
GEThttps://api.rumor.io/v1/assets/{type}/{ticker}/financialsFree demo · 100/day

Get financial statements

Returns one financial statement for one asset, newest fiscal period first — the data behind the website's Financials tab. Rows are the provider's own: `date` is the fiscal period end as YYYY-MM-DD and `period` its label (FY, Q1, …). Every metric is nullable: null means the provider sent no line, 0 means a reported zero. Per-period valuation multiples (market cap, enterprise value, P/E, P/S, P/B, yields) are null by construction and exist only on the fundamentals `ttm` row. An asset with no published document answers with an empty array and a note in `meta`.

Parameters
FieldTypeDescription
type*stringThe asset type.
range:equities · funds · cryptocurrencies
ticker*stringThe asset's ticker (AAPL, SPY, BTC) or its id (nasdaq_aapl, bitcoin). Case-insensitive. /search finds it from a name.
statement*stringWhich statement: income, balance, cashflow, fundamentals (merged key metrics and ratios), or estimates (forward analyst EPS and revenue bands).
range:income · balance · cashflow · fundamentals · estimates
periodstringThe statement period, not a time window. ttm (trailing twelve months) exists on statement=fundamentals only; estimates take annual only.
range:annual · quarter · ttm
default:annual
limitintegerKeep only the newest N rows. A positive integer; anything else is a 400. Omit for every row.
range:≥ 1
Response · 200
FieldTypeDescription
dataarray<object>The statement's rows, newest fiscal period first. Each row is the provider's own object, with date (fiscal period end, YYYY-MM-DD).
metaobject

Sign in to try this endpoint live with your own API key.

Sign in to try it →
GEThttps://api.rumor.io/v1/newsFree demo · 100/day

Get news articles

Returns collected news articles, newest first. With no filters it is the whole market — every article about every asset we track. `type` narrows it to asset classes and `ticker` to named assets; the two compose as OR within each list and AND across them, so a type plus a ticker of another class matches nothing. `description` comes from the publisher's OpenGraph tags and is empty for roughly a third of articles. Each article's `assets` array names every tracked asset it was collected for, with the ticker and type the other endpoints take. There is no offset, cursor, or page parameter: the window's bounds ARE the cursor — with order=desc, request the next page with `end` set to the `publishedAt` of the oldest article you received (with order=asc, move `start` to the newest), and deduplicate on `id`, because the article on the boundary is served again. A window starting further back than 90 days requires a Personal plan.

Parameters
FieldTypeDescription
typestringAsset classes to include. Comma-separated and/or repeated; multiple values are OR'd. Omit for every class. Commodities are not addressable as a type, though their articles appear in an unfiltered feed.
range:equities · funds · cryptocurrencies
tickerstringAssets to include, by ticker. Comma-separated and/or repeated; multiple values are OR'd. Resolved within `type` when one is given, otherwise across every class. An unknown ticker is a 404 naming it. Omit for every asset.
startstringStart of the window, inclusive: Unix seconds or YYYY-MM-DD. Omit for 30 days before the end. The parameter to move when paging with order=asc.
endstringEnd of the window, inclusive: Unix seconds or YYYY-MM-DD, which means the end of that UTC day. Omit to end now. The parameter to move when paging with order=desc.
publisherstringPublisher names to include. Comma-separated and/or repeated; matches are exact and case-sensitive, and multiple names are OR'd. Omit for every publisher. Call /news/publishers for the valid names. The publishers list can include an empty name, for articles the collector could not attribute — that one cannot be filtered on, and passing it is treated as no filter.
limitintegerMaximum number of articles to return. Default 50; values outside 1–100 are clamped.
range:1 – 100
default:50
orderstringWhich end of the window the page is cut from: desc is newest first, asc is oldest first.
range:desc · asc
default:desc
Response · 200
FieldTypeDescription
dataarray<any>Articles, in the requested order.
metaobject

Sign in to try this endpoint live with your own API key.

Sign in to try it →
GEThttps://api.rumor.io/v1/news/publishersFree demo · 100/day

List news publishers

Returns every publisher that wrote within the window, with the number of articles each contributed, sorted by count descending. These are the exact strings the news endpoint's `publisher` filter matches, so fetch this list before filtering rather than guessing names. A publisher name is occasionally the empty string. Counts are of distinct articles, so one story about four tracked assets is counted once. There is no limit parameter — the point of this endpoint is the complete vocabulary for the window. The window is the news endpoint's: the last 30 days by default. A window starting further back than 90 days requires a Personal plan.

Parameters
FieldTypeDescription
typestringAsset classes to count over. Comma-separated and/or repeated. Omit for every class.
range:equities · funds · cryptocurrencies
tickerstringAssets to count over, by ticker. Comma-separated and/or repeated. Omit for every asset.
startstringStart of the window: Unix seconds or YYYY-MM-DD (00:00 UTC). Omit for 30 days before the end, or the whole history at month resolution.
endstringEnd of the window: Unix seconds or YYYY-MM-DD, which means the end of that UTC day. Omit to end now.
Response · 200
FieldTypeDescription
dataarray<object>Publishers with article counts, sorted by count descending.
metaobject

Sign in to try this endpoint live with your own API key.

Sign in to try it →

Errors

Every failure response has the same envelope. The HTTP status identifies the class of error; the error.code field disambiguates within that class.

{
  "error": {
    "code": "INVALID_API_KEY",
    "message": "Missing API key"
  }
}
CodeHTTPWhen
INVALID_API_KEY401The API key is missing, malformed, unknown or revoked.
RATE_LIMIT_EXCEEDED429The per-minute or per-day budget is spent. Retry-After says how many seconds to wait.
INVALID_ASSET_TYPE400The `type` path parameter is not one of equities, funds, cryptocurrencies.
ASSET_NOT_FOUND404No asset of the given type matches the ticker or id.
INVALID_PARAMETERS400A query parameter is missing, out of range, or names an unknown field. The message says which, and suggests the closest field names.
FORBIDDEN403The request needs a higher plan: a window starting more than 90 days ago, hour or month buckets, or screener fields and filters. `requiredPlan` names the plan.
INTERNAL_ERROR500Server-side error. Retry with backoff; report it if it persists.

Rate limits

Limits are enforced per API key with both a per-minute and a per-day budget. Free keys get a demo budget of 10/min · 100/day; Personal gets 10/min · 2000/day; Pro gets 100/min · 20000/day.

Response headers

HeaderMeaning
X-RateLimit-RemainingRequests remaining in the current window — the lesser of the per-minute and per-day remaining budgets.
Retry-AfterSeconds to wait before retrying. Emitted on 429 responses.

When the budget runs out

The API responds with HTTP 429 and the following body:

{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Too many requests",
    "retryAfter": 42
  }
}

See Plans & limits for the full tier matrix.

Download the OpenAPI spec

The full spec is published as a single JSON file. Import it into Postman, Insomnia, or any other OpenAPI-aware tool to generate clients or replay requests.

Download openapi.json

Versioned with every site deploy. Direct link: /openapi.json

You're viewing limited data.