API
Search, formatting and import over plain HTTP. No key is needed, and every service on this page allows cross-origin requests (Access-Control-Allow-Origin: *).
Search
Sends one search to several sources at once. The answer is a single JSON array of references, grouped by source in the order listed under db. Each source has 30 seconds to answer; a source that fails or is too slow contributes nothing and the others are still returned. Nothing found is an empty array.
| Parameter | Description |
|---|---|
search | simple (free text) or advanced (by field). Required. |
text | Simple search: any text, a DOI (10.3897/BDJ.1.e995, doi:…, https://doi.org/…) or a PubMed Central ID (PMC3234428). Identifiers are looked up exactly. |
author, year, title, origin | Advanced search; any one of them is enough. year is a four-digit year, origin the journal or publisher (published_in is accepted as another name for it). |
db | Optional and repeatable: the sources to search. Simple search: crossref, openalex, datacite, pubmed, mendeley. Advanced search: the same plus bhlarticles and bhlbooks. Default: all of them. /sources returns these lists as JSON. |
limit | Optional: results per source, 1 to 100. Default 5. |
status | Optional: with status=1 each source's results are followed by {"source", "db", "type": "status", "count", "total", "ms", "error"}. count results are in the answer out of the total the source reports for the search; error says why a source gave nothing. |
more | Optional: with more=1 each source that found something adds {"source", "db", "type": "more_simple" | "more_advanced", "more": 30}, a suggested limit for a follow-up search of that source alone. |
Examples:
/find?search=simple&db=crossref&db=openalex&limit=3&text=Smith /find?search=advanced&author=Penev&year=2010&origin=ZooKeys&status=1BHL needs at least an author or a title; BHL books matches authors by last name only. The ZooBank source (db=gnub) is not searched by default because it does not currently answer requests from our servers.
A reference
Every reference in a search answer is a JSON object. Most fields are optional: a source that has no value for a field leaves it out or gives an empty string.
| Field | Description |
|---|---|
source | The source that returned it, e.g. CrossRef |
title | Title; may contain simple HTML markup such as <i> |
authors, firstauthor | [[given, family], …] and the first of them |
year, publicationDate | Year of publication, and the full date where known |
publishedIn, publisher | Journal or book, and publisher |
volume, issue, spage, epage | Volume, issue, first and last page |
doi, href | DOI without prefix, and a link to the work |
type, id | The source's own type and identifier(s) |
abstract, infoUrl, related, score | Where the source has them: abstract, the source's page for the work, related identifiers (DataCite), relevance score |
openAccess, citedBy | OpenAlex: link to free full text (or true), and the number of citing works |
isParsed, fullCitation | true for every search result; the citation as one string where the source has it |
Formatting
Formats one reference in a citation style. The answer is an HTML fragment (<div class="csl-entry">…</div>).
| Parameter | Description |
|---|---|
style | A style file name from /format/list, for example apa.csl (the .csl may be left out) |
ref | A reference as returned by the search, as JSON. The fields used are authors, title, year, publishedIn, volume, issue, spage, epage and doi; send only these to keep the address short. |
All styles as {"<file>.csl": "<title>"}.
Import
Reads the references from an EndNote XML or MODS file sent as multipart/form-data (one file, field name 0, up to 20 MB). The answer is a JSON array of references in the form above; a file that is neither EndNote XML nor MODS gives [1]. The file is not kept.
Errors
| Status | When |
|---|---|
400 | A search without search, without text or fields, or with a db that does not exist for that kind of search; a ref that is not a JSON object; an upload without a file. Search errors come as {"error": "…"}. |
404 | A style that does not exist |
500 | A style that cannot be applied to the reference |
