Canonical DOI lookup

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. 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"

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.


Thanks! That was fantastically helpful.


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


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 :star2:

Also late to the party here, but wanted to note that the content negotiation on 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 "$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 (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.