LighterAPI

LighterAPI reference

LighterAPI answers the read requests of api.crossref.org, with the same paths, parameters, and responses, over Crossref's March 2026 public data file.

Base URL

https://demo-crossref-lighterapi.knowledgefutures.org

Replace https://api.crossref.org with this URL in an existing request. No key or account. HTTPS only.

Quick start

# one work
curl -s https://demo-crossref-lighterapi.knowledgefutures.org/works/10.1038/nature12373

# a member's journal articles from 2024, counted by year
curl -s 'https://demo-crossref-lighterapi.knowledgefutures.org/works?filter=member:78,type:journal-article,from-pub-date:2024&facet=published:*&rows=0'

# every work indexed on one day, 1,000 at a time
curl -s 'https://demo-crossref-lighterapi.knowledgefutures.org/works?filter=from-index-date:2026-03-01,until-index-date:2026-03-01&cursor=*&rows=1000'

The console builds and sends requests from the browser.

Limits and access

LimitValue
Requests per visitor50 a second, bursts to 400. Over that: 429 with Retry-After: 1.
rows0 to 1,000. Default 20.
offset0 to 10,000. Use a cursor beyond.
sampleUp to 100.
Facet valuesUp to 1,000 per facet (* means 1,000). Default 20.
MethodsGET and HEAD.
Compressiongzip or zstd when the request sends Accept-Encoding.

No mailto or polite pool: all visitors get the same limit. The parameter is accepted and ignored.

Routes

RouteReturns
/works/{doi}One work. DOI case-insensitive; https://doi.org/ prefix accepted. select applies.Served
/works/{doi}/agencyThe registration agency: always Crossref.Served
/worksA list of works, with every list parameter below.Served
/members/{id}/works/works with filter=member:{id}.Served
/prefixes/{prefix}/works/works with filter=prefix:{prefix}.Served
/funders/{id}/works/works with filter=funder:{id}.Served
/journals/{issn}/works/works with filter=issn:{issn}.Served
/types/{id}/works/works with filter=type:{id}.Served
/members, /journals, /funders, /prefixes/{p}, /types, /licensesMetadata about members, journals, and funders.Not yet

Parameters

ParameterMeaning
filtername:value pairs, comma-separated. Repeated names are ORed; different names are ANDed. A value may contain commas when the next piece has no colon.Served
facetname:count, comma-separated. Counts are exact.Served
sort, orderSort field; asc or desc (default desc). Works without the field sort last either way.Served
rows, offsetPage size and start.Served
cursor* for the first page, then each response's next-cursor.Served
sampleRandom works from the result.Served
selectFields to return, comma-separated.Served
query, query.*Text search. Returns 501.Not yet
mailtoAccepted, ignored.

Filters

Value formats follow api.crossref.org. Identifiers are normalised the way Crossref normalises them.

FilterValue
memberMember ID: 78, or http://id.crossref.org/member/78
prefixDOI prefix: 10.1016
type, type-nameType ID (journal-article) or label (Journal Article)
issn, isbnWith or without hyphens
orcidBare iD or https://orcid.org/…
funder, award.funderFunder Registry ID (100000001) or DOI (10.13039/100000001)
award.numberAward number, case-insensitive
doiDOI
container-titleExact title
license.url, license.versionLicense URL; vor, am, tdm, stm-asf, …
full-text.type, .application, .versionLink content type, intended application, version
ror-idROR ID or URL, from affiliations and institutions
updates, update-typeDOI updated by the work; update type (retraction, correction, …)
relation.type, relation.objectRelation type (is-preprint-of, …); related identifier
archive, article-number, group-title, alternative-id, assertion, assertion-group, clinical-trial-number, content-domainExact values
category-nameAccepted; matches nothing, as on api.crossref.org

Not yet: license.delay, has-alias, has-prime-doi, from-/until-awarded-date, funder-doi-asserted-by, relation.object-type, relation.claimed-by, lte-/gte-award-amount, lte-/gte-citation, citation-id. They return 400 filter-not-available.

Date filters

