AgingResearch.News

Developers

The aging research data API

Every paper we read, how we judged it, the stories we wrote and the facts we pulled out, as JSON.

Quickstart

  1. 1.Create a key below and keep it secret, in an environment variable such as ARN_KEY.
  2. 2.Send it as a bearer token. Every endpoint is a GET that answers JSON, with snake_case fields and ISO 8601 dates in UTC.
  3. 3.Page through results with pagination.next_cursor, up to 100 at a time.
curl
curl -H "Authorization: Bearer $ARN_KEY" \
  "https://agingresearch.news/api/v1/papers?topic=senescence&study_type=human_trial,animal&limit=5"
Response (shortened)
{
  "data": [
    {
      "id": "MED-42803875",
      "doi": "10.1002/cns.71174",
      "title": "mTORC1 Activation Links Chronic Stress to …",
      "journal": "CNS neuroscience & therapeutics",
      "published_date": "2026-10-01",
      "indexed_date": "2026-09-29",
      "preprint": false,
      "abstract": "Background Although depression is …",
      "abstract_license": "cc by",
      "judgement": {
        "relevance": 2.11,
        "newsworthiness": 1.51,
        "study_type": "animal",
        "topic": "mtor-rapamycin"
      },
      "story": null
    }
  ],
  "pagination": { "next_cursor": "WyJwYXBlcnMiLC…", "has_more": true, "limit": 5 }
}
JavaScript
const headers = { Authorization: `Bearer ${process.env.ARN_KEY}` };
const res = await fetch("https://agingresearch.news/api/v1/search?q=senolytic", { headers });
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
const { data, pagination } = body;
Every paper since a date
let cursor = null;
do {
  const url = new URL("https://agingresearch.news/api/v1/papers");
  url.searchParams.set("since", "2026-09-01");
  url.searchParams.set("limit", "100");
  if (cursor) url.searchParams.set("cursor", cursor);
  const page = await (await fetch(url, { headers })).json();
  save(page.data);
  cursor = page.pagination.next_cursor;
} while (cursor);

By default lists hold papers about aging biology: those our classifier scores 2 or more out of 3 for relevance. Pass min_relevance=1 to add tangential papers, or 0 for every paper we read. CORS is open, so the API works from a browser, but a key in a public web page is a key anyone can use. The full contract is at /api/v1/openapi.json for Postman, Insomnia or a client generator.

Your keys

Keys come with Plus. Sign in to create one; it takes a minute.

Endpoints

GET/api/v1/papers

List papers

Papers ARN has read, newest first (by the date they entered ARN, then id), with the relevance judgement and, when one is published, our story.

  • sincedate
    Only papers that entered ARN on or after this UTC date (YYYY-MM-DD; a full ISO timestamp is cut to its date).
  • untildate
    Only papers that entered ARN on or before this UTC date (YYYY-MM-DD).
  • min_relevancenumber
    Lowest aging-relevance score to include (0 to 3, see judgement.relevance). The default, 2, is the bar the site uses for aging biology; 1 adds tangential papers; 0 returns every paper ARN read, most of which are not about aging.
  • study_typelist
    Main source of evidence. One value or a comma-separated list.One of human_trial, human_observational, animal, invertebrate, cells, computational, review, other
  • topiclist
    Topic slug from /topics, or other. One value or a comma-separated list.One of senescence, epigenetic-clocks, mtor-rapamycin, reprogramming, nad-sirtuins, mitochondria, dietary-restriction, glp-1, inflammaging, brain-aging, other
  • preprintboolean
    true for preprints only, false for peer-reviewed papers only. Omit for both.
  • qstring
    Full-text filter over title and abstract. Supports "quoted phrases", OR and -exclusions. Results stay in date order; use /search for ranked results.
  • cursorstring
    Opaque cursor from pagination.next_cursor of the previous page. Keep the other parameters the same.
  • limitinteger
    Results per page, 1 to 100. Default 25.

Returns data: an array of Paper, with pagination.

Example
curl -H "Authorization: Bearer $ARN_KEY" \
  "https://agingresearch.news/api/v1/papers?topic=senescence&study_type=human_trial,animal&limit=10"

GET/api/v1/papers/{id}

Get one paper

One paper with its judgement, our full story when published, reader upvotes, and the entities and claims extracted from it when available.

  • idpath · string
    ARN paper id, e.g. MED-42823970. Required.

Returns data: one PaperDetail.

