A single headline is noise; the same development reported by twenty outlets in an afternoon is an event. Finance Pulse already groups statements into topics (developments), so detecting a developing story comes down to two numbers per topic: how fast it is growing, and how many independent outlets carry it.
Rank by velocity
sort=velocity orders topics by their statements in the last 24 hours. Each topic also carries statements_4h, its
total statements in the window and sources, the distinct outlets:
You need a RapidAPI key to run the examples: the free plan is enough.
curl -G https://finance-pulse.p.rapidapi.com/v2/topics \
--data-urlencode "sort=velocity" --data-urlencode "min_statements=5" --data-urlencode "limit=20" \
-H "X-RapidAPI-Key: YOUR_RAPIDAPI_KEY" -H "X-RapidAPI-Host: finance-pulse.p.rapidapi.com"
24h 4h outlets total topic
19 9 24 73 Bond yields hit multi-decade highs
19 2 15 21 U.S. economy growth slowed to 1.5% in the second quarter
18 5 20 42 Micron Technology's record Q3 FY2026 revenue of $41.5 billion
17 6 5 24 Nifty 50 and Sensex hit worst monthly drops in 8 years
15 8 43 139 30-year Treasury yield breaks 5%
13 13 9 22 Eurozone manufacturing PMI reaches 47-month high
13 6 42 188 Oil prices slide to 2-week lows
12 0 1 22 Micron Technology's record fiscal third-quarter 2026 results
12 1 12 13 South Korea approves $350 billion U.S. investment pact
11 0 1 11 Gabelli Investment Management Firm releases Mini Mites Fund, Value 25 Fund, and Dividend Growth Fund second-quarter 2026 investor letters
Velocity alone is not enough. Two entries come from one outlet (a Micron results topic and a fund release with a single source each): one site publishing a long article produces many statements. Filter on breadth:
import requests
API = "https://finance-pulse.p.rapidapi.com"
HEADERS = {"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY", "X-RapidAPI-Host": "finance-pulse.p.rapidapi.com"}
topics = requests.get(f"{API}/v2/topics", headers=HEADERS,
params={"sort": "velocity", "min_statements": 5, "limit": 20}).json()["data"]
developing = [t for t in topics if t["sources"] >= 5 and t["statements_4h"] >= 3]
for t in developing:
print(f"{t['sources']:>3} outlets {t['statements_4h']:>2} in 4h {t['name']}")
24 outlets 9 in 4h Bond yields hit multi-decade highs
20 outlets 5 in 4h Micron Technology's record Q3 FY2026 revenue of $41.5 billion
5 outlets 6 in 4h Nifty 50 and Sensex hit worst monthly drops in 8 years
43 outlets 8 in 4h 30-year Treasury yield breaks 5%
9 outlets 13 in 4h Eurozone manufacturing PMI reaches 47-month high
42 outlets 6 in 4h Oil prices slide to 2-week lows
16 outlets 5 in 4h Micron Technology's AI memory demand surge
17 outlets 4 in 4h S&P 500 Index falls 0.42% today
21 outlets 6 in 4h Bitcoin price surges past $87,000
What the market is picking up right now
/v2/trending is the API's own selection, ranked by distinct outlets: the live list covers the last two hours,
and every topic carries its labels for the 2-hour slots in which it trended over the past week. kind=live returns
just the live list:
#1 4 outlets in the last 2 h (4 in total) McCormick Foods beats estimates
#2 4 outlets in the last 2 h (24 in total) Bond yields hit multi-decade highs
#3 4 outlets in the last 2 h (42 in total) Oil prices slide to 2-week lows
#4 3 outlets in the last 2 h (3 in total) US corporate profit boom slowing
#5 3 outlets in the last 2 h (3 in total) US administration demands emergency fuel reserves from Germany and France
#6 3 outlets in the last 2 h (3 in total) China's AI robot market expands with E-Home's new service
#7 3 outlets in the last 2 h (3 in total) UK factories report growing inflation pressures
#8 3 outlets in the last 2 h (3 in total) Volatility control funds near record equity exposure
#9 3 outlets in the last 2 h (7 in total) Global bond markets extend sell-off on inflation fears
#10 2 outlets in the last 2 h (2 in total) Bahrain hosts fourth Gateway Gulf event
Each item also carries its newest statement, with its image when the article had one, so one request is enough to render a front page. fintopic.news is built this way.
Follow one story
Take the top developing story and look inside it:
story = requests.get(f"{API}/v2/topics/{developing[0]['id']}", headers=HEADERS).json()["data"]
print(story["name"], "|", story["statements"], "statements,", story["sources"], "outlets")
print("sentiment", story["sentiment"], "| source mix", story["source_mix"])
Bond yields hit multi-decade highs | 73 statements, 24 outlets
sentiment {'bullish': 0, 'bearish': 58, 'neutral': 15} | source mix {'news': 68, 'speculative': 5}
Then its life, hour by hour, from /v2/series?topic_id=…&interval=hour:
Data table
| hour (UTC) | statements | sources |
|---|---|---|
| 2026-09-25T20:00 | 1 | 1 |
| 2026-09-26T13:00 | 1 | 1 |
| 2026-09-27T13:00 | 1 | 1 |
| 2026-09-28T08:00 | 1 | 1 |
| 2026-09-28T10:00 | 1 | 1 |
| 2026-09-28T12:00 | 1 | 1 |
| 2026-09-28T20:00 | 1 | 1 |
| 2026-09-28T21:00 | 1 | 1 |
| 2026-09-29T02:00 | 1 | 1 |
| 2026-09-29T04:00 | 3 | 3 |
| 2026-09-29T15:00 | 1 | 1 |
| 2026-09-30T08:00 | 1 | 1 |
| 2026-09-30T10:00 | 1 | 1 |
| 2026-09-30T12:00 | 2 | 2 |
| 2026-09-30T15:00 | 1 | 1 |
| 2026-09-30T16:00 | 1 | 1 |
| 2026-09-30T17:00 | 1 | 1 |
| 2026-09-30T19:00 | 1 | 1 |
| 2026-09-30T20:00 | 1 | 1 |
| 2026-09-30T21:00 | 2 | 2 |
| 2026-10-01T02:00 | 1 | 1 |
| 2026-10-01T07:00 | 1 | 1 |
| 2026-10-01T08:00 | 1 | 1 |
| 2026-10-01T09:00 | 6 | 6 |
| 2026-10-01T10:00 | 1 | 1 |
The shape is typical: a first report, a quiet stretch, then a burst as more outlets pick it up. The burst, in
outlets rather than statements, is what to alert on: wire /v2/feed?topic_id=… (see
the feed guide) to the topics that pass your breadth filter.
Run this yourself: get a free API key on RapidAPI ↗. The free plan is enough for every example in this guide.