# Aminer Academic Search

> ACADEMIC PRIORITY: Activate this skill whenever the user's query involves academic, scholarly, or research-related topics — including but not limited to: papers, publications, citations, scholars, researchers, professors, institutions, universities, labs, journals, conferences, venues, patents, research fields, h-index, impact factor, co-authorship, dissertations, theses, peer review, grant projects, research trends, or any question about "who published what / where / when". This skill takes precedence over general web search or generic Q&A for all academic data needs. Full-featured AMiner skill with 29 APIs and 6 workflows. Use this skill when the task requires deep or complex academic analysis that free APIs cannot satisfy. Use this skill for: scholar full profile (bio, education, honors, papers, patents, projects), paper deep dive (full abstract, keywords, authors, citation chains), multi-condition or semantic paper search (filter by author + institution + venue + keywords, or natural language Q&A via pape

- Skill: `canxiangcc/aminer-academic-search` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add canxiangcc/aminer-academic-search`
- Raw SKILL.md: https://api.skillmd.com/api/skills/canxiangcc/aminer-academic-search/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: canxiangcc (https://skillmd.com/u/canxiangcc)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/canxiangcc/aminer-academic-search

---


# AMiner Open Platform Academic Data Query

29 APIs + 6 workflows. Token required: set `AMINER_API_KEY` env var.
- Docs: https://open.aminer.cn/open/docs | Console: https://open.aminer.cn/open/board?tab=control

---

## Mandatory Rules (Critical)

1. **Token Security**: Only check whether `AMINER_API_KEY` exists; never expose the token in plain text anywhere.
2. **Cost Control**: Prefer optimal combined queries; never do indiscriminate full-detail retrieval. Default to top 10 details when the user has not specified a count.
3. **Free-First**: Prefer free APIs unless the user explicitly requires deeper fields; only upgrade to paid APIs when free ones cannot satisfy the need.
4. **Result Links**: Always append an accessible URL after each entity in the output.
5. **Disambiguation**: Scholar ambiguity → filter by `org`/`org_id` or ask user to confirm. Org ambiguity → use `org_disambiguate_pro`. Paper ambiguity → cross-check `year` + `venue_name` + `first_author`.
6. **Cost Report**: After completing all API calls, always output a cost summary to the user showing: each API called, its unit price, number of calls, and the total cost. Format example: `[Cost] ¥X.XX total, N API calls (api_a: ¥X.XX × N, api_b: Free × N)`.
7. **High-Cost Confirmation (≥ ¥5)**: Before executing a workflow or call chain whose estimated total cost is ¥5.00 or more, **stop and ask the user for confirmation** first. Show the planned call chain, estimated cost per step, and the total. Only proceed after the user explicitly agrees. This applies to both predefined workflows (e.g., Scholar Profile ~¥6.00) and ad-hoc multi-step plans.
8. **Experiment Intent Boundary**: Call `experiment_search` only when the user explicitly asks for experiment-level data, Experiment JSON, methods, datasets, or structured experimental results. Never add it to ordinary paper search, abstract/citation lookup, scholar/org/venue/patent requests, broad topic search, or the default Paper Deep Dive workflow.

Entity URL templates (mandatory):
- Paper: `https://www.aminer.cn/pub/{paper_id}`
- Scholar: `https://www.aminer.cn/profile/{scholar_id}`
- Patent: `https://www.aminer.cn/patent/{patent_id}`
- Journal: `https://www.aminer.cn/open/journal/detail/{journal_id}`

---

## Token Check (Required)

Check `AMINER_API_KEY` exists before any API call. Never expose token in plain text.

```bash
[ -z "${AMINER_API_KEY+x}" ] && echo "AMINER_API_KEY missing" || echo "AMINER_API_KEY exists"
```

