> ## Documentation Index
> Fetch the complete documentation index at: https://docs.upriver.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Sorting & Ranking

> How the trend sort modes differ, what each one is for, and how the freshness and rising signals behave

The [Trends List endpoint](/trends/overview-1) supports three sort modes via
`sort_by`. Each answers a **different question**. Most confusion about trend
ordering comes from expecting one mode to answer another mode's question.

| `sort_by`                 | The question it answers              | Use it for                              |
| ------------------------- | ------------------------------------ | --------------------------------------- |
| `recommended` *(default)* | "What's worth my attention overall?" | Browsing; a balanced view of what's hot |
| `newest`                  | "What's new since I last checked?"   | Daily/weekly catch-up on new arrivals   |
| `rising`                  | "What's inflecting **right now**?"   | Timing: catching a wave before it peaks |

## Biggest is not the same as rising

`rising` ranks by **acceleration of posting activity**: is this trend's
content being created faster than its own recent baseline? It does not rank
by total size. A trend with millions of views and a large, steady stream of videos is
*established*: it tops `recommended`, but its curve is flat, so it sits low on
`rising`. A small trend whose activity is compounding week over week is the
one `rising` is built to surface. That's the window where creating content
for it puts you early.

<img className="block dark:hidden" src="https://mintcdn.com/upriver/ZwHxtkaYvvqJPwNz/images/trends/sort-recommended-vs-rising-light.svg?fit=max&auto=format&n=ZwHxtkaYvvqJPwNz&q=85&s=7a783bad740027f798219c2939b88a10" alt="Two trend activity charts: a large steady trend that ranks first on Recommended but reads Steady on Rising, next to a small accelerating trend that reads Rising" width="760" height="252" data-path="images/trends/sort-recommended-vs-rising-light.svg" />

<img className="hidden dark:block" src="https://mintcdn.com/upriver/ZwHxtkaYvvqJPwNz/images/trends/sort-recommended-vs-rising-dark.svg?fit=max&auto=format&n=ZwHxtkaYvvqJPwNz&q=85&s=68c709407bfeb5ef5bf0a8ae47d6d33f" alt="Two trend activity charts: a large steady trend that ranks first on Recommended but reads Steady on Rising, next to a small accelerating trend that reads Rising" width="760" height="252" data-path="images/trends/sort-recommended-vs-rising-dark.svg" />

If a 6.1M-view trend appears below a 43K-view trend on `rising`, that is the
sort working as intended: the smaller trend is accelerating harder *relative
to its own baseline*. For "biggest overall", use `recommended`.

## Rising means rising *now*

The rising signal is anchored to a trend's **latest evidence** and fades as
that evidence ages. Two trends with the same climb rank very differently if
one climbed this week and the other went quiet three weeks ago:

<img className="block dark:hidden" src="https://mintcdn.com/upriver/ZwHxtkaYvvqJPwNz/images/trends/sort-rising-means-now-light.svg?fit=max&auto=format&n=ZwHxtkaYvvqJPwNz&q=85&s=60c45de2bef6354eae45b614d62b1b8b" alt="Two identical climbing curves; the one whose latest video is 2 days old reads Rising +0.29 while the one quiet for 3 weeks reads roughly zero" width="760" height="252" data-path="images/trends/sort-rising-means-now-light.svg" />

<img className="hidden dark:block" src="https://mintcdn.com/upriver/ZwHxtkaYvvqJPwNz/images/trends/sort-rising-means-now-dark.svg?fit=max&auto=format&n=ZwHxtkaYvvqJPwNz&q=85&s=fdc4981776a0cf9906a525251cd727c2" alt="Two identical climbing curves; the one whose latest video is 2 days old reads Rising +0.29 while the one quiet for 3 weeks reads roughly zero" width="760" height="252" data-path="images/trends/sort-rising-means-now-dark.svg" />

