Install
openclaw skills install scholar-search-x49Search academic papers and authors via the Scholar API (scholar.x49.ai). Use for finding papers by topic, keyword, or natural-language query, discovering authors, getting search suggestions, looking up paper metadata, checking journal rankings (JCR/CCF/FQBJCR), or filtering by open access, year range, paper type, or venue. Covers all academic disciplines. Triggers when user mentions academic papers, scholarly articles, research papers, literature search, journal articles, author lookup, citation counts, open access, or wants to search scholarly databases.
openclaw skills install scholar-search-x49Search academic papers and authors via the Scholar API at https://scholar.x49.ai.
Use this skill when the user needs to:
paper_refThe API base URL is https://scholar.x49.ai/api/v1.
Authentication uses a Bearer token. Resolve the key in this order:
SCHOLAR_API_KEYpsk_tLzPCmJdUw5oAHGeXL2H_fMrDdSyiF_SBJfn2p5uCO4Users can get their own higher-quota key at: https://scholar.x49.ai/docs?section=api-keys
Always construct API calls like this:
SCHOLAR_KEY="${SCHOLAR_API_KEY:-psk_tLzPCmJdUw5oAHGeXL2H_fMrDdSyiF_SBJfn2p5uCO4}"
BASE="https://scholar.x49.ai/api/v1"
POST /papers/searchThe primary search endpoint. Supports two modes via the same URL:
mode=standard): Exact keyword matching, larger result poolmode=semantic): Natural-language understanding, more relevant resultsThe two modes consume separate monthly quotas.
SCHOLAR_KEY="${SCHOLAR_API_KEY:-psk_tLzPCmJdUw5oAHGeXL2H_fMrDdSyiF_SBJfn2p5uCO4}"
curl -s "https://scholar.x49.ai/api/v1/papers/search" \
-H "Authorization: Bearer ${SCHOLAR_KEY}" \
-H "Content-Type: application/json" \
-d '{
"query": "transformer attention mechanism",
"mode": "standard",
"limit": 10,
"sort": "relevance",
"filters": {}
}'
Request body fields:
| Field | Type | Required | Meaning |
|---|---|---|---|
query | string | Conditionally | Natural-language query text. If omitted, provide at least one author_ref in filters |
mode | string | No | standard (default) or semantic |
limit | integer | No | Results per call, 1-100. Default varies |
sort | string | No | relevance, most_cited, newest, or oldest |
Filters object (nested under filters):
| Filter | Type | Meaning |
|---|---|---|
year_from / year_to | integer | Publication year range |
paper_types | string[] | e.g. ["article", "review"] |
venues | string[] | Journal or conference names |
concepts | string[] | Topic or concept labels |
institutions | string[] | Institution names |
author_refs | string[] | Public author references |
open_access | boolean | true for open-access papers only |
Key response fields:
data.items[] — Paper cards in this batchdata.items[].paper_ref — Stable public reference (use for batch/detail lookups)data.items[].authors[].author_ref — Use for author detail and papersdata.facets — Aggregated filter values (years, concepts, venues, institutions, paper_types, venue_quality)meta.total_results — Total matches under current filtersmeta.limit — The result cap you requestedGET /search/suggestionsGet autocomplete suggestions and filter candidate values.
curl -s "${BASE}/search/suggestions?query=transformer&type=all&limit=5" \
-H "Authorization: Bearer ${KEY}"
Parameters (query string):
| Parameter | Type | Required | Meaning |
|---|---|---|---|
query | string | Yes | The typed prefix |
type | string | No | all (default), author, venue, concept, institution, paper_type, year |
limit | integer | No | Max suggestions to return |
Response: Mixed or typed suggestion items with counts.
POST /papers/batchExpand one or more paper_ref values into full metadata.
curl -s "${BASE}/papers/batch" \
-H "Authorization: Bearer ${KEY}" \
-H "Content-Type: application/json" \
-d '{"paper_refs":["pap_ebcabae1be4244f3adba","pap_4748c234f5384d0eaee2"]}'
Request body:
| Field | Type | Required | Meaning |
|---|---|---|---|
paper_refs | string[] | Yes | Public paper references from search results |
Response: Array of full paper cards, same structure as search items.
GET /authors/searchFind authors by name.
curl -s "${BASE}/authors/search?query=Hyeongwon+Kang&limit=5" \
-H "Authorization: Bearer ${KEY}"
Parameters (query string):
| Parameter | Type | Required | Meaning |
|---|---|---|---|
query | string | Yes | Author name or keyword |
limit | integer | No | Max results to return |
Response: Author candidates with author_ref, name, last_known_institution, metrics (citation_count, paper_count), and identifiers (orcid).
GET /authors/{author_ref}Show the full author profile.
curl -s "${BASE}/authors/aut_d2610a19ad8c4b1ca298" \
-H "Authorization: Bearer ${KEY}"
Response includes: name, affiliations (with country, type, years), aliases, identifiers (orcid), metrics (citation_count, h_index, i10_index, paper_count, two_year_mean_citedness), top_venues, topics (with paper_count and score).
GET /authors/{author_ref}/papersList representative or recent papers for one author.
curl -s "${BASE}/authors/aut_d2610a19ad8c4b1ca298/papers?limit=10" \
-H "Authorization: Bearer ${KEY}"
Parameters (query string):
| Parameter | Type | Required | Meaning |
|---|---|---|---|
limit | integer | No | Number of papers to return |
Response: Paper cards, same structure as search items. Default sort is most_cited.
User asks: "Find recent papers on CRISPR gene editing"
POST /papers/search with mode=standard, sort=newest, reasonable limitpaper_ref values for any follow-up requestsUser asks: "How does transfer learning help in medical image analysis?"
POST /papers/search with mode=semantic - this mode understands natural-language queriesUser asks: "Find papers by Yann LeCun"
GET /authors/search?query=Yann+LeCun to find the authorGET /authors/{author_ref} for profile detailsGET /authors/{author_ref}/papers for their publicationsUser asks: "Get more details on these papers" (after seeing search results)
paper_ref values from prior resultsPOST /papers/batch with those refsUser asks: "Find highly-cited open-access review papers on machine learning from Nature or Science published 2022-2025"
{
"query": "machine learning",
"mode": "standard",
"sort": "most_cited",
"limit": 10,
"filters": {
"year_from": 2022,
"year_to": 2025,
"paper_types": ["review"],
"venues": ["Nature", "Science"],
"open_access": true
}
}
User asks: "What are popular topics related to CRISPR?"
GET /search/suggestions?query=CRISPR&type=concept&limit=10When displaying search results to the user, format them clearly:
### [Paper Title](landing_page_url)
- **Authors**: Author1, Author2, Author3
- **Year**: 2024 | **Venue**: Journal Name (JCR Q1)
- **Citations**: 88 | **Type**: article | **Open Access**: No
- **paper_ref**: pap_xxxxx
> Abstract snippet (first 200 chars)...
For author results:
### [Author Name]
- **Institution**: University Name
- **Papers**: 42 | **Citations**: 1,230 | **h-index**: 15
- **ORCID**: 0000-xxxx-xxxx-xxxx
- **author_ref**: aut_xxxxx
metrics.relevance field in search results is typically null - this is expectedpython3 -m json.tool for readable output when debugging+ or %20)venue.quality_signals array contains JCR, FQBJCR, and CCF tier information when available