Recall spans
POST /v1/recall
Defaults to 8000.
e.g.
open_questions, mechanisms, reliability, what_to_build.Each span:
node_id (int), text (str), score (float), tokens (int),
provenance (object).Papers
Recall papers
GET /v1/papers/recall?q={query} → list[Paper], where a paper is
doi, title, year, oa, cached, score.
Check existence
GET /v1/papers/{doi}/exists → { "exists": bool }.
Ingest a paper
POST /v1/papers
Resolved from title/url if absent.
Open access.
Paper (doi, title, year, oa, cached).
Batch ingest
POST /v1/papers/batch
Each item is a paper spec; fanned out to a worker pool.
ingested count).
Cache-first fetch
POST /v1/papers/{doi}/fetch → { "doi", "warm", "bytes", "bytes_saved", "source" }
where source is "memory" or "origin". 404 if the paper isn’t in memory.
Analyses
Store an analysis
POST /v1/analysis
Get an analysis
GET /v1/analysis/{doi} → the analysis fields above. 404 if not found.