Each trend's `momentum` value ranges from **−1 to +1**: positive = building,
negative = fading, near zero = steady, too little evidence to judge, or
evidence that has aged out of relevance. There is no cliff: the value decays
smoothly, so a trend that was hot three weeks ago drifts down the list rather
than vanishing.

## Freshness follows the most recent wave

`freshness_score` (0–1) measures **how recent a trend's content activity
is**, weighted toward its newest wave of videos. It is a *recency level*,
independent of size. A trend can be small and fresh, or huge and stale.
Trends often resurface: a format that had early buzz and then a strong second
wave reads as fresh again, because the score follows the recent wave rather
than averaging over the trend's whole lifetime.

<img className="block dark:hidden" src="https://mintcdn.com/upriver/ZwHxtkaYvvqJPwNz/images/trends/freshness-recent-wave-light.svg?fit=max&auto=format&n=ZwHxtkaYvvqJPwNz&q=85&s=e01e211a7034ef1c67a07329f5de6d40" alt="A trend with early buzz plus a new second wave scoring 0.62 active, next to a trend with early buzz only scoring 0.18 stale" width="760" height="252" data-path="images/trends/freshness-recent-wave-light.svg" />

<img className="hidden dark:block" src="https://mintcdn.com/upriver/ZwHxtkaYvvqJPwNz/images/trends/freshness-recent-wave-dark.svg?fit=max&auto=format&n=ZwHxtkaYvvqJPwNz&q=85&s=904e8a2b388f9146c16546478c7cfe80" alt="A trend with early buzz plus a new second wave scoring 0.62 active, next to a trend with early buzz only scoring 0.18 stale" width="760" height="252" data-path="images/trends/freshness-recent-wave-dark.svg" />

`timeliness_status` bands the same signal into `recent` / `active` / `stale`
/ `cold` if you prefer labels over thresholds.

<Tip>
  If you're rendering your own "fresh" or "hot" badge, decide which question it
  should answer. **"Recently active content"** → threshold on
  `freshness_score` (or use `timeliness_status`). **"Act on this now"** →
  threshold on `momentum` (e.g. ≥ 0.1). **"New to the catalog"** → sort by
  `newest` and compare `emerged_at` against your last visit. Mixing these
  produces badges that feel wrong on big-but-established trends.
</Tip>

## Field quick reference

| Field               | Meaning                                                                                                                                                                                                                                           |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `freshness_score`   | 0–1 recency of content activity, weighted toward the newest wave. Size-blind.                                                                                                                                                                     |
| `timeliness_status` | The same signal as labels: `recent`, `active`, `stale`, `cold`.                                                                                                                                                                                   |
| `momentum`          | −1..+1 trajectory of posting activity, decaying as the latest evidence ages.                                                                                                                                                                      |
| `emerged_at`        | When the trend first accumulated enough confirmed videos to count as a real trend in our catalog. This is when *we confirmed it*; for formats where we backfill older example videos, it can be later than the oldest video you see on the trend. |

## Which sort for which workflow

* **"I check in every morning"**: use `newest`, and stop at the first trend you
  recognize from yesterday.
* **"I plan content weekly"**: use `recommended`, filtered to your categories.
* **"I want to catch waves early"**: use `rising`, and prioritize entries that
  are also `recent`/`active` on `timeliness_status`.

## Legacy sort values

Older `sort_by` values keep working forever; they resolve to their closest
current equivalent instead of erroring:

| Value sent   | Resolves to | Notes                                                                                                                                                                      |
| ------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `momentum`   | `rising`    | Renamed; identical behavior.                                                                                                                                               |
| `timeliness` | `newest`    | Retired as a distinct sort in July 2026. For a freshness-ordered view, use `newest` with the `timeliness_status=recent` filter, or order client-side by `freshness_score`. |
| `emerging`   | (unchanged) | Still accepted as its own ordering, by `emerged_at`. For most catch-up workflows `newest` is the better fit.                                                               |
