WhatsTrending API

A free, no-auth REST API for live, cross-signal AI trends — model usage, news, repos, funding and tools, all in one place. No key. No signup. CORS-enabled. JSON.

No API key No signup CORS enabled JSON Refreshed every 6h
Base URL https://whatstrending.ai

Response shape & CORS

JSON endpoints return an envelope: { "success": true, "data": … } on success, or { "success": false, "error": "…" } on failure. Every endpoint sends Access-Control-Allow-Origin: *, so you can call it straight from the browser.

The .md mirrors, /llms.txt, RSS and the sitemap return plain text / XML (not the JSON envelope).

Endpoints
GET /api/articlesGET /api/articles/{slug}GET /api/modelsGET /api/models/{id}GET /api/most-readGET /api/awesome-dataGET /feed.xmlGET /news.mdGET /models.mdGET /llms.txtGET /sitemap.xml
Reference
GET /api/articles

The latest AI/tech news — aggregated from 20+ sources, de-duplicated, categorized and LLM-summarized. Refreshed every 6 hours.

ParamTypeDescription
limitintegerMax items to return. Default 50.
offsetintegerSkip the first N items (pagination). Default 0.
categorystringOptional filter, e.g. Research, Product, Regulation.
curl -s "https://whatstrending.ai/api/articles?limit=3"
const res = await fetch('https://whatstrending.ai/api/articles?limit=3');
const { success, data } = await res.json();
console.log(data);
import requests
r = requests.get('https://whatstrending.ai/api/articles?limit=3')
print(r.json()['data'])
https://whatstrending.ai/api/articles?limit=3
Sample response
{
  "success": true,
  "data": [
    {
      "title": "From PGP to Mythos: a brief history of export controls",
      "slug": "from-pgp-to-mythos-a-brief-history-of-export-controls",
      "source": "TechCrunch",
      "category": "Regulation",
      "date": "Fri, 19 Jun 2026 22:40:14 +0000",
      "summary": "The U.S. Commerce Department recently issued an export control directive…",
      "trendScore": 1
    }
  ]
}
GET /api/articles/{slug}

A single article by its slug, including the full rewritten body. Get a slug from the feed above.

ParamTypeDescription
slugstring (path)The article slug, e.g. from /api/articles.
curl -s "https://whatstrending.ai/api/articles/from-pgp-to-mythos-a-brief-history-of-export-controls-that-didnt-stop-anyone"
const res = await fetch('https://whatstrending.ai/api/articles/from-pgp-to-mythos-a-brief-history-of-export-controls-that-didnt-stop-anyone');
const { success, data } = await res.json();
console.log(data);
import requests
r = requests.get('https://whatstrending.ai/api/articles/from-pgp-to-mythos-a-brief-history-of-export-controls-that-didnt-stop-anyone')
print(r.json()['data'])
https://whatstrending.ai/api/articles/from-pgp-to-mythos-a-brief-history-of-export-controls-that-didnt-stop-anyone
Sample response
{
  "success": true,
  "data": {
    "title": "From PGP to Mythos: a brief history of export controls",
    "slug": "from-pgp-to-mythos-a-brief-history-of-export-controls",
    "source": "TechCrunch",
    "category": "Regulation",
    "date": "Fri, 19 Jun 2026 22:40:14 +0000",
    "summary": "The U.S. Commerce Department recently issued an export control directive…",
    "body": "The U.S. Commerce Department recently issued an export control… (full text)"
  }
}
GET /api/models

Live LLM usage leaderboard built from real OpenRouter throughput — ranked by tokens processed, with provider, pricing, and context window.

ParamTypeDescription
limitintegerMax models to return. Default 50.
offsetintegerSkip the first N models. Default 0.
categorystringOptional filter, e.g. Open Source.
curl -s "https://whatstrending.ai/api/models?limit=3"
const res = await fetch('https://whatstrending.ai/api/models?limit=3');
const { success, data } = await res.json();
console.log(data);
import requests
r = requests.get('https://whatstrending.ai/api/models?limit=3')
print(r.json()['data'])
https://whatstrending.ai/api/models?limit=3
Sample response
{
  "success": true,
  "data": [
    {
      "rank": 1,
      "name": "DeepSeek V4 Flash",
      "provider": "DeepSeek",
      "score": 4676,
      "scoreDisplay": "4.68T",
      "tokens": 4676449991973,
      "requests": 362209743,
      "pricing": "$0.09/$0.18",
      "context": "1M",
      "category": "Open Source",
      "change": "0",
      "or": "deepseek/deepseek-v4-flash"
    }
  ]
}
GET /api/models/{id}

A single model by its id (the model name lowercased with spaces as dashes, e.g. deepseek-v4-flash).

ParamTypeDescription
idstring (path)Model id — name lowercased, spaces → dashes.
curl -s "https://whatstrending.ai/api/models/deepseek-v4-flash"
const res = await fetch('https://whatstrending.ai/api/models/deepseek-v4-flash');
const { success, data } = await res.json();
console.log(data);
import requests
r = requests.get('https://whatstrending.ai/api/models/deepseek-v4-flash')
print(r.json()['data'])
https://whatstrending.ai/api/models/deepseek-v4-flash
Sample response
{
  "success": true,
  "data": {
    "rank": 1,
    "name": "DeepSeek V4 Flash",
    "provider": "DeepSeek",
    "score": 4676,
    "scoreDisplay": "4.68T",
    "pricing": "$0.09/$0.18",
    "context": "1M",
    "category": "Open Source",
    "or": "deepseek/deepseek-v4-flash"
  }
}
GET /api/most-read

