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

doaj.md

123 lines · skills/paper-lookup/references/doaj.md at 5f2bc03

Open on GitHub

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

1# DOAJ (Directory of Open Access Journals)
2
3A curated directory of *open-access journals* and the articles those journals
4have registered with DOAJ. Use it to answer "is this journal in DOAJ?" or
5"articles in DOAJ-listed journals matching X." It is not a general literature
6index and it is not Unpaywall.
7
8Nature is not in DOAJ. A paper can be open access (hybrid, bronze, green)
9without its journal being listed here. For "is there a free PDF of this DOI?"
10use Unpaywall. For the yes/no "is this journal in DOAJ?" when you are already
11on OpenAlex, `GET /sources/issn:{issn}` returns `is_in_doaj` (PLoS ONE
12`1932-6203` is `true`; Nature `0028-0836` is `false`) — stay there. Come
13to DOAJ when you need APC, licence, or `oa_start`. For "papers on CRISPR"
14use PubMed / OpenAlex, then optionally restrict to DOAJ journals.
16All figures below verified 2026-09-10 against API **v4**.

DOAJ (Directory of Open Access Journals)

A curated directory of open-access journals and the articles those journals have registered with DOAJ. Use it to answer "is this journal in DOAJ?" or "articles in DOAJ-listed journals matching X." It is not a general literature index and it is not Unpaywall.

Nature is not in DOAJ. A paper can be open access (hybrid, bronze, green) without its journal being listed here. For "is there a free PDF of this DOI?" use Unpaywall. For the yes/no "is this journal in DOAJ?" when you are already on OpenAlex, GET /sources/issn:{issn} returns is_in_doaj (PLoS ONE 1932-6203 is true; Nature 0028-0836 is false) — stay there. Come to DOAJ when you need APC, licence, or oa_start. For "papers on CRISPR" use PubMed / OpenAlex, then optionally restrict to DOAJ journals.

All figures below verified 2026-09-10 against API v4.

Raw lines 1 to 17
18## Base URL
20```
21https://doaj.org/api
22```
24Docs (live): https://doaj.org/api/docs
26Search URLs you write as `/api/search/...` are served as v4; `next` links
27in the JSON point at `/api/v4/search/...`. Either form works.

Base URL

https://doaj.org/api

Docs (live): https://doaj.org/api/docs

Search URLs you write as /api/search/... are served as v4; next links in the JSON point at /api/v4/search/.... Either form works.

Raw lines 18 to 28
29## Authentication
31Public search needs no key. API keys are for publisher submitters. Do not
32ask the user for a DOAJ key to look up a journal.

Authentication

Public search needs no key. API keys are for publisher submitters. Do not ask the user for a DOAJ key to look up a journal.

Raw lines 29 to 33
Involves a person ask the user :32
34## Rate Limits
36The documented rate is **2 requests/second**, with a burst queue of up to five. Serialize calls. Prefer a journal ISSN lookup over
37paging through tens of thousands of article hits.

Rate Limits

The documented rate is 2 requests/second, with a burst queue of up to five. Serialize calls. Prefer a journal ISSN lookup over paging through tens of thousands of article hits.

Raw lines 34 to 38
39## Query syntax
41The path segment *is* the query (Elasticsearch query string). Slash in a DOI
42is escaped for you.
44| Goal | Query |
45|---|---|
46| Article title words | `bibjson.title:CRISPR` |
47| DOI | `doi:10.3389/fpsyg.2013.00479` |
48| Journal ISSN | `issn:1932-6203` |
49| Exact journal title | `bibjson.title.exact:"PLoS ONE"` |
50| Short names | `title:`, `issn:`, `publisher:`, `license:` (journals) |
52`.exact` works on full field names, **not** on the short aliases. Wildcard, regex, fuzzy, and proximity queries are disabled; do not assume all Elasticsearch operators are available.

Query syntax

The path segment is the query (Elasticsearch query string). Slash in a DOI is escaped for you.

GoalQuery
Article title wordsbibjson.title:CRISPR
DOIdoi:10.3389/fpsyg.2013.00479
Journal ISSNissn:1932-6203
Exact journal titlebibjson.title.exact:"PLoS ONE"
Short namestitle:, issn:, publisher:, license: (journals)

.exact works on full field names, not on the short aliases. Wildcard, regex, fuzzy, and proximity queries are disabled; do not assume all Elasticsearch operators are available.

Raw lines 39 to 53
54## Key Endpoints

Key Endpoints

