DOI Resolver
Resolve a DOI to its publication details: title, authors, journal, publisher, date, volume and pages, ISSN, licence and citation count. Covers datasets too.
doi-resolve Example
{
"doi": "10.1038/nature12373"
} {
"doi": "10.1038/nature12373",
"url": "https://doi.org/10.1038/nature12373",
"issn": [
"0028-0836"
],
"type": "journal-article",
"issue": "7460",
"pages": "54-58",
"title": "Nanometre-scale thermometry in a living cell",
"volume": "500",
"authors": [
"G. Kucsko",
"P. C. Maurer"
],
"abstract": null,
"language": "en",
"published": "2013-07-31",
"publisher": "Springer Science and Business Media LLC",
"license_url": "http://www.springer.com/tdm",
"container_title": "Nature",
"reference_count": 30,
"referenced_by_count": 1815,
"registration_agency": "Crossref"
} Inputs
| Field | Type | Required | What it is |
|---|---|---|---|
doi | string | Yes | A bare DOI (10.1038/nature12373), a doi: prefixed string, or any doi.org URL |
Output fields
How reliably each field appears in a successful answer.
| Field | Type | Appears |
|---|---|---|
doi | string | Always (present in every successful answer) |
url | string | Always (present in every successful answer) |
title | string | Usually (present for most inputs) |
authors | array | Always (present in every successful answer) |
referenced_by_count | number | Usually (present for most inputs) |
registration_agency | string | Always (present in every successful answer) |
issn | — | Always (present in every successful answer) |
type | — | Usually (present for most inputs) |
container_title | — | Usually (present for most inputs) |
publisher | — | Usually (present for most inputs) |
published | — | Usually (present for most inputs) |
reference_count | — | Usually (present for most inputs) |
volume | — | Sometimes (present only for some inputs) |
issue | — | Sometimes (present only for some inputs) |
pages | — | Sometimes (present only for some inputs) |
abstract | — | Sometimes (present only for some inputs) |
language | — | Sometimes (present only for some inputs) |
license_url | — | Sometimes (present only for some inputs) |
How to call it
The same tool through each route. MCP clients reach it through Strale’s server at https://api.strale.io/mcp; the call below is what the agent sends.
# Needs an API key. max_price_cents caps what this call may cost.
curl -X POST https://api.strale.io/v1/do \
-H "Authorization: Bearer $STRALE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"capability_slug": "doi-resolve",
"inputs": {
"doi": "10.1038/nature12373"
},
"max_price_cents": 2
}' {
"tool": "strale_execute",
"arguments": {
"slug": "doi-resolve",
"inputs": {
"doi": "10.1038/nature12373"
},
"max_price_cents": 2
}
} import { Strale } from "straleio";
const strale = new Strale({ apiKey: process.env.STRALE_API_KEY! });
const result = await strale.do({
capability_slug: "doi-resolve",
inputs: {
"doi": "10.1038/nature12373"
},
max_price_cents: 2,
}); import os
from straleio import Strale, DoRequest
strale = Strale(api_key=os.environ["STRALE_API_KEY"])
result = strale.do(DoRequest(
capability_slug="doi-resolve",
inputs={
"doi": "10.1038/nature12373",
},
max_price_cents=2,
)) # No account. The first request answers 402 with the price in USDC;
# an x402 client pays it from your wallet and repeats the request.
curl -i -X POST https://api.strale.io/x402/v2/doi-resolve \
-H 'Content-Type: application/json' \
-d '{
"doi": "10.1038/nature12373"
}' Limitations
Two registration agencies of the eleven that exist
Crossref and DataCite together register the large majority of DOIs, but mEDRA, JaLC, KISTI, Airiti and the EU Publications Office run their own. A DOI registered with one of those resolves at doi.org but returns not-registered here.
Metadata is only as complete as the publisher's deposit
Metadata reflects the publisher’s deposit. Abstracts, licences, ORCIDs and page ranges are optional and can be absent even for major journals.
DataCite records are thinner than Crossref records
The DataCite fallback path returns title, publisher, year, creators and type. Journal-specific fields (container title, volume, issue, pages, ISSN) are null because dataset DOIs do not carry them.
Citation count is Crossref's, not a consensus figure
`referenced_by_count` counts citations from works deposited at Crossref. Other citation indexes can report different totals for the same paper.
What to do instead: Call [withdrawn] for the OpenAlex figure and the citing works themselves.
Related tools
- Academic Paper Search €0.03
- arXiv Search €0.02
- Clinical Trials Search €0.03
- Hacker News Search €0.02
- Job Board Search €0.20
- Paper Details €0.02