Top articles by view count. Returns an array of { slug, views } — pair the slug with /api/articles/{slug} for the full piece. (May be empty when view data has not yet accumulated.)

No parameters.

curl -s "https://whatstrending.ai/api/most-read"
const res = await fetch('https://whatstrending.ai/api/most-read');
const { success, data } = await res.json();
console.log(data);
import requests
r = requests.get('https://whatstrending.ai/api/most-read')
print(r.json()['data'])
https://whatstrending.ai/api/most-read
Sample response
{
  "success": true,
  "data": [
    {
      "slug": "openai-ships-realtime-agents",
      "views": 1284
    },
    {
      "slug": "anthropic-opus-4-8-released",
      "views": 977
    }
  ]
}
GET /api/awesome-data

Everything in one call: the full AI tools directory, head-to-head comparisons, and the top 20 models. Built for static-site generators and weekly README syncs.

No parameters.

curl -s "https://whatstrending.ai/api/awesome-data"
const res = await fetch('https://whatstrending.ai/api/awesome-data');
const { success, data } = await res.json();
console.log(data);
import requests
r = requests.get('https://whatstrending.ai/api/awesome-data')
print(r.json()['data'])
https://whatstrending.ai/api/awesome-data
Sample response
{
  "generatedAt": "2026-06-20T14:41:13.657Z",
  "site": "https://whatstrending.ai",
  "tools": [
    {
      "name": "Cursor",
      "tagline": "The AI code editor",
      "description": "…",
      "url": "https://cursor.com",
      "category": "Coding",
      "pricing": "Freemium"
    }
  ],
  "comparisons": [
    {
      "a": "Cursor",
      "b": "GitHub Copilot",
      "slug": "cursor-vs-github-copilot"
    }
  ],
  "models": [
    "… top 20 models, same shape as /api/models"
  ]
}
GET /feed.xml

Standard RSS 2.0 feed of the latest AI news. Also served at /rss and /rss.xml. Content-Type: application/xml.

No parameters.

curl -s "https://whatstrending.ai/feed.xml"
const res = await fetch('https://whatstrending.ai/feed.xml');
const text = await res.text();
console.log(text);
import requests
r = requests.get('https://whatstrending.ai/feed.xml')
print(r.text)
https://whatstrending.ai/feed.xml
Sample response
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>AI News, Model Rankings &amp; Trending AI Tools | whatstrending.ai</title>
    <link>https://whatstrending.ai</link>
    <description>The latest AI news…</description>
    <item> … </item>
  </channel>
</rss>
GET /news.md

The news feed as clean Markdown — built for AI agents and LLM context windows. Content-Type: text/markdown.

No parameters.

curl -s "https://whatstrending.ai/news.md"
const res = await fetch('https://whatstrending.ai/news.md');
const text = await res.text();
console.log(text);
import requests
r = requests.get('https://whatstrending.ai/news.md')
print(r.text)
https://whatstrending.ai/news.md
Sample response
# Latest AI News — whatstrending.ai

Aggregated from 20 AI/tech sources, de-duplicated, categorized, and summarized by an LLM. Refreshed every 6 hours.

## …
GET /models.md

The model leaderboard as Markdown — agent-friendly mirror of /api/models. Content-Type: text/markdown.

No parameters.

curl -s "https://whatstrending.ai/models.md"
const res = await fetch('https://whatstrending.ai/models.md');
const text = await res.text();
console.log(text);
import requests
r = requests.get('https://whatstrending.ai/models.md')
print(r.text)
https://whatstrending.ai/models.md
Sample response
# AI Model Leaderboard — whatstrending.ai

Ranked by live token throughput via OpenRouter. Refreshed every 6 hours.

| # | Model | Provider | … |
GET /llms.txt

The llms.txt site map for LLMs — a structured plaintext index pointing agents at the Markdown mirrors and key pages. Also at /.well-known/llms.txt.

No parameters.

curl -s "https://whatstrending.ai/llms.txt"
const res = await fetch('https://whatstrending.ai/llms.txt');
const text = await res.text();
console.log(text);
import requests
r = requests.get('https://whatstrending.ai/llms.txt')
print(r.text)
https://whatstrending.ai/llms.txt
Sample response
# whatstrending.ai

> AI intelligence dashboard: news, model rankings, repos, tools.

## Data for agents
- [News (Markdown)](https://whatstrending.ai/news.md)
- [Models (Markdown)](https://whatstrending.ai/models.md)
GET /sitemap.xml

Full XML sitemap of every indexable page. Content-Type: application/xml.

No parameters.

curl -s "https://whatstrending.ai/sitemap.xml"
const res = await fetch('https://whatstrending.ai/sitemap.xml');
const text = await res.text();
console.log(text);
import requests
r = requests.get('https://whatstrending.ai/sitemap.xml')
print(r.text)
https://whatstrending.ai/sitemap.xml
Sample response
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://whatstrending.ai/</loc></url>
  …
</urlset>

Rate limits & fair use

No hard rate limit today — please be reasonable. The underlying data only changes every ~6 hours, so cache responses and avoid hammering on a loop. Responses are already edge-cached; one request per few minutes per endpoint is plenty. Heavy or abusive traffic may be throttled.

For AI agents

Building an agent or LLM tool? Skip the JSON parsing — point your model at the Markdown mirrors and discovery file: /news.md, /models.md, and /llms.txt. They are token-efficient, human-readable, and refreshed on the same 6-hour cycle.

Source & issues: github.com/0xvibly/whatstrending-api.