DOI lookup
Resolve one DOI to its metadata record (title, year, publisher, type, authors, link); found is false when the provider has no record. unpaywall covers Crossref-registered DOIs and adds open-access status, best open-access URL and license; datacite covers DataCite DOIs such as research datasets and software.
| Endpoint | POST /v1/doi-lookups |
| Scope | doi_lookup:lookup |
| MCP tool | doi_lookup |
| Usage units | records |
Usage units appear in execution.usage.units for reconciliation and billing.
Request fields
Section titled “Request fields”| Field | Type | Required | Description |
|---|---|---|---|
invocation_id |
string | yes | The market’s invocation id: one execution per id and operation, so a retry with the same id is rejected instead of charged twice. 1-128 characters of A-Z a-z 0-9 . _ : -. |
provider |
string | yes | Provider that serves the request; choose by the coverage described for this tool. One of: datacite |
doi |
string | yes | DOI as 10.<registrant>/<suffix>, optionally prefixed by https://doi.org/, https://dx.doi.org/ or doi:, at most 300 characters. |
Providers
Section titled “Providers”| Provider | Region | Source | Limits |
|---|---|---|---|
datacite |
DE | DataCite, for DataCite-registered DOIs (datasets, software) | timeout_seconds: 30 |
Example
Section titled “Example”curl -sS https://services.zgi.im/v1/doi-lookups \ -H "Authorization: Bearer $ZGI_SERVICES_TOKEN" \ -H 'Content-Type: application/json' \ -d '{"invocation_id": "docs-1791778521-doi_lookup", "provider": "datacite", "doi": "10.5438/0012"}'POST /v1/doi-lookups HTTP/1.1Host: services.zgi.imAuthorization: Bearer <token>Content-Type: application/json
{ "invocation_id": "docs-1791778521-doi_lookup", "provider": "datacite", "doi": "10.5438/0012"}Over MCP, the tool arguments are exactly the HTTP request body.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "doi_lookup", "arguments": { "invocation_id": "docs-1791778521-doi_lookup", "provider": "datacite", "doi": "10.5438/0012" } }}curl -sS https://services.zgi.im/v1/mcp \ -H "Authorization: Bearer $ZGI_SERVICES_TOKEN" \ -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \ -H 'MCP-Protocol-Version: 2025-11-25' \ -d @request.jsonResponse
Section titled “Response”A real response, with lists cut to two items and long text shortened.
{ "code": 0, "message": "success", "data": { "execution": { "id": "exe_01a12e52943c77ddb4bd0f2953dfd014", "invocation_id": "docs-1791778521-doi_lookup", "capability": "doi_lookup", "operation": "doi_lookup.lookup", "provider": "datacite", "outcome": "succeeded", "error_category": null, "error_code": null, "usage": { "provider_requests": 1, "units": [ { "name": "records", "value": 1, "source": "measured" } ] }, "upstream_ref": null, "request_id": "req_302c19f0d97515daaa5ff739", "started_at": "2026-10-12T04:15:26.268512227Z", "finished_at": "2026-10-12T04:15:26.91534647Z", "duration_ms": 646 }, "result": { "found": true, "record": { "doi": "10.5438/0012", "title": "DataCite Metadata Schema Documentation for the Publication and Citation of Research Data v4.0", "year": 2016, "publisher": "DataCite e.V.", "type": "Documentation", "authors": [ "DataCite Metadata Working Group" ], "url": "https://schema.datacite.org/meta/kernel-4.0/index.html", "is_open_access": null, "open_access_url": null, "license": null, "resource_type_general": "Text" }, "source": { "name": "DataCite", "license": "CC0-1.0", "url": "https://datacite.org" } } }}