NPR API: Search news
Searches NPR-published articles by keyword, newest first or by best match, with optional publication dates, and returns each article's date, authors, section and summary.
Unofficial. Not affiliated with or endorsed by NPR.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Page optional
page Results page, starting at 1, for example 2.
1
Whole number 1 or more. Default
1.- Sort optional
sort Order articles by newest publication or best match, for example newest.
newest (default)
One of
newest,most_relevant.- Query, required
query Words to search for, such as Tesla.
Tesla
- To Date optional
to_date Latest publication date (YYYY-MM-DD), for example 2026-09-01.
Not set
- From Date optional
from_date Earliest publication date (YYYY-MM-DD), for example 2026-01-01.
Not set
- Max Results optional
max_results Articles per page, for example 20.
50
Whole number from 1 to 50. Default
20.
Input as JSON
{ "page": 1, "query": "Tesla", "max_results": 50}Output
{ "articles": [ { "authors": [ "Scott Simon" ], "section": "Author Interviews", "summary": "NPR's Scott Simon talks with journalist Robert Kolker about his new book, \"The Vanishing Family.\" It's about a family with a high risk of frontotemporal dementia due to a genetic mutation.", "headline": "Award-winning journalist Robert Kolker talks about his book, 'The Vanishing Family'", "article_link": "https://www.npr.org/2026/09/26/nx-s1-5777570/award-winning-journalist-robert-kolker-talks-about-his-book-the-vanishing-family" , "published_at": "2026-09-26T07:37:46-04:00" }, { "authors": [ "Jason DeRose" ], "section": "Religion", "summary": "The AI users included a conservative Christian in Texas, a witchcraft practitioner in Virginia and a Jewish man from California.", "headline": "A surprising number of Americans use AI for spiritual reasons. Here's what they told us", "article_link": "https://www.npr.org/2026/09/21/nx-s1-5944346/a-surprising-number-of-americans-use-ai-for-spiritual-reasons-heres-what-they-told-us" , "published_at": "2026-09-25T15:22:49-04:00" }, { "authors": [ "The Associated Press" ], "section": "U.S. vs. China: Inside a great power rivalry", "summary": "A tech-heavy guest list, the fashion choices of those on it, who sat where and what was on the menu marked the softer — often and glitzier — details of diplomacy as Donald Trump threw a Thursday night state dinner honoring China's leader Xi Jinping.", "headline": "Trump's state dinner for Xi features sea bass and a long list of tech titans", "article_link": "https://www.npr.org/2026/09/25/g-s1-144973/trump-state-dinner-xi" , "published_at": "2026-09-25T02:18:59-04:00" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"npr.org/search_news","input":{"page":1,"query":"Tesla","max_results":50}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "npr.org/search_news" , "input": { "page": 1, "query": "Tesla", "max_results": 50 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "npr.org/search_news" , "input": { "page": 1, "query": "Tesla", "max_results": 50 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run npr.org/search_news# with {"page":1,"query":"Tesla","max_results":50}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "query" ], "properties": { "page": { "type": "integer", "default": 1, "minimum": 1, "description": "Results page, starting at 1, for example 2." }, "sort": { "enum": [ "newest", "most_relevant" ], "type": "string", "default": "newest", "description": "Order articles by newest publication or best match, for example newest." }, "query": { "type": "string", "minLength": 1, "description": "Words to search for, such as Tesla." }, "to_date": { "type": "string", "description": "Latest publication date (YYYY-MM-DD), for example 2026-09-01." }, "from_date": { "type": "string", "description": "Earliest publication date (YYYY-MM-DD), for example 2026-01-01." }, "max_results": { "type": "integer", "default": 20, "maximum": 50, "minimum": 1, "description": "Articles per page, for example 20." } }}Output schema
{ "type": "object", "required": [ "articles" ], "properties": { "articles": { "type": "array", "items": { "type": "object", "required": [ "headline", "summary", "published_at", "authors", "section", "article_link" ], "properties": { "authors": { "type": "array", "items": { "type": "string" } }, "section": { "type": [ "string", "null" ] }, "summary": { "type": [ "string", "null" ] }, "headline": { "type": "string" }, "article_link": { "type": "string" }, "published_at": { "type": "string", "description": "Article publication time with UTC offset." } } }, "description": "NPR articles matching the search." } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
npr.org/search_news- Returns
- headline, summary, published time, authors, section, article link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method npr.org/search_news with the inputs above.
Ask your agent
- Find the latest NPR articles about the Federal Reserve interest rate decision, with authors and section for each
- Show me news stories on wildfire smoke health effects published between 2025-06-01 and 2025-09-30, best matches first
- I need the second page of recent coverage mentioning Ukraine ceasefire talks, 30 articles per page
- What has NPR published on AI chatbots in schools since March 2025? Give headlines, summaries and links
- Pull the 10 most relevant public radio news pieces about the measles outbreak in Texas, including publish dates and bylines
See more
All NPR methodsLists the headlines on an NPR section page in page order, with summaries, publication times, authors, images and article links.
npr.org/list_headlinesReads an NPR article by its link or headline and returns its text and publication details. For live blogs, returns the displayed updates.
npr.org/read_articleSearches New York Times article headlines and summaries by keyword, optionally within a date range, and returns matching articles with dates, authors, sections and links, newest or most relevant first.
nytimes.com/search_newsSearches Reuters articles by keyword through Google News, with optional publication date range, order and page. Summaries and bylines are filled in when Reuters serves the article page.
reuters.com/search_newsSearches Yahoo News articles by keyword, newest first or by relevance, with optional publication dates and pages; returns only articles hosted on Yahoo News, with authors, original publisher and section.
yahoo.com/search_newsFinds BBC News articles matching search words, newest first or by relevance, with publication time, authors, section and summary, optionally limited to a date range. Date filters and newest order apply to the first 180 search matches; older or less relevant matches may be missed.
bbc.com/search_newsSearches CNN articles by keyword, with optional publication date range, sort order and pagination.
cnn.com/search_newsSearches public Wall Street Journal headlines and summaries by keyword, newest or most relevant first, optionally within publication dates; podcasts and live-coverage posts are left out.
wsj.com/search_news