- If `${AMINER_API_KEY}` exists: proceed. If not: check `--token` parameter. If neither: **stop**, guide user to [Console](https://open.aminer.cn/open/board?tab=control) to generate one.
- If the user provides `AMINER_API_KEY` inline (e.g. "My token is xxx"), accept it for the current session, but recommend setting it as an environment variable for better security.
- Default headers: `Authorization: ${AMINER_API_KEY}`, `X-Platform` (current host: `claude-code` / `cursor` / `codex` / `openclaw`; `unknown` if it cannot be determined), `X-Skill-Name: aminer-academic-search`, `X-Skill-Version` (this file's frontmatter `version`), `Content-Type: application/json;charset=utf-8` (POST). Always send `X-Platform` and the two `X-Skill-*` headers.

---

## Call Guardrails

1. Parameter names and types must match `references/api-catalog.md` exactly.
2. `paper_info` is batch-only: `{"ids": [...]}`. `paper_detail` is single-paper only: one `id`. Never mix them.
3. When multiple details are needed, filter with a low-cost API first, then fetch details for a small set.
4. **Route by query shape, not by habit.** See "Paper Search API Selection Guide". A phrase starts at free `paper_search`; bulk goes to `paper_search_pro` with `size`. Before spending ¥0.30 on `paper_qa_search_pro` you must be able to name one of four reasons — sentence, range filter, boolean exclusion, or precision-first — and if you cannot, drop down. Never send a sentence to `paper_search_pro`: it returns 0 and still bills.

---

## Paper Search API Selection Guide

When the user says "search for papers", do not guess at intent. Look at two directly observable facts: **is the query string a phrase or a sentence**, and **how many results are needed**.

| API | Accepts | Only it can do | Hard limit | Cost |
|---|---|---|---|---|
| `paper_search` | Phrase | It is free | `title` field only; `size` ≤ 20; no filters, no sort | Free |
| `paper_search_pro` | Phrase, per field (title/keyword/abstract/author/org/venue) | 100 per page + hard sort (`order=year\|n_citation`); **cheapest bulk** | A sentence returns 0 and is still billed | ¥0.01 |
| `paper_qa_search` | Phrase or sentence | Weighted nested AND/OR (`topic_high/middle/low`), `sci_flag`, `offset` down to 10000 | No year/citation ranges, no boolean exclusion | ¥0.05 |
| `paper_qa_search_pro` | Sentence, colloquial or Chinese questions | Semantic parsing + year/citation ranges + `all/any/exclude` booleans + `sort` modes; **best retrieval quality** | Fixed 10 per page; every further page costs another ¥0.30 | ¥0.30 |
| `paper_list_by_keywords` | Multiple keywords | Batch thematic retrieval | — | ¥0.10 |
| `paper_detail_by_condition` | Year + venue | Returns details directly | — | ¥0.20 |

### Two decision rules

1. **Is the query a sentence** (has a predicate or a question word)? Yes → only `paper_qa_search_pro` / `paper_qa_search` can parse it; the other two return 0, and `paper_search_pro` bills you for that 0. No → start from free `paper_search` and escalate only if it falls short.
2. **Do you need more than 10 results?** Yes → do not use `paper_qa_search_pro`; use `paper_search_pro` with `size` (≤100).

**Cost cliff — memorise this.** For 100 results: `paper_search_pro` with `size=100` is one call at ¥0.01; `paper_qa_search_pro` needs 10 cursor pages = ¥3.00. **300×.**

### Hard rule for spending ¥0.30

Before calling `paper_qa_search_pro`, you must be able to name **at least one** of these reasons. If you cannot, drop to `paper_search_pro`.

1. **Sentence** — the query is a natural-language sentence or question, so the literal-matching endpoints would return 0.
2. **Range filter** — you need `year_from`/`year_to` or `min_citations`/`max_citations`. The other endpoints can only enumerate exact years; they cannot express a range.
3. **Boolean exclusion** — you need `all_terms` / `any_terms` / `exclude_terms`.
4. **Precision first** — the user explicitly wants accurate or best-matching results, or a cheaper endpoint already came back off-topic. This is the highest-quality retrieval of the four; go straight to it rather than burning attempts to save ¥0.29. Legacy `paper_qa_search` also parses a sentence, but it drifts toward the dominant term: measured on `how do LLM agents implement long-term memory`, Pro returned 4/4 results specifically about agent long-term memory, while legacy returned 1/5 — the rest were generic "LLM-based agents" surveys.

None of the four applies = paying 30× for nothing. Drop down.

Key `paper_qa_search_pro` rules:
- **Use the natural-language `query` field** (`query_type="auto"`, the default) and pass the user's original question as a whole sentence. Do not pre-split it into keywords and reassemble them into `all_terms` — splitting throws away the semantic understanding you are paying for, and precision drops below just asking. Fall back to `query_type="topic"` only when literal term matching is genuinely required.
- Page size is **fixed at 10**. Do not send `size`. Paginate with `next_cursor` → next request body is `{"cursor":"..."}` only.
- `sort`: `relevance` / `balanced` / `recent` / `citation`. For “most cited” use `citation`; for “newest” use `recent`.
- Response card fields only: `paper_id`, `title`, `title_zh`, `authors.name`/`name_zh`, `n_citation_bucket`, `venue_name`, `year`. Use `paper_detail` when full abstract/keywords are needed.
- Always append `https://www.aminer.cn/pub/{paper_id}`.

Legacy `paper_qa_search` — what only it can do:
- **Weighted nested AND/OR**: `topic_high` / `topic_middle` / `topic_low` give three boost tiers. Pro has no equivalent. Use it for "must contain A, strongly boost B, weakly boost C".
- **Deep paging**: `size` ≤ 100 with `offset` ≤ 10000 — 100 results for ¥0.05. Pro's cursor cannot match that (10 per page × ¥0.30).
- `sci_flag` restricts to SCI papers; Pro has no such filter.
- `query` and `topic_high/topic_middle/topic_low` are **mutually exclusive**; do not pass both.
- Response now also carries `first_author`, `venue_name`, `year`, `n_citation_bucket` — screen on those before paying for `paper_detail`.

Experiment retrieval selection:
- Use `experiment_search` only for explicit experiment-level intent (¥0.10/call).
- Exact filters: `paper_id`, `method`, `dataset_name` (→ backend `dataset`).
- Free text (paper title, experiment name, problem/method/conclusion, etc.) → `search_text` (ES over `paper_title`, `experiment_name`, `research_problem`, `research_problem_description`, `research_goal`, method name/description text, `conclusion`, `limitations`, `key_results`).
- Response shape: each result carries `methods: [{name, description, ...}]` (a list); some older records may still have flat `method` / `method_description`. Return objects as-is — read `methods` first, and never flatten the list into a single `method` string.
- Do not call `paper_search` to resolve titles; do not send a separate `experiment_name` parameter.
- At least one of `paper_id`, `method`, `dataset_name`, `search_text` must be non-empty. Trim-only; do not invent fields.
- Raw JSON requests return `{ "results": [...] }` without rewriting Experiment objects.

Free-tier screening fields available:

- `paper_search`: `venue_name`, `first_author`, `n_citation_bucket`, `year`
- `paper_info`: `abstract_slice`, `year`, `venue_id`, `author_count`
- `person_search`: `interests`, `n_citation`, `org/org_id`
- `organization_search`: `aliases`
- `venue_search`: `aliases`, `venue_type`
- `patent_search`: `inventor_name`, `app_year`, `pub_year`
- `patent_info`: `app_year`, `pub_year`

All three paper-search endpoints (`paper_search`, `paper_search_pro`, `paper_qa_search`) now return the same screening set — `first_author`, `venue_name`, `year`, `n_citation_bucket` — and `paper_qa_search_pro` returns `authors`, `venue_name`, `year`, `n_citation_bucket`. Filter on these before calling `paper_detail` (¥0.01 each); only fetch details for papers you will actually cite. `n_citation_bucket` is a coarse tier, never an exact count — do not compare buckets numerically or claim a precise citation figure from one.

---

## Handling Out-of-Workflow Requests

When the user's request falls outside the 6 workflows:

1. Read `references/api-catalog.md` to confirm available APIs, parameters, and response fields.
2. Design the shortest viable call chain: locate ID → supplement details → expand relationships.
3. Do not give up because "no existing workflow fits"; actively compose APIs based on `api-catalog`.

---

## 6 Combined Workflows

### Workflow 1: Scholar Profile (~¥6.00)

**Use Case**: Complete academic profile — bio, research interests, papers, patents, projects.
**Cost note**: Full execution exceeds the ¥5 threshold → **must ask for user confirmation before proceeding** (Rule 7). Show the planned steps and cost. Confirm which sub-modules are needed; skip patents/projects if not requested.

**Call Chain:**
```
Scholar search (name → person_id)
    ↓
Parallel calls (pick as needed):
  ├── Scholar details (bio/education/honors)         ¥1.00
  ├── Scholar portrait (interests/work history)      ¥0.50
  ├── Scholar papers (paper list)                    ¥1.50
  ├── Scholar patents (patent list)                  ¥1.50
  └── Scholar projects (funding info)                ¥1.50
```

Fallback: if `paper_search` yields no results in sub-steps, fall back to `paper_search_pro`.

---

### Workflow 2: Paper Deep Dive (~¥0.12)

**Use Case**: Full paper information and citation chain from a title or keyword.

**Call Chain:**
```
Paper search / Paper search pro (title/keyword → paper_id)
    ↓
Paper details (abstract/authors/DOI/journal/year/keywords)  ¥0.01
    ↓
Paper citations (cited papers → cited_ids)                  ¥0.10
    ↓
(Optional) Batch paper_info for cited papers                Free
```

Fallback: if `paper_search` yields no results, fall back to `paper_search_pro`.

---

### Workflow 3: Org Analysis (~¥0.81)

**Use Case**: Institution scholar size, paper output, patent count — for competitive research or partnership evaluation.

**Call Chain:**
```
Org disambiguation pro (raw string → org_id)  ¥0.05
    ↓
Parallel calls:
  ├── Org details (description/type)             ¥0.01
  ├── Org scholars (scholar list, 10/call)       ¥0.50
  ├── Org papers (paper list, 10/call)           ¥0.10
  └── Org patents (patent IDs, up to 10,000)     ¥0.10
```

> If disambiguation pro returns no ID, fall back to `org_search` (free).

---

### Workflow 4: Venue Papers (~¥0.10 - ¥0.30)

**Use Case**: Track journal papers by year; useful for submission research or trend analysis.

**Call Chain:**
```
Venue search (name → venue_id)                          Free
    ↓
(Optional) Venue details (ISSN/type/abbreviation)       ¥0.20
    ↓
Venue papers (venue_id + year → paper_id list)          ¥0.10
    ↓
(Optional) Batch paper detail query
```

---

### Workflow 5: Patent Analysis (~¥0.02)

**Use Case**: Search patents in a technology domain, or retrieve a scholar's/institution's patent portfolio.

**Call Chain (standalone search):**
```
Patent search (query → patent_id)        Free
    ↓
Patent info / Patent details             Free / ¥0.01
```

**Call Chain (via scholar/institution):**
```
Scholar search → Scholar patents (patent_id list)
Org disambiguation → Org patents (patent_id list)
    ↓
Patent info / Patent details
```

---

### Workflow 6: Experiment Retrieval (~¥0.10)

**Use Case**: Explicit Experiment JSON via user-supplied `paper_id` / `method` / `dataset_name` / `search_text`.
**Cost note**: `experiment_search` is ¥0.10 per call. `--dry-run` previews only `experiment_search`.

**Call Chain:**
```
Experiment search (paper_id / method / dataset_name / search_text)
```

Single POST; no paper-title resolution. Returns `{ "results": [...] }` (or a structured API error). Page-limited (commonly ≤10). Never add this workflow to Paper Deep Dive. Do not summarize raw JSON or invent missing fields.

---

## Individual API Quick Reference

> Full parameter docs: read `references/api-catalog.md`

| # | Title | Method | Price | API Path (Base: datacenter.aminer.cn/gateway/open_platform) |
|---|------|------|------|------|
| 1 | Paper QA Search Pro | POST | ¥0.30 | `/api/paper/qa/searchPro` |
| 2 | Paper QA Search (legacy) | POST | ¥0.05 | `/api/paper/qa/search` |
| 3 | Scholar Search | POST | Free | `/api/person/search` |
| 4 | Paper Search | GET | Free | `/api/paper/search` |
| 5 | Paper Search Pro | GET | ¥0.01 | `/api/paper/search/pro` |
| 6 | Patent Search | POST | Free | `/api/patent/search` |
| 7 | Org Search | POST | Free | `/api/organization/search` |
| 8 | Venue Search | POST | Free | `/api/venue/search` |
| 9 | Scholar Details | GET | ¥1.00 | `/api/person/detail` |
| 10 | Scholar Projects | GET | ¥1.50 | `/api/project/person/v3/open` |
| 11 | Scholar Papers | GET | ¥1.50 | `/api/person/paper/relation` |
| 12 | Scholar Patents | GET | ¥1.50 | `/api/person/patent/relation` |
| 13 | Scholar Portrait | GET | ¥0.50 | `/api/person/figure` |
| 14 | Paper Info | POST | Free | `/api/paper/info` |
| 15 | Paper Details | GET | ¥0.01 | `/api/paper/detail` |
| 16 | Paper Citations | GET | ¥0.10 | `/api/paper/relation` |
| 17 | Patent Info | GET | Free | `/api/patent/info` |
| 18 | Patent Details | GET | ¥0.01 | `/api/patent/detail` |
| 19 | Org Details | POST | ¥0.01 | `/api/organization/detail` |
| 20 | Org Patents | GET | ¥0.10 | `/api/organization/patent/relation` |
| 21 | Org Scholars | GET | ¥0.50 | `/api/organization/person/relation` |
| 22 | Org Papers | GET | ¥0.10 | `/api/organization/paper/relation` |
| 23 | Venue Details | POST | ¥0.20 | `/api/venue/detail` |
| 24 | Venue Papers | POST | ¥0.10 | `/api/venue/paper/relation` |
| 25 | Org Disambiguation | POST | ¥0.01 | `/api/organization/na` |
| 26 | Org Disambiguation Pro | POST | ¥0.05 | `/api/organization/na/pro` |
| 27 | Paper Batch Query | GET | ¥0.10 | `/api/paper/list/citation/by/keywords` |
| 28 | Paper Details by Year+Venue | GET | ¥0.20 | `/api/paper/platform/allpubs/more/detail/by/ts/org/venue` |
| 29 | Experiment Search | POST | ¥0.10 | `/api/v3/paper/search/experiment_data/SearchPro` |

---

## References

- Full API parameter documentation: read `references/api-catalog.md`
- Optional Python client: `scripts/aminer_client.py`
- Test cases: `evals/evals.json`
- Official documentation: https://open.aminer.cn/open/docs
- Console: https://open.aminer.cn/open/board?tab=control

