Skip to content
unzoi docs
Search and navigation
Start here
REST API
MCP
Limits and plans
Agent clients
SDKs
Guides

Recipes / Build a morning digest someone will actually read

Build a morning digest someone will actually read

/stories in recent mode. This page is the operational half — what comes back, how it breaks, and what running it for real takes.

The request

GET /stories
  ?mode=recent
  &language=eng
  &from=<yesterday 06:00>
  &to=<today 06:00>
  &limit=20

As a call you can paste:

curl -s -G "https://api.unzoi.com/stories" \
  -H "x-api-key: $UNZOI_KEY" \
  --data-urlencode "mode=recent" \
  --data-urlencode "language=eng" \
  --data-urlencode "from=<yesterday 06:00>" \
  --data-urlencode "to=<today 06:00>" \
  --data-urlencode "limit=20"

For an agent rather than a script, the same query is the list_stories MCP tool with these as its arguments.

Parameters used here

What comes back

Twenty distinct events ordered by recency, each with the outlets that carried it. Sorting the result by outlet count rather than time gives you a rough importance ordering for free, with no model and nothing to tune.

Field by field: the /stories response reference.

How this goes wrong

A digest built on article search reads as twenty variations of the top three stories, and people stop opening it within a fortnight. By the time anyone reports it as a problem the habit is gone and getting it back is much harder than never losing it.

Adapting it

For a team digest rather than a personal one, scope by outlet to the publications that team actually trusts — it shortens the digest and raises the hit rate more than any ranking change. For a multilingual audience, run one query per language and label the sections, rather than blending languages into one list where readers skip most of it.

Running it for real

Generate at a fixed time from a fixed window so the digest is reproducible and two readers see the same thing. Cache the result rather than querying per reader. Sort by outlet count instead of recency to get a rough importance ordering with nothing to tune. The metric to watch is not open rate but whether anyone clicks through — a digest people open and never act on is a digest that has quietly become noise.

Why this approach

The case for these parameters over the obvious alternatives — and when this recipe is the wrong tool entirely — is on the recipe's page on unzoi.com. It is kept there rather than repeated here, so the argument and the operations cannot drift apart.