Skill Tracer
Skills › Scientific Agent Skills › paper-lookup › biorxiv.md

biorxiv.md

170 lines · skills/paper-lookup/references/biorxiv.md at 5f2bc03

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1# bioRxiv API
2
3bioRxiv is a preprint server for biology. The API provides metadata for preprints, including title, authors, abstract, DOI, and publication status.
4
5**Important:** The bioRxiv API has **no keyword search**. It supports date-range browsing and DOI lookup only. For keyword search of bioRxiv preprints, use Europe PMC (`SRC:"PPR" AND PUBLISHER:"bioRxiv"`), Semantic Scholar, or OpenAlex instead.
6

bioRxiv API

bioRxiv is a preprint server for biology. The API provides metadata for preprints, including title, authors, abstract, DOI, and publication status.

Important: The bioRxiv API has no keyword search. It supports date-range browsing and DOI lookup only. For keyword search of bioRxiv preprints, use Europe PMC (SRC:"PPR" AND PUBLISHER:"bioRxiv"), Semantic Scholar, or OpenAlex instead.

Raw lines 1 to 6
7## Base URL
8
9```
10https://api.biorxiv.org
11```

Base URL

https://api.biorxiv.org
Raw lines 7 to 12
13## Authentication
15None required. Fully public API.

Authentication

None required. Fully public API.

Raw lines 13 to 16
17## Key Endpoints

Key Endpoints

Raw lines 17 to 18
19### 1. Content Detail -- Browse by date range
21```
22GET /details/biorxiv/{interval}/{cursor}/{format}
23```
25| Parameter | Values | Description |
26|-----------|--------|-------------|
27| `interval` | `YYYY-MM-DD/YYYY-MM-DD` | Date range (inclusive). Keep ranges narrow (1-3 days) to avoid timeouts. |
28| | `N` (integer) | N most recent preprints |
29| | `Nd` (integer + "d") | Last N days |
30| `cursor` | Integer (default `0`) | Absolute record offset. **`/details/` returns 30 per page, so step by 30** -- see Pagination. |
31| `format` | `json` (default), `xml` | Response format |
33Optional query parameter: `?category=neuroscience` (filter by category, use underscores for spaces)
35**Examples:**
36```
37https://api.biorxiv.org/details/biorxiv/2024-01-01/2024-01-31/0
38https://api.biorxiv.org/details/biorxiv/5
39https://api.biorxiv.org/details/biorxiv/10d
40https://api.biorxiv.org/details/biorxiv/2024-01-01/2024-01-31?category=neuroscience
41```

1. Content Detail -- Browse by date range

GET /details/biorxiv/{interval}/{cursor}/{format}
ParameterValuesDescription
intervalYYYY-MM-DD/YYYY-MM-DDDate range (inclusive). Keep ranges narrow (1-3 days) to avoid timeouts.
N (integer)N most recent preprints
Nd (integer + "d")Last N days
cursorInteger (default 0)Absolute record offset. **/details/ returns 30 per page, so step by 30** -- see Pagination.
formatjson (default), xmlResponse format

Optional query parameter: ?category=neuroscience (filter by category, use underscores for spaces)

Examples:

https://api.biorxiv.org/details/biorxiv/2024-01-01/2024-01-31/0
https://api.biorxiv.org/details/biorxiv/5
https://api.biorxiv.org/details/biorxiv/10d
https://api.biorxiv.org/details/biorxiv/2024-01-01/2024-01-31?category=neuroscience
Raw lines 19 to 42
43### 2. Content Detail -- DOI lookup
45```
46GET /details/biorxiv/{doi}/na/{format}
47```
49**Example:**
50```
51https://api.biorxiv.org/details/biorxiv/10.1101/2024.01.16.575895/na/json
52```

2. Content Detail -- DOI lookup

GET /details/biorxiv/{doi}/na/{format}

Example:

https://api.biorxiv.org/details/biorxiv/10.1101/2024.01.16.575895/na/json
Raw lines 43 to 53
54### 3. Published Article Links
56```
57GET /pubs/biorxiv/{interval}/{cursor}
58GET /pubs/biorxiv/{doi}/na
59```
61Links preprints to their published journal versions. Accepts both preprint DOI and published DOI.

3. Published Article Links

GET /pubs/biorxiv/{interval}/{cursor}
GET /pubs/biorxiv/{doi}/na

Links preprints to their published journal versions. Accepts both preprint DOI and published DOI.

