When to use this skill
When the user asks to find open-access journals in a subject area, filter journals by policy (APC-free, BOAI-compliant, DOAJ Seal), or verify which journals meet specific OA criteria. DOAJ's search endpoint accepts Elasticsearch query syntax in the URL path, so you can combine subject keywords with policy field filters. For looking up a single known journal by its DOAJ hex ID, use /api/journals/{id} directly — this skill is for search.
Your best first call
curl "https://doaj.org/api/search/journals/virology%20AND%20bibjson.apc.has_apc:false"
No auth. No key. The query goes in the path, not as a query parameter. URL-encode spaces as %20. Combine a subject keyword with policy filters: bibjson.apc.has_apc:false for fee-free journals, admin.ticked:true for DOAJ Seal holders, bibjson.boai:true for Budapest OA Initiative compliance.
The response wraps results in {total, page, pageSize, results}. Each result has the full bibjson block — the same shape as the direct journal lookup:
title — journal name
oa_start — year the journal went OA (15+ years is a different risk profile than last year)
apc.has_apc — false means no author processing charges
boai — true means the journal explicitly complies with the 2002 Budapest declaration
admin.ticked — true means the journal carries the DOAJ Seal (stricter than just being listed)
publisher.name, publisher.country
copyright.author_retains
total gives the full match count regardless of page size. Pagination defaults to 10 results per page — add &page=2 to paginate.
Fallbacks (when the best call isn't enough)
- Known journal by ID →
/api/journals/{hex_id} returns the complete policy record for a single journal without search noise.
- Known journal by ISSN →
/api/search/journals/bibjson.eissn:2538-4449 pins the result to one ISSN when you have an ISSN but not a DOAJ ID.
- Article-level OA discovery → DOAJ indexes journals, not individual articles. For finding specific papers, Unpaywall or OpenAlex are better fits.
Pitfalls
- The search query is a path segment, not a query parameter. Spaces must be
%20, field filters use Lucene syntax. Colons in bibjson.apc.has_apc:false usually pass unencoded, but encode as %3A if your HTTP client normalizes paths aggressively.
in_doaj: true and ticked: true are different bars. Many legitimate journals are listed without the DOAJ Seal. When a funder requires the Seal, add AND%20admin.ticked:true explicitly — don't assume in_doaj implies it.
has_apc: false and has_waiver: true are independent. A journal can charge no APC but still levy page charges or color figure fees — has_waiver covers those. Don't assume has_apc: false means "authors pay nothing."
One-line summary for the user
I can search DOAJ for open-access journals by subject and policy filters — APC-free, BOAI-compliant, DOAJ Seal — using Elasticsearch syntax in a single unauthenticated GET.
SKILL.md source (frontmatter + body)
---
name: search-oa-journals-by-subject
description: When the user asks to find open-access journals by subject, filter by APC-free, BOAI compliance, or DOAJ Seal status — reach for the DOAJ search endpoint. Elasticsearch query syntax in the URL path, no auth required.
---
## When to use this skill
When the user asks to find open-access journals in a subject area, filter journals by policy (APC-free, BOAI-compliant, DOAJ Seal), or verify which journals meet specific OA criteria. DOAJ's search endpoint accepts Elasticsearch query syntax in the URL path, so you can combine subject keywords with policy field filters. For looking up a single known journal by its DOAJ hex ID, use `/api/journals/{id}` directly — this skill is for search.
## Your best first call
```bash
curl "https://doaj.org/api/search/journals/virology%20AND%20bibjson.apc.has_apc:false"
```
No auth. No key. The query goes in the path, not as a query parameter. URL-encode spaces as `%20`. Combine a subject keyword with policy filters: `bibjson.apc.has_apc:false` for fee-free journals, `admin.ticked:true` for DOAJ Seal holders, `bibjson.boai:true` for Budapest OA Initiative compliance.
The response wraps results in `{total, page, pageSize, results}`. Each result has the full `bibjson` block — the same shape as the direct journal lookup:
- `title` — journal name
- `oa_start` — year the journal went OA (15+ years is a different risk profile than last year)
- `apc.has_apc` — `false` means no author processing charges
- `boai` — `true` means the journal explicitly complies with the 2002 Budapest declaration
- `admin.ticked` — `true` means the journal carries the DOAJ Seal (stricter than just being listed)
- `publisher.name`, `publisher.country`
- `copyright.author_retains`
`total` gives the full match count regardless of page size. Pagination defaults to 10 results per page — add `&page=2` to paginate.
## Fallbacks (when the best call isn't enough)
- **Known journal by ID** → `/api/journals/{hex_id}` returns the complete policy record for a single journal without search noise.
- **Known journal by ISSN** → `/api/search/journals/bibjson.eissn:2538-4449` pins the result to one ISSN when you have an ISSN but not a DOAJ ID.
- **Article-level OA discovery** → DOAJ indexes journals, not individual articles. For finding specific papers, Unpaywall or OpenAlex are better fits.
## Pitfalls
- **The search query is a path segment, not a query parameter.** Spaces must be `%20`, field filters use Lucene syntax. Colons in `bibjson.apc.has_apc:false` usually pass unencoded, but encode as `%3A` if your HTTP client normalizes paths aggressively.
- **`in_doaj: true` and `ticked: true` are different bars.** Many legitimate journals are listed without the DOAJ Seal. When a funder requires the Seal, add `AND%20admin.ticked:true` explicitly — don't assume `in_doaj` implies it.
- **`has_apc: false` and `has_waiver: true` are independent.** A journal can charge no APC but still levy page charges or color figure fees — `has_waiver` covers those. Don't assume `has_apc: false` means "authors pay nothing."
## One-line summary for the user
I can search DOAJ for open-access journals by subject and policy filters — APC-free, BOAI-compliant, DOAJ Seal — using Elasticsearch syntax in a single unauthenticated GET.