Example
curl -H "Authorization: Bearer $ARN_KEY" \
  "https://agingresearch.news/api/v1/papers/MED-42823970"

GET/api/v1/stories

List published stories

Stories ARN wrote about new papers and published, newest first. Stories are ours to license; each carries its paper.

  • sincedate
    Only stories published on or after this UTC date (YYYY-MM-DD).
  • untildate
    Only stories published on or before this UTC date (YYYY-MM-DD).
  • topiclist
    Topic slug from /topics, or other. One value or a comma-separated list.One of senescence, epigenetic-clocks, mtor-rapamycin, reprogramming, nad-sirtuins, mitochondria, dietary-restriction, glp-1, inflammaging, brain-aging, other
  • study_typelist
    Main source of evidence. One value or a comma-separated list.One of human_trial, human_observational, animal, invertebrate, cells, computational, review, other
  • cursorstring
    Opaque cursor from pagination.next_cursor of the previous page. Keep the other parameters the same.
  • limitinteger
    Results per page, 1 to 100. Default 25.

Returns data: an array of StoryItem, with pagination.

Example
curl -H "Authorization: Bearer $ARN_KEY" \
  "https://agingresearch.news/api/v1/stories?limit=5"

GET/api/v1/topics

List topics

The topics ARN files aging papers under, with paper counts.

Returns data: an array of Topic.

Example
curl -H "Authorization: Bearer $ARN_KEY" \
  "https://agingresearch.news/api/v1/topics"

GET/api/v1/entities

List entities

Canonical things papers are about (interventions, genes, pathways, hallmarks, phenotypes, organisms, tissues, diseases, biomarkers, MeSH headings), most-studied first. Without q, counts and order are refreshed every minute.

  • typestring
    Entity type, e.g. intervention, gene, pathway, hallmark, phenotype, organism, tissue, disease, biomarker, mesh.
  • qstring
    Match on name or key, case-insensitive substring.
  • cursorstring
    Opaque cursor from pagination.next_cursor of the previous page. Keep the other parameters the same.
  • limitinteger
    Results per page, 1 to 100. Default 25.

Returns data: an array of Entity, with pagination.

Example
curl -H "Authorization: Bearer $ARN_KEY" \
  "https://agingresearch.news/api/v1/entities?type=intervention&q=rapa"

GET/api/v1/entities/{type}/{key}

Get an entity and its papers

One entity with counts and the papers that involve it, newest first, each with the roles the entity plays in it.

  • typepath · string
    Entity type. Required.
  • keypath · string
    Entity key within its type, URL-encoded. Required.
  • min_relevancenumber
    Lowest aging-relevance score for the papers listed. Default: no filter.
  • cursorstring
    Opaque cursor from pagination.next_cursor of the previous page. Keep the other parameters the same.
  • limitinteger
    Results per page, 1 to 100. Default 25.

Returns data: one EntityDetail, with pagination.

Example
curl -H "Authorization: Bearer $ARN_KEY" \
  "https://agingresearch.news/api/v1/entities/intervention/rapamycin"

GET/api/v1/claims

List claims

Findings extracted from papers as subject, relation and object, with organism, context and effect size. Newest first.

  • subjectstring
    Subject text, entity name or entity key (case-insensitive substring).
  • objectstring
    Object text, entity name or entity key (case-insensitive substring).
  • relationstring
    Exact relation, e.g. increases, decreases, associated_with, extends_lifespan.
  • organismstring
    Organism, e.g. Homo sapiens, Mus musculus (case-insensitive substring).
  • paper_idstring
    Only claims from this paper.
  • cursorstring
    Opaque cursor from pagination.next_cursor of the previous page. Keep the other parameters the same.
  • limitinteger
    Results per page, 1 to 100. Default 25.

Returns data: an array of ClaimItem, with pagination.

Example
curl -H "Authorization: Bearer $ARN_KEY" \
  "https://agingresearch.news/api/v1/claims?subject=rapamycin&relation=extends_lifespan"

GET/api/v1/stats

Corpus statistics

Counts across the corpus: papers read, how many are about aging, stories, knowledge-graph size, and daily volumes for the last 30 days.

Returns data: one Stats.

Example
curl -H "Authorization: Bearer $ARN_KEY" \
  "https://agingresearch.news/api/v1/stats"

Fields

Every field listed is always present; a value that is unknown is null, never missing. New fields may be added to v1; none will be removed or change meaning.

Paper

