Sections

Library

Find papers and passages across the library

GET/feed/

The paper feed

API key, sign-in or anonymousMCP: get_recommended_paper

sort=for_you ranks papers for you from your like/dislike history (interest keyword vector) and citation adjacency to papers you've engaged with; each paper carries match_score and match_reason. Papers you've read or rated are left out unless include_seen. per_page=1 with sort=for_you is the single paper ranked highest for you right now (an empty list: nothing new to recommend). Anonymous visitors get the unpersonalised feed.

Parameters
NameInTypeDescription
sortquery"for_you" | "new" | "hot" | "classic"for_you (ranked for you), new, hot or classic Default: "for_you"
categoryquerystring | nullOnly papers in this arXiv category, e.g. cs.LG
pagequeryintegerPage number Default: 1
per_pagequeryintegerPapers per page (1-50) Default: 20
include_seenquerybooleanInclude papers you've already read or rated Default: false
Response: FeedResponse
FieldTypeDescription
has_more *boolean
page *integer
papers *PaperResponse[]
abstract *string
arxiv_idstring | null
authors *string
categories *string
citation_countinteger
classic_rankinteger | null
created_at *string
dislikesinteger
doistring | null
hot_score *number
id *integer
is_classicboolean
likesinteger
match_reasonstring | null
match_scorenumber
pdf_urlstring | null
published_datestring | null
relevance_scorenumber | null
source *string
summarystring | null
title *string
viewer_ratinginteger | null
viewer_readboolean | null
per_page *integer
sort *string
total *integer
curl
curl 'https://api.papervantage.com/feed/' \
  -H "Authorization: Bearer $PV_API_KEY"
pv
pv papers recommended

GET/papers/graph

The citation graph as nodes and edges

API key, sign-in or anonymousMCP: get_citation_graph

With paper_id: that paper's neighbourhood within depth hops (1-2), either direction (is_seed marks the paper). Without it, the library graph (up to max_nodes papers). Nodes get relevance_score (0-1) against `query`, against a project's papers (`project_id`, yours only), or against the seed paper when only paper_id is given. `query` and `project_id` are mutually exclusive. Edges only ever join returned nodes.

Parameters
NameInTypeDescription
paper_idqueryinteger | nullSeed paper: return its neighbourhood within depth hops
queryquerystring | nullFree-text topic to score nodes against
project_idqueryinteger | nullScore nodes against one of your projects' papers
depthqueryintegerHops from the seed (1 or 2, default 1) Default: 1
max_nodesqueryinteger | nullWithout paper_id: at most this many papers, by id (1-1000); omitted, the whole library
Response: PaperGraph
FieldTypeDescription
edges *PaperGraphEdge[]
source *integer
target *integer
nodes *PaperGraphNode[]
arxiv_idstring | null
authors *string
categories *string
citation_countinteger
doistring | null
id *integer
is_classicboolean
is_seedboolean
published_datestring | null
relevance_scorenumber | null
title *string
curl
curl 'https://api.papervantage.com/papers/graph' \
  -H "Authorization: Bearer $PV_API_KEY"
pv
pv papers graph

POST/papers/research-context

A condensed briefing on a free-text topic across several papers

API key or sign-inMCP: assemble_research_context

The papers whose abstracts best match the query, plus papers reached from them over citation and supersedes/contradicts/extends edges (up to max_hops). Each paper comes with key claims and methodology from its distillation (or its summary), and `relationships` lists semantic_relation edges between papers in the bundle. Use it for "everything relevant to X".

Request body (JSON)
FieldTypeDescription
max_hopsintegerGraph hops from the seed papers (0-4, default 2)
max_papersintegerDistinct papers in the bundle (1-50, default 8)
query *stringFree-text research question or topic
Response: ResearchContext
FieldTypeDescription
papers *ContextPaper[]
arxiv_idstring | null
content_source *"distillation" | "abstract_fallback"
hops_from_seed *integer
id *integer
is_seed *boolean
key_claimsstring[]
methodologystring | null
summarystring | nullOnly when the paper isn't distilled yet
title *string
query *string
relationships *ContextRelationship[]
confidencenumber | null
from_paper_id *integer
from_titlestring | null
rationalestring | null
relationstring | null
target_claimstring | null
to_paper_id *integer
to_titlestring | null
curl
curl -X POST 'https://api.papervantage.com/papers/research-context' \
  -H "Authorization: Bearer $PV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"<query>"}'
pv
pv papers context <query>

GET/papers/search/chunks

Find the passages that answer a question, in one paper or across the library

API key or sign-inMCP: search_paper_chunks

Cheaper and more precise than reading a whole transcript. Ask in natural language; passages are matched by meaning and by words, fused, best first. Judge the results: they are candidates.

Returns {"results": [{paper_id, paper_title, chunk_index, content, score, match}], "legs"}. Only the order of `score` matters. Without paper_id, results also include the caller's OWN private PDFs: those have `private: true`, `paper_id: null` and a `document_id`; nobody else ever sees them.

`legs` = {"semantic": "ok"|"unavailable", "keyword": "ok"}: when semantic is unavailable only exact words match, so rephrase with the paper's own terms. An EMPTY result carries `index_status` -- "not_chunked" (not indexed yet: read the transcript instead), "not_embedded" (exact words only so far) or "no_match" -- so don't retry the same query.

Parameters
NameInTypeDescription
query *querystringNatural-language question or topic
paper_idqueryinteger | nullSearch only this paper
max_resultsqueryintegerMaximum passages (1-30, default 10) Default: 10
Response: ChunkSearchResponse
FieldTypeDescription
indexobject | nullOnly on an empty one-paper result: chunk counts
index_statusstring | nullOnly on an empty result: not_chunked, not_embedded or no_match
legs *object{"semantic": "ok"|"unavailable", "keyword": "ok"}
results *object[][{paper_id, paper_title, chunk_index, content, score, match}] best first; the caller's own private PDFs have private: true, paper_id: null and a document_id
curl
curl 'https://api.papervantage.com/papers/search/chunks?query=%3Cquery%3E' \
  -H "Authorization: Bearer $PV_API_KEY"
pv
pv papers search-chunks <query>

Next: Animations