Raw lines 54 to 62
63### 4. Publisher Filter
65```
66GET /publisher/{prefix}/{interval}/{cursor}
67```
69Find bioRxiv papers published by a specific publisher (by DOI prefix).
71```
72https://api.biorxiv.org/publisher/10.15252/2024-01-01/2024-06-01/0
73```
75**Hazard:** this endpoint returns `{"messages":[{"status":"no articles found"}],"collection":[]}` for
76many valid publisher prefixes, including the one above (EMBO, verified 2026-07-27) -- with **HTTP
77200**, so an empty `collection` is indistinguishable from a genuine no-match. Treat an empty result
78here as inconclusive, not as evidence that a publisher issued no bioRxiv preprints. To answer
79"which bioRxiv preprints did publisher X publish", prefer `/pubs/` (below) and group by
80`published_journal`, or query Crossref with `filter=prefix:10.15252`.

4. Publisher Filter

GET /publisher/{prefix}/{interval}/{cursor}

Find bioRxiv papers published by a specific publisher (by DOI prefix).

https://api.biorxiv.org/publisher/10.15252/2024-01-01/2024-06-01/0

Hazard: this endpoint returns {"messages":[{"status":"no articles found"}],"collection":[]} for many valid publisher prefixes, including the one above (EMBO, verified 2026-07-27) -- with HTTP 200, so an empty collection is indistinguishable from a genuine no-match. Treat an empty result here as inconclusive, not as evidence that a publisher issued no bioRxiv preprints. To answer "which bioRxiv preprints did publisher X publish", prefer /pubs/ (below) and group by published_journal, or query Crossref with filter=prefix:10.15252.

Raw lines 63 to 81
82## Response Format
84```json
86 "messages": [{
87 "status": "ok",
88 "category": "all",
89 "interval": "2024-01-01:2024-01-03",
90 "funder": "all",
91 "cursor": 0,
92 "count": 30,
93 "count_new_papers": "232",
94 "total": "360"
95 }],
96 "collection": [{
97 "title": "Paper title...",
98 "authors": "Surname, A.; Surname, B.",
99 "author_corresponding": "Full Name",
100 "author_corresponding_institution": "Institution",
101 "doi": "10.1101/2024.01.16.575895",
102 "date": "2024-01-20",
103 "version": "1",
104 "type": "new results",
105 "license": "cc_no",
106 "category": "cancer biology",
107 "jatsxml": "https://www.biorxiv.org/content/early/.../source.xml",
108 "abstract": "Full abstract text...",
109 "published": "10.1158/2159-8290.CD-24-0187",
110 "server": "bioRxiv"
111 }]
113```
115- `published` is `"NA"` if not yet published in a journal, or the published DOI if it has been.
116- `type` values: `new results`, `confirmatory results`, `contradictory results`

Response Format

{
  "messages": [{
    "status": "ok",
    "category": "all",
    "interval": "2024-01-01:2024-01-03",
    "funder": "all",
    "cursor": 0,
    "count": 30,
    "count_new_papers": "232",
    "total": "360"
  }],
  "collection": [{
    "title": "Paper title...",
    "authors": "Surname, A.; Surname, B.",
    "author_corresponding": "Full Name",
    "author_corresponding_institution": "Institution",
    "doi": "10.1101/2024.01.16.575895",
    "date": "2024-01-20",
    "version": "1",
    "type": "new results",
    "license": "cc_no",
    "category": "cancer biology",
    "jatsxml": "https://www.biorxiv.org/content/early/.../source.xml",
    "abstract": "Full abstract text...",
    "published": "10.1158/2159-8290.CD-24-0187",
    "server": "bioRxiv"
  }]
}
  • published is "NA" if not yet published in a journal, or the published DOI if it has been.
  • type values: new results, confirmatory results, contradictory results
Raw lines 82 to 117
118### The `messages` block is not uniform -- check before reconciling
120The counting fields exist **only on interval queries**. Verified 2026-07-27:
122| Request | `messages[0]` contains |
123|---|---|
124| `/details/biorxiv/2024-01-01/2024-01-03/0` | `status`, `category`, `interval`, `funder`, `cursor`, `count`, `count_new_papers`, `total` |
125| `/details/biorxiv/{doi}/na/json` | `status`, `category` only -- **no counts** |
126| `/details/biorxiv/5` (N most recent) | `status`, `category` only -- **no counts** |
127| `/pubs/biorxiv/{interval}/{cursor}` | `status`, `interval`, `cursor`, `count`, `total` |
129So the skill's "count first, then reconcile" step has nothing to reconcile against on DOI and
130N-most-recent lookups. Use `len(collection)` there and say in the provenance that the endpoint
131exposes no total.
133**`total` and `count_new_papers` count different things.** For `2024-01-01:2024-01-03`, `total` was
134`360` and `count_new_papers` was `232`: `total` counts every *version* record in the interval, while
135`count_new_papers` counts distinct first-posting preprints. Paginating to `total` and then
136deduplicating by DOI lands near `count_new_papers`, not `total` -- reconcile against the right one
137and report which you used.

The messages block is not uniform -- check before reconciling

The counting fields exist only on interval queries. Verified 2026-07-27:

