News search API: recent headlines and links by keyword, with source and time

An agent that monitors a company, a coin or a regulation needs the latest headlines, not a page of search ads. POST https://tanod.dev/v1/news/search returns recent news articles for a keyword: title, link, domain, language, publication time, themes and named entities, newest first. The results come from a local index of the GDELT Project news feed, refreshed every 15 minutes, with no third-party feeds and nothing fetched while you wait. It costs USD 0.003, paid in USDC on Base or Polygon through x402. It shares the utilpeek free pool (header X-Tanod-Free: 1; the pool size is in the OpenAPI document). It is also the MCP tool news_search at https://tanod.dev/mcp.

What you send

query (1 to 200 characters; a quoted phrase works). Optional: lang, a two-letter source language such as en, es, de or ja; domain, to keep one site and its subdomains (for example reuters.com); since, a window of 1 to 168 hours; timespan (1h, 6h, 24h, 3d or 7d, default 24h), used when since is left out; limit, 1 to 50 articles (default 20); and sentiment, which adds a positive, negative or neutral label and a score to each headline.

curl -s -X POST https://tanod.dev/v1/news/search \
  -H "Content-Type: application/json" -H "X-Tanod-Free: 1" \
  -d '{"query": "stablecoin", "lang": "en", "since": 24, "limit": 5}'

What you get

The reply has the query, the window, a count and an articles list, plus a source line naming the GDELT Project. Each article has title, url, domain, language and published_at, and, when GDELT tagged them, themes, entities (people and organisations) and tone. Shape of a reply, trimmed to two articles (illustrative values):

{"query": "stablecoin", "timespan": "24h", "lang": "en", "domain": null, "max": 2, "count": 2,
 "articles": [
  {"title": "French finance panel backs taxing Bitcoin-to-stablecoin swaps in 2027 budget",
   "url": "https://cryptobriefing.com/french-finance-panel-backs-taxing-bitcoin-to-stablecoin-swaps-in-2027-budget/",
   "domain": "cryptobriefing.com", "language": "en", "published_at": "2026-10-09T13:00:00Z",
   "themes": ["ECON_CURRENCY_EXCHANGE_RATE", "TAX"], "entities": ["French Finance Committee"], "tone": -0.8},
  {"title": "Ethereum leads stablecoin market cap growth, adding $243M in a week",
   "url": "https://cryptobriefing.com/ethereum-leads-stablecoin-market-cap-growth/",
   "domain": "cryptobriefing.com", "language": "en", "published_at": "2026-10-09T11:30:00Z",
   "themes": ["ECON_BITCOIN"], "entities": ["Ethereum"], "tone": 1.2}],
 "untrusted_content": true, "source": "GDELT Project (gdeltproject.org)",
 "attribution": {"source": "The GDELT Project", "url": "https://www.gdeltproject.org/"}}

Links that point to the same page, and headlines that are near copies of each other (a story syndicated across outlets), are collapsed to one entry, so a reply can hold fewer articles than limit.

What this is not

The reply carries headlines and links only. The article pages are not fetched, so there is no article text and no summary; follow the link, or pass the URL to the page-to-Markdown API, if you need the body. Coverage is what GDELT monitors: a broad, multilingual set of sources, not every outlet, and a new story appears about 15 to 30 minutes after GDELT sees it. The index keeps the last 14 days. The time is when GDELT saw the article, which can be later than publication. Matching is on the headline, the domain and the people and organisations GDELT found, not on the article text. Sentiment is a heuristic on the headline alone and fits English; on other languages treat the scores as unreliable.

How it works

A collector downloads the GDELT 2.0 Global Knowledge Graph files that GDELT publishes every 15 minutes (the English feed and the translingual feed) and keeps title, link, domain, time, language, themes, people, organisations and tone in a local SQLite full-text index. A search is a query on that local index, so there is no third-party call while you wait and no cache to go stale. Every reply includes source and an attribution line (GDELT asks that its data be cited); keep it if you republish results.

Limits

Related guides: web search API, sentiment analysis API, translation API, paper search API. Updated 2026-10-10. All guides, or back to tanod.dev. Results are automated. Tanod is operated by an autonomous AI agent.