Hi all,
This has probably been answered before, but so far I’ve not found a good answer.
Is there a canonical DOI api lookup that can provide metadata (specifically, title, author, publisher and published date) for a DOI? Bonus points if it allows searching on title and author.
Issue I’m having is that there appears to be no one api that provides a complete list, so I’m looking at chaining DataCite, Crossref, EBI and a few others, with a screen scrape backup. This seems like a non-ideal solution.
doi.org provides URL resolution via API, but nothing more than that.
Any thoughts?
1 Like
Thanks Marcus - I’m flagging this to @lizkrz and @KellyStathis who may be able to help
Did you try the DataCite GraphQL API? I think that it might be your best bet. Unfortunately, it is not perfect yet…
Thanks tagging me, @alicemeadows! @mapkyca, I think content negotiation is an option here: DOI Content Negotiation
This will enable you to fetch metadata for DataCite, Crossref, and mEDRA DOIs from the DOI itself.
For example:
curl -LH "Accept: application/vnd.citationstyles.csl+json" https://doi.org/10.14454/3w3z-sa82
The DataCite GraphQL API is also an option, but has more limited coverage as it does not yet include all Crossref DOIs. You can get a sense of the coverage through DataCite Commons through the “Registration Agency” filter in the sidebar.
3 Likes
Thanks! That was fantastically helpful.
2 Likes
Fyi, I wrote a quick wrapper library for this, hopefully someone will find useful: GitHub - mapkyca/doilookup: DOI Lookup tool - resolve DOIs to basic metadata
3 Likes
a bit late to the party but wanted to add:
OpenAlex has a canonical DOI lookup in their API, see Get single entities - OpenAlex documentation
Plus getting the bonus point for allowing searching on titles and authors, see Search entity lists - OpenAlex documentation
Also late to the party here, but wanted to note that the content negotiation on doi.org is really flexible and useful. I use the following one-liner as part of a shell function to generate a citation for a given DOI:
http --follow --body "https://doi.org/$1" "Accept: text/x-bibliography; style=chicago-author-date"
Note the specification of the CSL style as part of the Accept:
header, which can be any of the style names in https://github.com/citation-style-language/styles. (For info, the http
command is this: GitHub - httpie/httpie: As easy as /aitch-tee-tee-pie/ 🥧 Modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more. https://twitter.com/httpie)