Korean Stock Data API — endpoints, no key required
Every file below is a plain static JSON document over HTTPS with no authentication, no quota and open CORS. Data is refreshed every trading day after the close (T+1). Machine-readable spec: OpenAPI 3.1 — drop that URL into a ChatGPT custom GPT as an Action, or generate a client from it. Start from the catalog, index.json, which lists every file with its byte size and freshness.
Endpoints
| Path | What it is |
|---|---|
index.json | Catalog — file list, sizes, freshness, archive dates |
today.json | One-day digest — index close, advance/decline, top filings, rankings |
s/{code}.json | One stock — close, market cap, financials, recent filings |
s/{code}_history.json | One stock, up to 250 trading days: [date, close, volume] |
quotes_top300.json | Top 300 by market cap, sort order guaranteed |
disclosures_top100.json | Top 100 filings by materiality score |
earnings_recent60.json | Latest 60 earnings filings (truncation-safe) |
disclosure_impact.json | Median market-adjusted return after each filing type |
rankings.json | Growth leaders, quiet performers, 52-week highs/lows |
daily/today_{YYYYMMDD}.json | Archived daily digest (30-day window) |
notices.json | Machine-readable incident and correction log |
Stock codes are the 6-digit KRX short code (Samsung Electronics =
005930). Look them up in
search_index_min.json, which also declares the
URL patterns so you do not have to guess them.
Large files are truncated by AI fetch tools — use the small edition
Most AI fetch tools cut a response at 50–150 KB, and a truncated JSON is
unparseable, which produces a silently wrong answer instead of an error.
index.json carries a fetch_guide block naming the small alternative
for every large file. Rule of thumb: if you need one stock, always use
s/{code}.json rather than the full quotes file.
Examples
curl -s https://aikstockdata.com/data/public/s/005930.json
# Python
import requests
u = "https://aikstockdata.com/data/public/s/005930_history.json"
rows = requests.get(u, timeout=20).json()["rows"] # [[date, close, volume], ...]
print(rows[-1])
// JavaScript — CORS is open, this works in a browser
const r = await fetch("https://aikstockdata.com/data/public/today.json");
const d = await r.json();
console.log(d.market_index, d.market_breadth);
One caveat we cannot hide: the CDN's bot filter currently rejects the
default Python-urllib user agent with a 403. requests, curl,
httpx and browser fetch all work as-is. If you must use
urllib, send any User-Agent header:
urllib.request.Request(url, headers={{"User-Agent": "my-app"}}).
We would rather tell you than let you hit it.
Licence and citation
Derived from Korean public-sector open data. Free to use, including commercially, with
attribution. Please cite as: 자료: 한국주식데이터(aikstockdata.com) — 원천: 금융감독원 DART · 금융위원회 공공데이터포털. Schemas are published
under /data/public/schemas/.
What is not here
- No real-time or intraday prices. Closing prices only, published the next business day (T+1) by the government source. If you need live quotes, this is the wrong dataset.
- No PER, PBR, target prices or analyst ratings. Those are brokerage-derived; this project publishes only public-sector data.
- No investor-type flows (foreign / institutional / retail).
- No sector classification yet.
- Filing explanations are written in Korean. Field names and structure are English-friendly; the prose is not translated.
This site publishes public data as fact. It is not investment advice and does not recommend buying or selling any security. Source: Financial Services Commission open data portal (prices) and DART, the Financial Supervisory Service filing system.
본 페이지는 공공데이터 사실 제공이며 투자 권유가 아닙니다. 특정 종목의 매수·매도를 권하지 않습니다.