Smart backward and forward citation following via Semantic Scholar, with relevance filtering and deduplication
Intelligently follow citations backward (references) and forward (citing papers) using Semantic Scholar API.
Core principle: Only follow citations relevant to user's query. Avoid exponential explosion by filtering before traversing.
Use this skill when:
When NOT to use:
Lookup by DOI:
curl "https://api.semanticscholar.org/graph/v1/paper/DOI:10.1234/example.2023?fields=paperId,title,year"
Response:
{
"paperId": "abc123def456",
"title": "Paper Title",
"year": 2023
}
Save paperId - needed for citations/references queries
Get references from paper:
curl "https://api.semanticscholar.org/graph/v1/paper/abc123def456/references?fields=contexts,intents,title,year,abstract,externalIds&limit=100"
Response format:
{
"data": [
{
"citedPaper": {
"paperId": "xyz789",
"title": "Referenced Paper Title",
"year": 2020,
"abstract": "...",
"externalIds": {
"DOI": "10.5678/referenced.2020",
"PubMed": "87654321"
}
},
"contexts": [
"...as described in previous work [15]...",
"...we used the method from [15] to..."
],
"intents": ["methodology", "background"]
}
]
}
Filter for relevance:
For each reference, check:
Scoring:
Only add to queue if score ≥ 5
Get papers citing this one:
curl "https://api.semanticscholar.org/graph/v1/paper/abc123def456/citations?fields=title,year,abstract,externalIds&limit=100"
Response format:
{
"data": [
{
"citingPaper": {
"paperId": "def456ghi",
"title": "Newer Paper Citing This",
"year": 2024,
"abstract": "We extended the work of [original paper]...",
"externalIds": {
"DOI": "10.9012/citing.2024"
}
}
}
]
}
Filter for relevance:
For each citing paper:
Scoring:
Only add to queue if score ≥ 5
Before adding to queue:
Check papers-reviewed.json:
doi = paper["externalIds"].get("DOI")
if doi in papers_reviewed:
skip # Already processed