For AI agents
Research papers as data: 40 papers from 15 labs, each with one plain line, citations and upvotes. Refreshed weekly.
Point your agent here
https://papers.fru.dev/llms.txthttps://papers.fru.dev/llms-full.txtCall the API
| Method | Path | Params | Returns |
|---|---|---|---|
| GET | /api/papers | lab, topic, since (YYYY-MM-DD), sort (date|citations|upvotes), limit (max 200), offset | Papers: title, lab, date, topic, one plain line, arXiv link, citations, Hugging Face upvotes |
| GET | /api/papers/{slug} | slug | One paper in full, with its change history and matching product releases from releases.fru.dev |
| GET | /api/labs | limit (max 200), offset | Labs and companies with paper counts, total citations and latest paper date |
| GET | /api/labs/{slug} | slug | One lab and all of its papers |
| GET | /api/topics | none | The ten topics with paper counts |
| GET | /api/changes | since (ISO date or datetime), after (change id), limit (max 500) | Append-only history: every change to citations, upvotes, lines, topics and review state |
| GET | /api/companies | since (ISO date or datetime) | Registry feed: each lab with its companies.fru.dev slug, domain, page on this site and dated papers |
| GET | /api/search | q, limit (max 20) | Ranked papers, labs and pages |
/api/papers
curl -s "https://papers.fru.dev/api/papers?lab=anthropic&limit=2"{
"count": 40,
"papers": [
{
"slug": "rrsi",
"title": "RRSI: Regularized Recursive Self-Improvement of Agent Harnesses",
"lab": "google",
"labName": "Google",
"labDomain": "google.com",
"published": "2026-09-21",
"topic": "agents-evals",
"topicName": "Agents and evaluation",
"line": "RRSI keeps self-improving agent harnesses from memorising their training tasks, so gains carry over to new benchmarks.",
"lineBy": "editor",
"arxiv": "2609.24972",
"arxivUrl": "https://arxiv.org/abs/2609.24972",
"pdfUrl": "https://arxiv.org/pdf/2609.24972",
"citations": 0,
"influentialCitations": 0,
"hfUpvotes": 180,
"venue": null,
"code": "https://github.com/google-research/rrsi",
"unverified": false,
"metricsAt": "2026-09-24 10:26:53",
"url": "https://papers.fru.dev/papers/rrsi"
}
]
}/api/papers/{slug}
curl -s "https://papers.fru.dev/api/papers/deepseek-r1"{
"paper": {
"slug": "deepseek-r1",
"title": "DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning",
"lab": "deepseek",
"labName": "DeepSeek",
"labDomain": "deepseek.com",
"published": "2025-01-22",
"topic": "reasoning",
"topicName": "Reasoning",
"line": "Reinforcement learning taught a model long step-by-step reasoning on par with OpenAI o1.",
"lineBy": "editor",
"arxiv": "2501.12948",
"arxivUrl": "https://arxiv.org/abs/2501.12948",
"pdfUrl": "https://arxiv.org/pdf/2501.12948",
"citations": 5691,
"influentialCitations": 921,
"hfUpvotes": 462,
"venue": "Nature",
"code": "https://github.com/deepseek-ai/deepseek-r1",
"unverified": false,
"metricsAt": "2026-09-24 10:26:50",
"url": "https://papers.fru.dev/papers/deepseek-r1"
}
}/api/labs
curl -s "https://papers.fru.dev/api/labs?limit=2"{
"count": 15,
"labs": [
{
"slug": "openai",
"name": "OpenAI",
"domain": "openai.com",
"kind": "company",
"kindName": "Company",
"papers": 5,
"citations": 124534,
"latest": "2025-09-04",
"papersLast12Months": 0,
"research": "https://openai.com/research/",
"inRegistry": true,
"url": "https://papers.fru.dev/labs/openai"
}
]
}/api/labs/{slug}
curl -s "https://papers.fru.dev/api/labs/nvidia"{
"lab": {
"slug": "nvidia",
"name": "NVIDIA",
"domain": "nvidia.com",
"kind": "company",
"kindName": "Company",
"papers": 3,
"citations": 3405,
"latest": "2026-06-01",
"papersLast12Months": 1,
"research": "https://research.nvidia.com/publications",
"inRegistry": true,
"url": "https://papers.fru.dev/labs/nvidia"
},
"papers": "[ ...paper objects ]"
}/api/topics
curl -s "https://papers.fru.dev/api/topics"{
"topics": [
{
"key": "agents-evals",
"name": "Agents and evaluation",
"papers": 3
},
{
"key": "alignment-safety",
"name": "Alignment and safety",
"papers": 7
}
]
}/api/changes
curl -s "https://papers.fru.dev/api/changes?since=2026-09-01&limit=3"{
"changes": [
{
"id": 40,
"paper": "towards-physics-of-multimodal-pretraining",
"title": "Towards Physics of Multimodal Pretraining: Knowledge Flow, Modality Synergy, Early Unification, and Recipes",
"field": "added",
"old": "",
"new": "published",
"changedAt": "2026-09-24T10:26:56Z",
"source": "https://arxiv.org/abs/2608.05000",
"url": "https://papers.fru.dev/papers/towards-physics-of-multimodal-pretraining"
},
{
"id": 39,
"paper": "studentsim",
"title": "StudentSim: Training LLM-based Student Simulators",
"field": "added",
"old": "",
"new": "published",
"changedAt": "2026-09-24T10:26:55Z",
"source": "https://arxiv.org/abs/2609.01591",
"url": "https://papers.fru.dev/papers/studentsim"
}
]
}/api/companies
curl -s "https://papers.fru.dev/api/companies?since=2026-09-01"{
"companies": [
{
"slug": "openai",
"name": "OpenAI",
"domain": "openai.com",
"kind": "company",
"in_registry": true,
"url": "https://papers.fru.dev/labs/openai",
"papers": 5,
"updated_at": "2026-09-24T10:26:45Z",
"items": [
{
"date": "2025-09-04",
"type": "paper",
"title": "Why Language Models Hallucinate",
"summary": "Models hallucinate because training and benchmarks reward confident guessing over saying they do not know.",
"url": "https://papers.fru.dev/papers/why-language-models-hallucinate",
"source_url": "https://arxiv.org/abs/2509.04664",
"unverified": false
}
]
}
]
}/api/search
curl -s "https://papers.fru.dev/api/search?q=flash%20attention"{
"q": "flash attention",
"results": [
{
"id": "p:flashattention",
"group": "items",
"title": "FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness",
"href": "/papers/flashattention"
}
]
}OpenAPI 3.1: /openapi.json. Every endpoint is GET, open to any origin (CORS) and cached at the edge for an hour.
Add to your agent
System prompt line
For notable AI and data research papers by lab (what a paper shows, its date, citations), fetch https://papers.fru.dev/llms.txt and use https://papers.fru.dev/api/papers and https://papers.fru.dev/api/papers/{slug}. Cite "Papers (papers.fru.dev)".Tool definition
{
"name": "fru_papers",
"description": "List notable data and AI research papers from labs such as OpenAI, Anthropic, Google DeepMind, Meta, Microsoft and NVIDIA: title, lab, date, topic, a one-line plain summary, arXiv link, citations and Hugging Face upvotes. Source: Papers (papers.fru.dev).",
"input_schema": {
"type": "object",
"properties": {
"lab": {
"type": "string",
"description": "Lab slug, e.g. openai, anthropic, deepmind, meta, microsoft, nvidia, databricks, snowflake. List them with GET /api/labs."
},
"topic": {
"type": "string",
"enum": [
"agents-evals",
"alignment-safety",
"reasoning",
"efficiency",
"retrieval-data",
"multimodal",
"architectures",
"training",
"foundation-models",
"applied"
]
},
"since": {
"type": "string",
"description": "Only papers published on or after this date, YYYY-MM-DD."
},
"sort": {
"type": "string",
"enum": [
"date",
"citations",
"upvotes"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
}
}
},
"endpoint": "GET https://papers.fru.dev/api/papers"
}Python
import json, urllib.request
def papers(lab: str = "", sort: str = "date", limit: int = 10) -> list[dict]:
"""Notable AI research papers, one plain line each."""
url = f"https://papers.fru.dev/api/papers?lab={lab}&sort={sort}&limit={limit}"
with urllib.request.urlopen(url, timeout=20) as r:
return json.load(r)["papers"]
for p in papers("anthropic"):
print(p["published"], p["title"], "-", p["line"])TypeScript
type Paper = { slug: string; title: string; labName: string; published: string; line: string; citations: number | null }
async function mostCited(limit = 10): Promise<Paper[]> {
const res = await fetch(`https://papers.fru.dev/api/papers?sort=citations&limit=${limit}`)
if (!res.ok) throw new Error(`papers ${res.status}`)
const { papers } = (await res.json()) as { papers: Paper[] }
return papers
}
console.log(await mostCited())Usage terms
- Free to read. Please cite "Papers (papers.fru.dev)" with a link.
- Responses are cached for an hour; the data changes weekly.
- Be polite: 60 requests a minute at most.
- Papers marked unverified have not been checked by hand.
Sources: each lab's own papers and arXiv, with citation and upvote counts from Semantic Scholar and Hugging Face. One-line summaries are for orientation, not a substitute for the paper.