API Reference#
API Reference#
The public API base URL is https://ookcite-api.turtletech.us/api/v1.
The live OpenAPI interface is available at
https://ookcite-api.turtletech.us/api/docs.
Lookup#
DOI Lookup#
POST /api/v1/lookup/doi
{"doi": "10.1038/187493a0"}
Returns CitationMetadata from the local corpus or a bounded DOI-provider
fallback, with title, authors, date, journal, DOI, and related fields.
ISBN Lookup#
POST /api/v1/lookup/isbn
{"isbn": "978-0-521-85629-7"}
Returns CitationMetadata from the local corpus or OpenLibrary fallback.
Reverse Lookup#
POST /api/v1/reverse
{"text": "Maiman T H 1960 Stimulated Optical Radiation in Ruby Nature 187 493-4"}
Returns ranked ReverseLookupCandidate[] with score, source, and metadata.
Candidate generation uses the local citation corpus first and can use bounded
provider fallbacks when the local result is insufficient.
Format#
POST /api/v1/format
{
"entries": [{
"id": "maiman1960",
"entry_type": "Article",
"title": "Stimulated Optical Radiation in Ruby",
"authors": [{"family": "Maiman", "given": "T. H."}],
"date": {"year": 1960},
"journal": "Nature",
"volume": "187",
"pages": "493-494",
"doi": "10.1038/187493a0"
}],
"style": "apa",
"locale": "en-US"
}
Returns:
html: formatted bibliography as HTMLplain: formatted bibliography as plain textcitations: in-text citation markersentries: per-entry paired data (in-text + bibliography, input order)
Group Cite#
POST /api/v1/format/group-cite
{
"entries": [
{
"id": "maiman1960",
"entry_type": "Article",
"title": "Stimulated Optical Radiation in Ruby",
"authors": [{"family": "Maiman", "given": "T. H."}],
"date": {"year": 1960},
"journal": "Nature",
"doi": "10.1038/187493a0"
},
{
"id": "einstein1905",
"entry_type": "Article",
"title": "Zur Elektrodynamik bewegter Korper",
"authors": [{"family": "Einstein", "given": "Albert"}],
"date": {"year": 1905},
"journal": "Annalen der Physik"
}
],
"indices": [0, 1],
"style": "ieee"
}
Returns a grouped in-text citation (e.g. [1-4]).
Styles#
GET /api/v1/styles – list styles (first 50)
GET /api/v1/styles/search?q=chicago&limit=10 – search styles
User Info#
GET /api/v1/me – returns auth state, plan, lookups remaining
Utilities (Academic/Business plan required)#
Citation Key Generation#
POST /api/v1/citation-keys
{"entries": [{"title": "Example Paper", "authors": [{"family": "Goswami", "given": "Rohit"}], "date": {"year": 2026}}]}
Returns Better BibTeX-style keys:
{"keys": ["goswami2026", "henkelman2000a"]}
Journal Abbreviation Expansion#
POST /api/v1/journal/expand
{"abbreviation": "JACS"}
Returns:
{"abbreviation": "JACS", "full_name": "Journal of the American Chemical Society", "found": true}
Supports 16,000+ journal abbreviations from the JabRef database.
Health#
GET /api/health – service status, version, search readiness, ingest stream
status, and managed-count breakdown. No auth required. total_managed is the
legacy aggregate; use managed_counts.corpus_records when you need the
canonical corpus size without the historical baseline or server activity
counters.
Rate Limiting#
All lookups (DOI, ISBN, reverse) consume daily quota unless the paper is already in one of your collections. Format, styles, health, and manual entry do not.
Batch operations, citation keys, and journal expansion require an academic or business plan.