Skip to main content
China endpoints live under /china and require the china:read scope. They cover Shanghai and Shenzhen A-share daily prices.
A bare six-digit code is not a valid identifier and is rejected with 422. Codes are reused across the mainland exchanges: 000001 is both Ping An Bank on Shenzhen and the SSE Composite Index on Shanghai. Always send the exchange qualifier. This differs from US CIK and Indian ISIN, which are unique on their own.

Prices are unadjusted

China bars are returned unadjusted (不复权) and every response states "adjustment": "unadjusted". Chinese market data conventionally defaults to 前复权 (forward adjustment), which rebases history to the current price — every new corporate action retroactively restates every earlier bar. Corpus does not store prices that way, because it would make a point-in-time read impossible. Adjustment factors are held separately and a re-adjustment is recorded as a new knowledge-time revision, not a rewrite. See Point-in-time data. If you need a total-return series, apply corporate-action adjustment yourself. Note that rights issues (配股) are common in China and are not a simple split factor.

Suspensions are rows, not gaps

A-share trading halts are frequent and can last from days to months, and are often voluntary ahead of an announcement. Corpus records a halted session explicitly rather than omitting it:
  • trading_status is trading or suspended.
  • On a suspended session every price field is null and volume is 0.
  • Suspended sessions are excluded by default. Pass include_suspended=true to retrieve them.
The upstream feed forward-fills the last traded price on halted days. Corpus discards those prices, because a halt is not a flat trading day: carrying them would let a backtest compute a 0% return across a multi-month suspension. Never interpolate across a suspended session.

Price limits are board-specific

Daily limits differ by board: ±10% on the Shanghai and Shenzhen main boards (including ST and *ST names since the 2025 widening from ±5%) and ±20% on the STAR Market and ChiNext. STAR listings have no limit for their first five sessions. A move of exactly ±10.00% on a main-board name is a legitimate limit hit, not an outlier. Calibrate any outlier detection per board — the board field is returned on every security for this reason.

Delisted instruments are included

GET /china/securities returns delisted names by default, each with its delisting_date, so the universe is not restricted to currently-listed companies. Pass listed_only=true to restrict to names still listed at as_of. Identity is point-in-time: a delisted instrument resolves for dates inside its listed window. Delisted retention reflects what the upstream source retains (337 names) and is not asserted to be a complete historical record of every A-share delisting. See Coverage.

Rights and redistribution

China price data is acquired from a third-party redistributor without a redistribution licence from the exchanges. Under the Corpus rights taxonomy it is classified scraped_prohibited, which makes it internal-only: it is excluded from every resale surface, and china:read is a distinct grant that a US or India key does not inherit. Access to this dataset does not grant redistribution rights. The authoritative feeds are licensed to non-Mainland entities through China Investment Information Services for Shanghai and Shenzhen Securities Information Co. for Shenzhen. See Data Provenance.