Analyst Agent: review a scanner snapshot (T+1/T+5/T+20 returns, benchmark, excess, hit rate; read-only) API
输入 snapshot_id,读取该快照的 picks 与 T+1/T+5/T+20 评估,输出收益/基准/超额/命中率、赢家输家、数据缺口和复盘报告。 ⚠️ BYOK 可选:带 X-LLM-Key 时用模型润色;不带时返回确定性复盘。 ⚠️ 只读;不改快照/评估;不构成投资建议。
GET /v1/analystGET /v1/analyst?snapshot_id=&focus=overallcurl "https://api.ashareapi.com/v1/analyst?snapshot_id=&focus=overall&key=YOUR_KEY"snapshot_id * · focus · horizon* = requiredQuick start
Replace the key below with yours (free endpoints need no key):
# 推荐:Authorization 头(密钥不进日志)
curl -H "Authorization: Bearer YOUR_KEY" \
"https://api.ashareapi.com/v1/analyst?snapshot_id=&focus=overall"
# 快速测试:直接浏览器打开(?key= 会留在日志/历史里,别用于生产)
curl "https://api.ashareapi.com/v1/analyst?snapshot_id=&focus=overall&key=YOUR_KEY"import requests
r = requests.get(
"https://api.ashareapi.com/v1/analyst",
headers={"Authorization": "Bearer YOUR_KEY"},
params={"snapshot_id": ""},
timeout=30,
)
print(r.json())const r = await fetch("https://api.ashareapi.com/v1/analyst?snapshot_id=&focus=overall", {
headers: { Authorization: "Bearer YOUR_KEY" },
});
console.log(await r.json());Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| snapshot_id | string | Yes | scanner 快照 ID,如 scn_xxx |
| focus | string | No | overall / winners / losers / attribution |
| horizon | string | No | 只复盘某个窗口:1 / 5 / 20 |
snapshot_idstringYesfocusstringhorizonstringResponse fields
The table below is captured from real API calls (not inferred): each row gives the field name, its type and one real sample value, so you can align your parser.
The upstream returned nothing during this probe, so there are no fields to list — try another symbol or trading day (margin data appears after the close, dividends depend on the reporting period).
Probed: 2026-10-20
Unified envelope: { ok, endpoint, tier, elapsed_ms, source, data }
Rows live in data; when upstream returns nothing you get ok:false and the call is not counted.
Free endpoints need no key (anonymous 5/min — 250 bars per request, 100k rows per day; solve one PoW challenge for 15/min). Paid tiers: Trial 30 · Standard 120 · Pro 300 · Unlimited 600 per minute; buyout packs are capped by total calls and never expire.
See the error code table →FAQ
General (applies to every endpoint)
Free endpoints do not: health, challenge, quote, kline, hot, market-overview and changedist work anonymously. Paid endpoints do: send Authorization: Bearer <your key>. ⚠️ The anonymous allowance is tiered by caller type: browsers (humans) get 5/min; scripts, SDKs and AI Agents (curl, requests, axios, openai user-agent strings) get 2/min — automated traffic is easier to abuse. Solving one PoW challenge (GET /v1/challenge, then send the X-PoW header) raises it to 15/min regardless of type. ⚠️ Also, anonymous calls are capped at 250 bars per request and 100k rows per day — use an API key for the full 1212 bars or unlimited daily volume.
No. When the upstream fails or returns nothing you get ok:false and the charge for that call is refunded (total_calls / usage_log / ep_log are rolled back together). Only calls that actually returned data count.
Quotes (quote / kline / orderbook / changedist) are real-time or current session; financials, shareholders, dividends and events are within T+1 of upstream disclosure. The source field in every response tells you which data channel actually served it.
No. code is a single-value parameter — one stock per call. For batches, issue concurrent calls and respect your tier per-minute limit.
Set up MCP once, then just ask the AI — it calls the endpoint itself. MCP exposes 39 tools covering quotes, financials, screening, sectors and macro.
Related endpoints
Set up MCP once, then just ask the AI — it calls the endpoint itself.