Cito is a fast programmatic search service for the academic literature: one API that runs semantic and keyword search over ~148M papers and fuses the results. The whole corpus is self-hosted, so there are no upstream rate limits to inherit; the public Semantic Scholar API allows 1 request/second, Cito exists to remove that ceiling.
How search works
Every query runs two retrievers over local indexes:
- Semantic: your query is embedded with SPECTER2, a model trained specifically on scientific papers, and matched against precomputed paper embeddings by vector similarity. This finds work that is about the same thing even when it shares no keywords with your query.
- Keyword: classic BM25 full-text matching over titles and abstracts. This keeps exact terms, author jargon and rare acronyms findable.
The two rankings are then merged with reciprocal rank fusion (RRF). The difficulty is that the retrievers score on scales that cannot be compared directly: a BM25 relevance score and a vector similarity measure different things, and rescaling them onto a common range is brittle and shifts from one query to the next. RRF avoids the problem by discarding the raw scores and using only each paper's rank position in each list. A paper both retrievers place near the top rises to the top of the merged list, and neither retriever's score magnitudes can drown out the other.
score(paper) = sum over each list it appears in of 1 / (k + rank) (k ~ 60)This needs no training data and just one constant, which is what keeps the merged ranking stable across very different queries. Ordering is deterministic: the same query against the same corpus snapshot returns the same results in the same order. You can also run either retriever alone via mode=semantic or mode=keyword.
No third-party API is called at query time. Results come entirely from Cito's own indexes, which is what keeps latency low and behavior reproducible.
What a result carries
Title, authors, venue, publication date, DOI, citation count, abstract when available, and a direct open-access PDF link when one exists. Cito serves metadata and links; full text always lives at the publisher or repository that hosts it.
Where next
- Data: where the corpus comes from, how fresh it is, and how often it updates.
- API reference: endpoints, parameters, auth and examples. Agents can read /llms.txt.
- Licensing: source data licenses and what attribution you need to keep.