Skip to content
Papers.
Updated 12h ago

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.txt
https://papers.fru.dev/llms-full.txt

Call the API

MethodPathParamsReturns
GET/api/paperslab, topic, since (YYYY-MM-DD), sort (date|citations|upvotes), limit (max 200), offsetPapers: title, lab, date, topic, one plain line, arXiv link, citations, Hugging Face upvotes
GET/api/papers/{slug}slugOne paper in full, with its change history and matching product releases from releases.fru.dev
GET/api/labslimit (max 200), offsetLabs and companies with paper counts, total citations and latest paper date
GET/api/labs/{slug}slugOne lab and all of its papers
GET/api/topicsnoneThe ten topics with paper counts
GET/api/changessince (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/companiessince (ISO date or datetime)Registry feed: each lab with its companies.fru.dev slug, domain, page on this site and dated papers
GET/api/searchq, 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.

New papers by email

Monday afternoons, only in weeks with new papers from the labs.

Double opt-in. Unsubscribe any time.