A paper ARN has read.

  • idstring
    ARN paper id: the Europe PMC source and id.
  • sourcestring
    Europe PMC source: MED (PubMed) or PPR (preprint servers).
  • doistring or null
    DOI, lowercase, without the https://doi.org/ prefix.
  • titlestring
    Title as published.
  • authorsstring
    Authors as listed by Europe PMC, the first three then et al.
  • journalstring
    Journal or preprint server.
  • published_datedate or null
    Publication date, YYYY-MM-DD.
  • indexed_datedate
    Date Europe PMC first indexed the record: the day it entered ARN. since and until filter on this.
  • preprintboolean
    True for preprints that have not been peer reviewed.
  • publication_typesarray of string
    Publication types from PubMed, e.g. Journal Article, Review, Randomized Controlled Trial.
  • urlURL
    Where to read the paper: the DOI, else PubMed or Europe PMC.
  • site_urlURL
    The paper's page on AgingResearch.News.
  • abstractstring or null
    Full abstract, only when its licence allows reuse (CC BY, CC0 or public domain). Null otherwise; see abstract_license.
  • abstract_licensestring or null
    Licence of the abstract as reported by Europe PMC, lowercase, e.g. cc by, cc by-nc. Null when the publisher reports none, which means all rights reserved.
  • judgementJudgement or null
    How ARN's classifier judged the paper. Null if it has not been judged yet.
  • storyStorySummary or null
    Our published story about the paper, if there is one.

PaperRef

A paper, without its story.

Every field of Paper except story.

Judgement

ARN's classifier judgement of a paper.

  • relevancenumber
    Aging relevance, 0 to 3, probability-weighted: 0 not aging biology, 1 tangential, 2 relevant, 3 core geroscience.
  • relevance_confidencenumber or null
    Classifier confidence in the relevance score, 0 to 1.
  • newsworthinessnumber
    Newsworthiness for people who follow aging research, 0 to 3: 0 routine, 1 notable, 2 important, 3 major.
  • study_typestring or null
    Main source of evidence.One of human_trial, human_observational, animal, invertebrate, cells, computational, review, other
  • study_type_labelstring or null
    Display label for study_type, e.g. Human trial.
  • study_type_confidencenumber or null
    Confidence in study_type, 0 to 1.
  • topicstring or null
    Topic slug the paper is filed under, or other.One of senescence, epigenetic-clocks, mtor-rapamycin, reprogramming, nad-sirtuins, mitochondria, dietary-restriction, glp-1, inflammaging, brain-aging, other
  • topic_confidencenumber or null
    Confidence in topic, 0 to 1.
  • promotionalnumber or null
    Probability, 0 to 1, that the record is promotional rather than research.
  • modelstring
    Classifier model.
  • prompt_versionstring
    Version of the questions the classifier answered.
  • judged_atdate-time
    When the paper was judged (UTC).

StorySummary

A story, in brief.

  • headlinestring
    Story headline.
  • dekstring
    One-sentence standfirst.
  • urlURL
    The story on AgingResearch.News.

PaperDetail

A paper with everything ARN knows about it.

Every field of Paper, plus:

  • storyStory or null
    Our full published story, if there is one.
  • upvotesinteger
    Reader upvotes on AgingResearch.News.
  • entitiesarray of PaperEntity
    Entities extracted from the paper. Empty until the paper has been through extraction.
  • claimsarray of Claim
    Claims extracted from the paper. Empty until the paper has been through extraction.

Story

A story ARN wrote about a paper.

  • headlinestring
    Story headline.
  • dekstring
    One-sentence standfirst.
  • bodystring
    The story, plain text paragraphs separated by blank lines.
  • why_it_mattersstring
    Why the finding matters.
  • caveatsstring
    Limits of the study.
  • supportnumber or null
    Independent check of how faithfully the story reports the abstract, 0 to 3: 0 contradicts, 1 overstates, 2 minor imprecision, 3 fully faithful.
  • modelstring
    Model that wrote the story.
  • published_atdate-time
    When the story was published (UTC).
  • urlURL
    The story on AgingResearch.News.

SearchHit

A paper that matched a search.

Every field of Paper, plus:

  • scorenumber
    Match score, 0 to 1. Higher is better.

StoryItem

A published story with its paper.

Every field of Story, plus:

  • paper_idstring
    Paper the story is about.
  • The paper the story is about, without its story.

Topic

