KRX Open API field names, in English

The Korea Exchange publishes daily trading data through an open API. The field names are Korean abbreviations and the documentation is Korean-language, so the first hour withstk_bydd_trd or ksq_bydd_trd usually goes on working out what the columns mean. This page is that hour, written down. We pull both datasets every trading day, so what follows includes the parts the documentation does not mention.

The two datasets

DatasetBoardWhat one row isRows
stk_bydd_trdKOSPIOne row per listed issue, for one trading day, on the main board.943
ksq_bydd_trdKOSDAQThe same shape, for the growth board.1,822

Row counts are what we received for 2026-09-07, counted in the files themselves. They move a little as issues list and delist.

Every field, and what it means

Both datasets return the same fifteen fields. The type column is what the fieldactually arrives as, which is not always what you would expect.

FieldMeaningTypeUnitWorth knowing
BAS_DDBase date — the trading day the row describesstringYYYYMMDDNot a date object and not ISO 8601. Parse it yourself.
ISU_CDIssue code — the six-digit tickerstring—Leading zeros matter. Read it as text, never as a number.
ISU_NMIssue name — the company namestring—Korean only. There is no English name in this feed.
MKT_NMMarket namestring—KOSPI in the first dataset, KOSDAQ in the second.
SECT_TP_NMSection type — the sub-board the issue sits onstring—Empty for most KOSPI rows and filled for KOSDAQ. An empty string, not null.
TDD_CLSPRCClosing price for the trading daystringKRW—
CMPPREVDD_PRCChange against the previous day’s closestringKRWSigned. Arrives with the minus sign inside the string.
FLUC_RTFluctuation rate — the same change as a percentagestring%—
TDD_OPNPRCOpening pricestringKRW—
TDD_HGPRCHigh of the daystringKRW—
TDD_LWPRCLow of the daystringKRW—
ACC_TRDVOLAccumulated trading volume for the daystringshares—
ACC_TRDVALAccumulated trading value for the daystringKRWWon, not thousands of won. The numbers run to ten digits.
MKTCAPMarket capitalisation at the closestringKRWTwelve digits is normal. It will not fit a 32-bit integer.
LIST_SHRSListed sharesstringshares—

Five things that cost us time

None of these are errors in the feed. They are simply not written down anywhere, and each one of them broke something of ours first.

  1. Every value is a string. Prices, volumes and market capitalisation all arrive quoted. If you sum them without casting, you will concatenate them instead. This is true of every numeric field in both datasets.
  2. Market capitalisation overflows a 32-bit integer. A mid-cap issue carries twelve digits in KRW. Use a 64-bit integer or a decimal type. A float will lose the last digits on the largest companies.
  3. Company names are Korean only. There is no English name in this feed, and the six-digit code is the only stable join key. An English name has to come from somewhere else — a regulator filing, or a mapping you maintain.
  4. Missing is an empty string, not null. SECT_TP_NM is blank on most KOSPI rows. A null check will not catch it.
  5. The day is not there on the day. The file for a trading day lands the following evening, Korean time. Weekends and Korean public holidays have no file at all — that is correct behaviour, not a gap to backfill.

What these two datasets do not contain

  • Intraday or tick data — these two datasets are end-of-day only.
  • Order book depth, and any bid or ask.
  • Corporate actions. A split changes LIST_SHRS between two days with nothing to say why.
  • Anything about bonds, funds or derivatives. Those are separate KRX datasets.

We would rather say that plainly than have you discover it after you have built against it.

The licence clause a keyword search will not find

We read the KRX Open API terms of use on 2026-09-09, because we were about to put these values into something we intended to sell. We searched the terms for the Korean word for redistribution, 재배포. It is not in them. That read as "no restriction". It was not. These are the clauses, as they stood on that date:

  • Article 6(2) — the API service may be used for non-commercial purposes only.
  • Article 6 — you must not charge a third party for results derived from use of the service.
  • Article 11 — information received may not be provided to third parties.

This is a dated reading, not legal advice. We publish data; we are not a law firm. Terms change, and ours is one reading on one day. What this page can usefully tell you iswhere to look: the restrictions do not sit under a heading you would search for, which is exactly why we found them late and had to rebuild a collector that was already running.

The open-licence alternative, measured

Comparable end-of-day prices are published on the Korean government open-data portal as dataset 15094808 (Financial Services Commission), marked 이용허락범위 "제한 없음" — no restriction on use. We moved to it. Then we measured both, because a free feed is worth little if the coverage is thinner.

FeedRowsBoards coveredMeasured
stk_bydd_trd943KOSPI only2026-09-07
data.go.kr 150948082,872KOSPI 942 · KOSDAQ 1,823 · KONEX 1072026-10-07

About 3.0× the rows, in one call, because all three boards arrive together — including KONEX, which has no equivalent among the two datasets above. The two figures were measured a month apart on different feeds, so read this as a coverage comparison, not a same-day diff. Board coverage is the part that does not drift.

One field is lost in the move: SECT_TP_NM is not in the portal feed, and we left it out rather than invent it. Two are gained: an ISIN, and an explicit "no trades today" flag.

Two things the row counts told us

Both are restatements of warnings above, with the size attached. A warning you can measure is easier to act on than one you cannot.

  • Leading zeros are the majority case, not an edge case. On 2026-10-07, 1,547 of 2,872 codes (54%) began with a zero. Parse tickers as integers and more than half your universe loses a digit and silently stops joining to anything.
  • A closing price does not mean a trade happened. 134 rows (5%) had no trades at all that day and still carried the previous close. Market capitalisation is listed shares × close, so those rows carry a stale market cap too.

These counts are read from a measured file when this page is built (27 trading days held, 2026-08-27 to 2026-10-07), not typed in. If they look stale, the measurement is stale — which is the honest state of it, and better than a number that cannot go out of date because nobody is checking it.

If you would rather not parse it yourself

We compile Korean, Japanese, Taiwanese and Gulf filings into English panel data under one schema — English field names, English company names, numbers typed as numbers, and every figure carrying the source and the timestamp it came from. It is the same underlying material, with the hour above already spent.

Not investment advice. This page describes a public data interface; it does not reproduce Korea Exchange data, and it does not recommend any security.