Raw lines 54 to 55
56### 1. Search articles
58```
59GET /search/articles/{query}?page=1&pageSize=10
60```
62```
63GET /search/articles/bibjson.title:CRISPR?pageSize=2
64```
66Verified: `total` 7777, `page` 1, `pageSize` 2, `results` length 2.
67`next` was
68`https://doaj.org/api/v4/search/articles/bibjson.title:CRISPR?page=2&pageSize=2`.
69Follow `next` (or increment `page`) rather than guessing a last page —
70`last` pointed at page 3889.
72Each result has `id`, `created_date`, `last_updated`, `bibjson`. Identifiers
73are a **list**:
75```json
76"identifier": [
77 {"id": "10.3390/v14102045", "type": "doi"},
78 {"id": "1999-4915", "type": "eissn"}
80```
82Pick `type == "doi"`. Do not take `identifier[0]` blindly (it may be an ISSN).

1. Search articles

GET /search/articles/{query}?page=1&pageSize=10
GET /search/articles/bibjson.title:CRISPR?pageSize=2

Verified: total 7777, page 1, pageSize 2, results length 2. next was https://doaj.org/api/v4/search/articles/bibjson.title:CRISPR?page=2&pageSize=2. Follow next (or increment page) rather than guessing a last page — last pointed at page 3889.

Each result has id, created_date, last_updated, bibjson. Identifiers are a list:

"identifier": [
  {"id": "10.3390/v14102045", "type": "doi"},
  {"id": "1999-4915", "type": "eissn"}
]

Pick type == "doi". Do not take identifier[0] blindly (it may be an ISSN).

Raw lines 56 to 83
84### 2. Search journals
86```
87GET /search/journals/{query}?page=1&pageSize=10
88```
90Verified:
92| Query | `total` | Notes |
93|---|---|---|
94| `issn:0028-0836` (Nature) | 0 | Subscription journal. Empty is the answer. |
95| `issn:1932-6203` (PLoS ONE) | 1 | `bibjson.title` `PLoS ONE`, `oa_start` 2006, `apc.has_apc` true, APC values must be re-read for the current journal and currency |
97HTTP 200 + `total: 0` + `results: []` means "not a DOAJ journal," not an
98outage. Unpaywall may still find a green or hybrid copy of a Nature paper.
100Journal `bibjson` includes title, ISSNs, publisher, license, APC, and
101`oa_start`. That is the record to quote when someone asks "is this journal
102OA in DOAJ?"

2. Search journals

GET /search/journals/{query}?page=1&pageSize=10

Verified:

QuerytotalNotes
issn:0028-0836 (Nature)0Subscription journal. Empty is the answer.
issn:1932-6203 (PLoS ONE)1bibjson.title PLoS ONE, oa_start 2006, apc.has_apc true, APC values must be re-read for the current journal and currency

HTTP 200 + total: 0 + results: [] means "not a DOAJ journal," not an outage. Unpaywall may still find a green or hybrid copy of a Nature paper.

Journal bibjson includes title, ISSNs, publisher, license, APC, and oa_start. That is the record to quote when someone asks "is this journal OA in DOAJ?"

Raw lines 84 to 103
104## Typical Workflow
1061. Have an ISSN or journal title → `/search/journals/issn:{issn}`.
1072. Have a DOI you believe is in a DOAJ journal → `/search/articles/doi:{doi}`.
1083. If journals search is empty, say so and check Unpaywall for the article.
1094. Do not page `bibjson.title:CRISPR` as a substitute for PubMed.

Typical Workflow

  1. Have an ISSN or journal title → /search/journals/issn:{issn}.
  2. Have a DOI you believe is in a DOAJ journal → /search/articles/doi:{doi}.
  3. If journals search is empty, say so and check Unpaywall for the article.
  4. Do not page bibjson.title:CRISPR as a substitute for PubMed.
Raw lines 104 to 110
111## Failure Modes
113| What you did | What happens | What to do |
114|---|---|---|
115| ISSN of a non-DOAJ journal | 200, `total: 0` | Report "not in DOAJ"; try Unpaywall |
116| Took `identifier[0]` as the DOI | You may get an eISSN | Filter `type == "doi"` |
117| Used DOAJ as Unpaywall | Misses hybrid/green OA | Article-level OA is Unpaywall |
118| Second host just for yes/no | Extra call | OpenAlex `sources.is_in_doaj` if you are already there |
119| Used short field + `.exact` | Query does not mean what you think | Use `bibjson.title.exact` |

Failure Modes

What you didWhat happensWhat to do
ISSN of a non-DOAJ journal200, total: 0Report "not in DOAJ"; try Unpaywall
Took identifier[0] as the DOIYou may get an eISSNFilter type == "doi"
Used DOAJ as UnpaywallMisses hybrid/green OAArticle-level OA is Unpaywall
Second host just for yes/noExtra callOpenAlex sources.is_in_doaj if you are already there
Used short field + .exactQuery does not mean what you thinkUse bibjson.title.exact
Raw lines 111 to 120
121## Official sources reviewed 2026-09-30
123- https://doaj.org/api/docs

Official sources reviewed 2026-09-30

  • https://doaj.org/api/docs
Raw lines 121 to 123