> Source: https://ashareapi.com/en/docs/endpoints/chip-batch/  ·  Markdown version for LLMs / AI agents

Pro endpoint · Pro

# Batch chip distribution (profit ratio / average cost / concentration, many stocks in one call) API
 ⭐ Fetch chip distribution for many stocks in one call (profit ratio / average cost / 90% and 70% concentration), with per-symbol status.

What it solves: /v1/chip takes one symbol at a time, so scanning 200 symbols means 200 calls; this endpoint returns them in 3.9 seconds (measured, 200 symbols).

Why not just use /v1/chip: its code accepts commas too, but the response is a wide N x 8N diagonal matrix (row i only carries group i, every other cell is -), which is impossible to line up in pandas - and the whole column group of an invalid symbol disappears, so you cannot tell which one is missing. This endpoint fills in every requested symbol and says why any are missing.

Response: data is an array; each item has code / ok / data:[...] or error; plus requested / returned / failed.

Limits: Pro up to 200 symbols, Unlimited up to 300. Billing is per symbol actually returned.

⚠️ date applies to all symbols at once; on non-trading days the upstream falls back to the most recent trading day - trust the date in each row.

⚠️ A-shares only (sh/sz/bj) - HK / US symbols are flagged as failed with a pointer to /v1/chip.

⚠️ History is kept for roughly the last year only.

⚠️ Paid endpoint: Pro (¥99) and above.
 Pro `GET /v1/chip-batch`
 Signature
```
GET /v1/chip-batch?codes=&date=2026-09-16
```
 One-liner

```
curl "https://api.ashareapi.com/v1/chip-batch?codes=&date=2026-09-16&key=YOUR_KEY"
```
 Parameters: `codes * · date` * = required

## Quick start
 Replace the key below with yours (free endpoints need no key):
 curl

```
# 推荐：Authorization 头（密钥不进日志）
curl -H "Authorization: Bearer YOUR_KEY" \
 "https://api.ashareapi.com/v1/chip-batch?codes=&date=2026-09-16"

# 快速测试：直接浏览器打开（?key= 会留在日志/历史里，别用于生产）
curl "https://api.ashareapi.com/v1/chip-batch?codes=&date=2026-09-16&key=YOUR_KEY"
```
 Python

```
import requests

r = requests.get(
 "https://api.ashareapi.com/v1/chip-batch",
 headers={"Authorization": "Bearer YOUR_KEY"},
 params={"codes": ""},
 timeout=30,
)
print(r.json())
```
 JavaScript

```
const r = await fetch("https://api.ashareapi.com/v1/chip-batch?codes=&date=2026-09-16", {
 headers: { Authorization: "Bearer YOUR_KEY" },
});
console.log(await r.json());
```

## Parameters
 |
| | Parameter | Type | Required | Description

| | codes | string | Yes | 多个股票代码，逗号分隔：sh600519,sz000001（专业版 ≤200 只 · 不限量版 ≤300 只）

| | date | string | No | Date YYYY-MM-DD (blank = latest trading day)

 `codes` string Yes
 多个股票代码，逗号分隔：sh600519,sz000001（专业版 ≤200 只 · 不限量版 ≤300 只）

 `date` string
 Date YYYY-MM-DD (blank = latest trading day)

 Response
 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**.

 Rate limits & quota
 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 →](/en/docs/errors)

## FAQ

### General (applies to every endpoint)
 Do these endpoints need an API key?
 **Free endpoints do not**: health, challenge, quote, kline, hot, market-overview and changedist work anonymously. **Paid endpoints do**: send `Authorization: Bearer `. ⚠️ 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.

 Am I charged when the upstream returns nothing or errors?
 **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.

 How fresh is the data?
 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.

 Can I request several stocks in one call?
 **No.** `code` is a single-value parameter — one stock per call. For batches, issue concurrent calls and respect your tier per-minute limit.

 How do I use this from Claude / Cursor / ChatGPT?
 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
 [Full-history K-line (10y daily · raw + adjustment factors)](/en/docs/endpoints/kline-full)[Whole-market single-day K-line (all A-shares, 5,000+ in one call)](/en/docs/endpoints/market-kline)[Quant backtest (single-stock live / portfolio precomputed)](/en/docs/endpoints/backtest)[Quant strategy list (20 single-stock + 9 portfolio, with measured performance)](/en/docs/endpoints/strategies)[IP allow-list (lock a key to fixed IPs)](/en/docs/endpoints/ip-whitelist)[Batch backtest (many stocks × many strategies)](/en/docs/endpoints/backtest-batch)[Quant factor library (88 factors + 22 presets)](/en/docs/endpoints/factors)[Quant playbook library (how to judge the market · 25 playbooks)](/en/docs/endpoints/playbooks)

 Use it from an AI Agent?
 Set up MCP once, then just ask the AI — it calls the endpoint itself.

 [MCP setup](/en/mcp)[Pricing](/en/pricing)

 [← Back to the full endpoint reference](/en/endpoints)