Requestmessages[0] contains
/details/biorxiv/2024-01-01/2024-01-03/0status, category, interval, funder, cursor, count, count_new_papers, total
/details/biorxiv/{doi}/na/jsonstatus, category only -- no counts
/details/biorxiv/5 (N most recent)status, category only -- no counts
/pubs/biorxiv/{interval}/{cursor}status, interval, cursor, count, total

So the skill's "count first, then reconcile" step has nothing to reconcile against on DOI and N-most-recent lookups. Use len(collection) there and say in the provenance that the endpoint exposes no total.

**total and count_new_papers count different things.** For 2024-01-01:2024-01-03, total was 360 and count_new_papers was 232: total counts every version record in the interval, while count_new_papers counts distinct first-posting preprints. Paginating to total and then deduplicating by DOI lands near count_new_papers, not total -- reconcile against the right one and report which you used.

Raw lines 118 to 138
139## Pagination
141**Page size differs by endpoint** -- verified 2026-07-27, and the difference is silent:
143| Endpoint | Records per page | Step `cursor` by |
144|---|---|---|
145| `/details/{server}/{interval}/{cursor}` | **30** | 30 |
146| `/pubs/{server}/{interval}/{cursor}` | 100 | 100 |
148`cursor` is an absolute record offset, not a page number, and out-of-step values are accepted
149without complaint: `cursor=100` on a `/details/` query returns records 100-129 and **HTTP 200**.
150Stepping a `/details/` walk by 100 therefore skips records 30-99 of every hundred and looks
151successful. Step by the `count` the response actually reported, and stop when
152`cursor + count >= total` or `collection` comes back empty.
154`scripts/paginate.py --api biorxiv` implements this walk with the right step and reconciles version-record counts against `total`; it reports `count_new_papers` as a separate note, without claiming to validate a DOI-deduplicated count.

Pagination

Page size differs by endpoint -- verified 2026-07-27, and the difference is silent:

EndpointRecords per pageStep cursor by
/details/{server}/{interval}/{cursor}3030
/pubs/{server}/{interval}/{cursor}100100

cursor is an absolute record offset, not a page number, and out-of-step values are accepted without complaint: cursor=100 on a /details/ query returns records 100-129 and HTTP 200. Stepping a /details/ walk by 100 therefore skips records 30-99 of every hundred and looks successful. Step by the count the response actually reported, and stop when cursor + count >= total or collection comes back empty.

scripts/paginate.py --api biorxiv implements this walk with the right step and reconciles version-record counts against total; it reports count_new_papers as a separate note, without claiming to validate a DOI-deduplicated count.

Raw lines 139 to 155
Runs code scripts/paginate.py :154
156## Rate Limits
158No documented rate limits. No authentication required. Be reasonable with request frequency.
160DOI lookups and N-most-recent requests are single-response lookups in the helper: they expose no total/continuation. For an exhaustive interval, use explicit dates and reconcile `total`. A DOI path requires `/na/json`, not a numeric cursor.

Rate Limits

No documented rate limits. No authentication required. Be reasonable with request frequency.

DOI lookups and N-most-recent requests are single-response lookups in the helper: they expose no total/continuation. For an exhaustive interval, use explicit dates and reconcile total. A DOI path requires /na/json, not a numeric cursor.

Raw lines 156 to 161
162## Categories
164Category names below are website slugs; API category filters use spaces (URL-encoded) or underscores, e.g. `cell_biology`, not hyphens.
166`animal-behavior-and-cognition`, `biochemistry`, `bioengineering`, `bioinformatics`, `biophysics`, `cancer-biology`, `cell-biology`, `clinical-trials`, `developmental-biology`, `ecology`, `epidemiology`, `evolutionary-biology`, `genetics`, `genomics`, `immunology`, `microbiology`, `molecular-biology`, `neuroscience`, `paleontology`, `pathology`, `pharmacology-and-toxicology`, `physiology`, `plant-biology`, `scientific-communication-and-education`, `synthetic-biology`, `systems-biology`, `zoology`

Categories

Category names below are website slugs; API category filters use spaces (URL-encoded) or underscores, e.g. cell_biology, not hyphens.

animal-behavior-and-cognition, biochemistry, bioengineering, bioinformatics, biophysics, cancer-biology, cell-biology, clinical-trials, developmental-biology, ecology, epidemiology, evolutionary-biology, genetics, genomics, immunology, microbiology, molecular-biology, neuroscience, paleontology, pathology, pharmacology-and-toxicology, physiology, plant-biology, scientific-communication-and-education, synthetic-biology, systems-biology, zoology

Raw lines 162 to 167
168## Official sources reviewed 2026-09-30
170- https://api.biorxiv.org/

Official sources reviewed 2026-09-30

  • https://api.biorxiv.org/
Raw lines 168 to 170