A topic.

  • slugstring
    Topic slug, used by the topic filter.
  • namestring
    Display name.
  • descriptionstring
    What the topic covers.
  • papers_7dinteger
    Papers about aging biology (relevance 2 or more) filed under the topic in the last 7 days.
  • papers_totalinteger
    All papers about aging biology filed under the topic.
  • site_urlURL
    The topic page.
  • feed_urlURL
    RSS feed of the topic's stories.

Entity

Something papers are about.

  • typestring
    Entity type, e.g. intervention, gene, pathway, hallmark, phenotype, organism, tissue, disease, biomarker, mesh (MeSH heading).
  • keystring
    Normalised key within the type: an ontology id when known.
  • namestring
    Display name.
  • idsobject of strings
    Identifiers in other databases, e.g. pubchem, chebi, hgnc, ncbigene, taxon, mesh, go.
  • paper_countinteger
    Papers that involve the entity.
  • api_urlURL
    This entity's API URL.

EntityDetail

An entity with its papers.

Every field of Entity, plus:

  • claim_countinteger
    Claims with the entity as subject or object.
  • papersarray of EntityPaper
    Papers that involve the entity, newest first. Paginated.

EntityPaper

A paper that involves an entity.

Every field of PaperRef, plus:

  • rolesarray of string
    Roles the entity plays in this paper.

PaperEntity

An entity as it appears in one paper.

  • typestring
    Entity type, e.g. intervention, gene, pathway, hallmark, phenotype, organism, tissue, disease, biomarker, mesh (MeSH heading).
  • keystring
    Normalised key within the type: an ontology id when known.
  • namestring
    Display name.
  • idsobject of strings
    Identifiers in other databases, e.g. pubchem, chebi, hgnc, ncbigene, taxon, mesh, go.
  • rolestring
    What the entity is in this paper, e.g. studied, mechanism, outcome, model, context, target, mentioned, indexed (a MeSH heading).
  • detailobject or null
    Detail about the role, as extracted. Keys: class, form, targets, dose, route, duration, strain, sex, age, n, system, species, role, effect, confidence, kind, direction, magnitude, major, qualifiers, chemical, registry, and mention and description, which quote or paraphrase the abstract and so appear only when its licence allows reuse. Null when there is none.

Claim

A finding, as subject, relation and object.

  • idinteger
    Claim id.
  • paper_idstring
    Paper the claim comes from.
  • subjectClaimSide
    What acts.
  • relationstring
    How the subject relates to the object, e.g. increases, decreases, associated_with, extends_lifespan, protects_against.
  • objectClaimSide
    What is affected.
  • organismstring or null
    Organism the finding is in.
  • contextobject or null
    Conditions of the finding, as extracted. Keys: condition, form, sex, age, tissue, dose, duration, n, subject_type, object_type, primary, design, evidence_level, preprint; a key with no value is left out. Null when there are none.
  • directionstring or null
    Direction of the effect.One of increase, decrease, no_change, mixed
  • magnitudestring or null
    Effect size as reported, e.g. +14% median lifespan.
  • evidencestring or null
    Supporting quote from the abstract. Only when the abstract's licence allows reuse; null otherwise.
  • confidencenumber or null
    Extraction confidence, 0 to 1.
  • created_atdate-time
    When the claim was extracted (UTC).

ClaimSide

One end of a claim.

  • textstring
    The subject or object as the paper states it.
  • entityEntityRef or null
    The canonical entity, when it was resolved.

EntityRef

A pointer to an entity.

  • typestring
    Entity type, e.g. intervention, gene, pathway, hallmark, phenotype, organism, tissue, disease, biomarker, mesh (MeSH heading).
  • keystring
    Normalised key within the type: an ontology id when known.
  • namestring
    Display name.

ClaimItem

A claim with its paper.

Every field of Claim, plus:

ClaimPaper

A paper, in brief.

  • idstring
    ARN paper id.
  • titlestring
    Title.
  • doistring or null
    DOI.
  • journalstring
    Journal or preprint server.
  • published_datedate or null
    Publication date.
  • preprintboolean
    True for preprints.
  • urlURL
    Where to read the paper.
  • site_urlURL
    The paper on AgingResearch.News.

Stats