from-X and until-X, with a value of YYYY, YYYY-MM, or YYYY-MM-DD. until includes the whole period named: until-pub-date:2020 runs to 31 December 2020.

XField
pub-dateEarliest of posted, print, online, and other publication dates
print-pub-date, online-pub-datePrint or online publication date
issued-dateIssued date
created-dateFirst deposit
deposit-date, update-dateLast deposit
index-dateLast indexed
posted-date, accepted-date, approved-date, event-start-date, event-end-dateThose dates

Existence filters

true keeps works that have the field, false keeps works without it (t, 1, f, 0 also accepted).

has-abstract
has-affiliation
has-affiliation-ror-id
has-archive
has-assertion
has-authenticated-orcid
has-award
has-clinical-trial-number
has-content-domain
has-description
has-domain-restriction
has-event
has-full-text
has-funder
has-funder-doi
has-funder-ror-id
has-license
has-orcid
has-references
has-relation
has-ror-id
has-update
has-update-policy
is-update

Facets

type-name
published
publisher-name
container-title
issn
funder-name
funder-doi
orcid
license
link-application
archive
update-type
relation-type
assertion
assertion-group
journal-volume
journal-issue
category-name
source
ror-id

Values sort by count, then key, both descending. value-count is the number of values returned. Not yet: affiliation.

Sorts

published
published-print
published-online
issued
created
deposited
updated
indexed
is-referenced-by-count
references-count
score
relevance

score and relevance are constant without a text query. Not yet: citation.

Cursors

# first page
GET /works?filter=member:78&cursor=*&rows=1000
# next page: pass message.next-cursor back
GET /works?filter=member:78&cursor=djF8ZnVsbHwyNTV8MHw0MTc3OTQ&rows=1000

Without a sort, cursors run in creation order, ascending, as on api.crossref.org. With a sort, they follow it. Stop when items is empty. Cursors don't expire, but belong to one index build: after a rebuild, start again from *.

Select

Any top-level field of a work: DOI, title, author, container-title, published, type, member, funder, license, reference, is-referenced-by-count, and the rest of api.crossref.org's list. Unknown names return 400 select-field-not-available.

Envelope

{
  "status": "ok",
  "message-type": "work-list",
  "message-version": "1.0.0",
  "message": {
    "facets": { "type-name": { "value-count": 2, "values": { "Journal Article": 812, "Chapter": 40 } } },
    "total-results": 852,
    "items": [ { "DOI": "10.1016/…", "title": ["…"], … } ],
    "items-per-page": 20,
    "query": { "start-index": 0, "search-terms": null },
    "next-cursor": "…"
  }
}

Single works: "message-type": "work", with the work as message.

Errors

StatusWhenBody
400Unknown filter, facet, sort, or select field; bad date; rows, offset, or sample out of range; bad cursor{"status":"failed","message-type":"validation-failure","message":[{"type","value","message"}]}
404Unknown DOI or routeResource not found.
429Over the per-visitor limitJSON, with Retry-After: 1
501Text queriesJSON, "message-type":"not-implemented"

Headers

Server-Timing: app;dur=…Milliseconds spent in the server for this request.
Content-Encodinggzip or zstd when requested and the body is over 1 KB.
Access-Control-Allow-Origin: *Callable from any web page.

Differences from api.crossref.org

Countstotal-results and facet counts are exact.
OrderWithout a sort or cursor, items come in creation order (unspecified on api.crossref.org).
TiesWorks created in the same second keep the builder's order, not DOI order.
FreshnessA snapshot: works registered or changed after March 2026 aren't here.
Text searchNot yet.

Data

Crossref public data file, March 2026 (10.13003/nggf-vt1j): 179,536,204 works. Records are served as the file has them, with the empty fields api.crossref.org adds to single works (title, container-title, subtitle, original-title, short-title, short-container-title, subject, relation).

Status endpoints

/healthzok when serving.
/_infoIndex build: works, build time, source.
/_statsRequests and latency by kind since the last reset; cache hit rates.
Built by Knowledge Futures. Not a Crossref service.