Corpus statistics.

  • papersobject
    Paper counts.
  • papers.totalinteger
    Every paper ARN has read.
  • papers.judgedinteger
    Papers the classifier has judged.
  • papers.aginginteger
    About aging biology: relevance 2 or more.
  • papers.coreinteger
    Core geroscience: relevance 2.5 or more.
  • papers.tangentialinteger
    Tangential: relevance from 1 to 2.
  • papers.preprintsinteger
    Preprints.
  • papers.open_abstractsinteger
    Papers whose abstract the API can return in full.
  • storiesobject
    Story counts.
  • stories.publishedinteger
    Published stories.
  • knowledgeobject
    Knowledge-graph counts.
  • knowledge.papers_extractedinteger
    Papers that have been through extraction.
  • knowledge.entitiesinteger
    Entities.
  • knowledge.claimsinteger
    Claims.
  • by_study_typearray of object
    Aging papers by study type.
  • by_study_type[].study_typestring
    Study type.
  • by_study_type[].labelstring
    Display label.
  • by_study_type[].papersinteger
    Aging papers of this type.
  • by_topicarray of object
    Aging papers by topic.
  • by_topic[].topicstring
    Topic slug.
  • by_topic[].papersinteger
    Aging papers in the topic.
  • dailyarray of object
    The last 30 days, newest first.
  • daily[].datedate
    UTC day.
  • daily[].papersinteger
    Papers that entered ARN.
  • daily[].aginginteger
    Of which about aging biology.
  • daily[].preprintsinteger
    Of which preprints.
  • coverageobject
    Date range of the corpus.
  • coverage.first_indexeddate or null
    Earliest indexed_date in the corpus.
  • coverage.last_indexeddate or null
    Latest indexed_date in the corpus.
  • generated_atdate-time
    When these numbers were computed (UTC).

Pagination

Cursor pagination.

  • next_cursorstring or null
    Pass as cursor to get the next page. Null on the last page.
  • has_moreboolean
    Whether there is another page.
  • limitinteger
    Page size used.

Error

Every error response has this shape.

  • errorobject
    The error.
  • error.statusinteger
    HTTP status.
  • error.codestring
    Machine-readable code.One of missing_key, invalid_key, revoked_key, plan_required, rate_limited, invalid_parameter, not_found, unavailable, internal_error
  • error.messagestring
    What went wrong, for a human.

Licensing

Abstracts belong to their publishers. The API returns an abstract only when its licence lets anyone reuse it: CC BY, CC0 or public domain. Otherwise abstract is null and abstract_license gives the reason, such as cc by-nc, or null when the publisher reports no licence. Share-alike abstracts are withheld too, so nothing you build inherits their terms. If you republish a CC BY abstract, credit the authors and link the DOI.

What we made comes with your key. The judgements, our stories, and the entities and claims we extracted are our own work; credit AgingResearch.News where you show them. A claim’s evidence quote comes from the abstract, so it follows the abstract’s licence, as do the mention and description in an entity’s detail.

Bibliographic data, such as titles, authors, journals, dates and DOIs, comes from Europe PMC and the publishers.

Limits and errors

Member

1,000requests a day

60 a minute, shared by every key on your account.

Included with Plus. Admins too.

Pro

50,000requests a day

600 a minute, for each key.

For products, companies and research groups. Assigned by us.

Windows are UTC minutes and UTC days. Every response says where you stand:

  • X-RateLimit-LimitRequests allowed per UTC day.
  • X-RateLimit-RemainingRequests left today.
  • X-RateLimit-ResetWhen the daily allowance resets, Unix seconds.
  • X-RateLimit-UsedRequests made today, this one included.
  • X-RateLimit-Minute-LimitRequests allowed per minute.
  • X-RateLimit-Minute-RemainingRequests left this minute.
  • X-RateLimit-Minute-ResetWhen the minute window resets, Unix seconds.
  • Retry-AfterOn a 429: seconds to wait before retrying.

Responses may be cached privately for 60 seconds. Errors share one shape, { "error": { "status", "code", "message" } }:

  • 400invalid_parameterA parameter is missing, malformed, out of range or unknown, or the cursor is invalid.
  • 401missing_keyNo Authorization: Bearer header.
  • 401invalid_keyThe key is malformed or does not exist.
  • 401revoked_keyThe key was revoked.
  • 403plan_requiredA member key whose owner no longer has Plus.
  • 404not_foundNo such paper, entity or path.
  • 429rate_limitedOver the minute or daily allowance. Wait Retry-After seconds.
  • 503unavailableThe database is unreachable. Retry with backoff.
  • 500internal_errorOur fault. Quote the X-Request-Id header if you contact us.

Need more than 1,000 requests a day?

Pro gives each key 50,000 requests a day and 600 a minute, for products, companies and research groups. Contact us for Pro at hello@agingresearch.news.