API documentation
Connect to Korean company financials from DART. Start with a request, find covered companies, and use the field reference to handle missing values and trace reported figures to their filings.
What is included
The Standard API provides eleven source-verified reported financial metrics and five separately calculated key metrics from DART filings. It also includes company identity, reporting periods, coverage, statement lines, and filing links. Coverage is limited to Core 300 plus AI Value Chain companies, retaining the latest eight reporting slots. Access is currently a manually approved pilot for server-side integrations.
Public subscriptions are coming soon; checkout is not available yet. Get an API launch notification. Existing pilot users can find access dates and billing details in Plan & billing.
Base URL and versioning
https://www.koreantickers.comAll customer-facing Standard endpoints are under /v1. Responses use JSON and include an apiVersion field for the schema contract.
GET https://www.koreantickers.com/v1/companies/{ticker}/fundamentals
Accept: application/jsonAuthentication
Send your API key in one of the accepted request headers. Keep keys server-side and rotate any key that is no longer tied to an active integration.
Authorization: Bearer <api-key>
x-api-key: <api-key>Entitlement rules
Pilot keys are provisioned manually. An active standard_fundamentals grant gives the same Standard endpoint family and shared quota to every key linked to that grant. A valid key without a route's required entitlement receives 403 entitlement_required.
First request
Store your active key in the server environment as KOREANTICKERS_API_KEY. This example requests Samsung Electronics (005930); fundamentals is the compact starting point for most integrations. The JavaScript example runs on your server, not in a browser.
curl https://www.koreantickers.com/v1/companies/005930/fundamentals \
-H "Authorization: Bearer $KOREANTICKERS_API_KEY" \
-H "Accept: application/json"const response = await fetch(
"https://www.koreantickers.com/v1/companies/005930/fundamentals",
{
headers: {
Authorization: `Bearer ${process.env.KOREANTICKERS_API_KEY}`,
Accept: "application/json"
}
}
);
if (!response.ok) {
const error = await response.json();
throw new Error(error.error?.code ?? "koreantickers_error");
}
const data = await response.json();
const revenue = data.financials.metrics.revenue;
if (revenue.available) console.log(revenue.amount);Find covered companies
GET /v1/companies returns the full Core 300 plus AI Value Chain membership list. It is included in the same Standard plan, uses the same authentication and shared quota, and takes no query parameters or pagination.
curl https://www.koreantickers.com/v1/companies \
-H "Authorization: Bearer $KOREANTICKERS_API_KEY" \
-H "Accept: application/json"This is a versioned coverage snapshot, not a continuously ranked list. Companies in both groups appear once. The website may show additional companies that are not available through the API; use this directory before scheduling a data refresh.
| Response field | Meaning |
|---|---|
apiVersion | standard-universe.v1 |
universeId, asOfDate, collectedAt | Coverage version, snapshot basis date, and collection timestamp. |
historyPeriods | 8: the maximum retained reporting slots per company. |
counts | Core, AI Value Chain, additional AI-only, and total unique company counts. |
companies[] | ticker, nameKr, nullable companyName, market, coreRank, aiValueChain, and includedBy. |
membershipPolicy | Membership changes are published as a new coverage version. |
Company endpoints
After choosing a ticker from the company directory, use these 7 company-level GET endpoints. All are included in Standard and share the same access grant and quota.
| Endpoint | Use | Response | Parameters |
|---|---|---|---|
fundamentals GET /v1/companies/{ticker}/fundamentals | Default compact company object for dashboards, screening systems, and research tools. | company, metricProfile, readiness, financials.metrics, period coverage, and source counts. | No query parameters. |
financial_facts GET /v1/companies/{ticker}/financial-facts | Eleven source-verified reported metrics across up to the latest eight reporting slots. | financialFacts[], rowCount, totalRows, distinctMetrics, reportingPeriods, and latestPeriod. | limit (default 500, max 2,000), offset (max 100,000). |
periods GET /v1/companies/{ticker}/periods | Discover the retained reporting history before requesting facts or statement lines. | periods[], source receipts and URLs, retentionPolicy, historyWindow, updatedAt, and deterministic pagination. | limit (default 100, max 500), offset (max 100,000). |
coverage GET /v1/companies/{ticker}/coverage | Inspect ticker-scoped dataset availability and source timestamp maxima before an integration sweep. | Null-safe coverage.datasets[], aggregate provenance, collection/update timestamps, and the current history window. | No query parameters. |
indicators GET /v1/companies/{ticker}/indicators | Five calculated key financial metrics, separate from reported facts. | financialIndicators[], metric definitions, formulas, input provenance, and explicit null reasons. Schema: dart-key-financials.v1. | limit (default 100, max 500), offset (max 100,000). |
statements GET /v1/companies/{ticker}/statements | Raw DART statement lines for audit, reconciliation, and advanced analysis. | sections[], statementLines[], rowCount, and totalRows. | limit (default 500, max 2,000), offset (max 100,000). |
filings GET /v1/companies/{ticker}/filings | Filing chronology with receipt numbers, report names, filing dates, filer names, and source links. | filings[], pagination, rowCount, and totalRows. | limit (default 100, max 500), offset (max 100,000). |
Path and query parameters
| Name | Location | Format | Notes |
|---|---|---|---|
ticker | path | ^[0-9A-Z]{6}$ | Six-character alphanumeric Korean listed-company ticker, e.g. 005930; lowercase input is normalized to uppercase. |
limit | query | integer | Facts and statements: default 500/max 2,000. Indicators, periods, and filings: default 100/max 500. The company directory is not paginated. |
offset | query | integer | Supported on facts, periods, indicators, statements, and filings; default 0/max 100,000. |
Response shape
Successful responses include apiVersion, generatedAt, and requestId. Company-level endpoints also identify the selected ticker and Standard product. The fundamentals example below is abbreviated; use the OpenAPI schema for each endpoint's full shape.
The company directory uses standard-universe.v1 and returns coverage metadata with companies[], rather than a single ticker or product object. Calculated indicators use dart-key-financials.v1; the other company-level endpoints use dart-fundamentals.v0.2.
Company response envelope
apiVersionBasic schema: dart-fundamentals.v0.2; calculated indicators: dart-key-financials.v1.
generatedAtResponse generation timestamp in ISO-8601 format.
requestIdRequest identifier for support and debugging.
productstandard_fundamentals, Standard API label, and a false context requirement flag.
tickerSix-character alphanumeric Korean stock ticker.
Company
tickerSix-character alphanumeric listed ticker.
corpCodeDART corporation code.
companyNameEnglish customer-facing company name.
listedNameKoKorean listed name for source matching.
marketKOSPI, KOSDAQ, or available market segment.
marketCapKrwOptional daily KRW market-cap reference; this is not a live or intraday quote.
marketCapAsOfdata.go.kr basis date for marketCapKrw in YYYYMMDD form.
marketCapSourceExact provider/service operation for marketCapKrw.
marketCapCollectedAtSource-row collection time in Unix milliseconds.
Latest period
fiscalYearFiscal year for the selected DART period.
fiscalQuarterQuarter number, or null for annual-only contexts.
reportCodeDART report code such as 11013, 11012, 11014, or 11011.
fsDivCFS for consolidated financial statements or OFS for separate financial statements.
rceptNoDART receipt number used to trace the filing.
sourceEndpointSource endpoint identifier; this is not necessarily a clickable URL.
Abbreviated historical example, not a current-data quote. The full response retains all eleven metric keys.
{
"apiVersion": "dart-fundamentals.v0.2",
"dataContract": "dart-reported-financials.v1",
"generatedAt": "2026-06-05T04:24:44.473Z",
"requestId": "7f98db8b-...",
"product": {
"key": "standard_fundamentals",
"label": "Standard API",
"requiresContext": false
},
"ticker": "005930",
"company": {
"ticker": "005930",
"corpCode": "00126380",
"companyName": "Samsung Electronics Co., Ltd.",
"listedNameKo": "삼성전자",
"market": "KOSPI",
"marketCapKrw": null,
"marketCapAsOf": null,
"marketCapSource": null,
"marketCapCollectedAt": null
},
"financials": {
"latestPeriod": {
"fiscalYear": 2026,
"fiscalQuarter": 1,
"reportCode": "11013",
"reportName": "1Q Report (2026)",
"fsDiv": "CFS",
"fsName": "Consolidated financial statements",
"periodEnd": "2026-03-31",
"rceptNo": "20260515002181",
"filingDate": "20260515",
"sourceEndpoint": "xbrlIfrsFastPath",
"currency": "KRW"
},
"dataCompleteness": {
"accountIdCoveragePct": 72.1,
"latestCoreMetricCoveragePct": 95.8,
"latestHardMetricCoveragePct": 100,
"missingHardMetrics": []
},
"metrics": {
"revenue": {
"metricKey": "revenue",
"available": true,
"amount": 133873444000000,
"currency": "KRW",
"unit": "currency",
"valueSource": "reported",
"sourceAccountId": "ifrs-full_Revenue",
"sourceAccountName": "Revenue",
"missingReason": null,
"missingReasonDetail": null
}
}
}
}Metric profiles and readiness
The response shape and eleven fundamentals keys stay fixed across issuers. metricProfile changes only the required readiness set, so banks, holding companies, and SPACs are not penalized for operating-company fields that are not meaningful to their profile. Calculated indicators do not determine basic-fact readiness.
| Key | Label | Required reported metrics |
|---|---|---|
general | General company | revenue, operating_income, net_income, cash_and_equivalents, total_assets, total_liabilities, total_equity |
financials | Financial institution | net_income, total_assets, total_liabilities, total_equity |
investment_holding | Investment or holding company | operating_income, net_income, cash_and_equivalents, total_assets, total_liabilities, total_equity |
spac | Special purpose acquisition company | net_income, cash_and_equivalents, total_assets, total_liabilities, total_equity |
Null handling
A missing metric is not an API error. Metric keys stay present so customers can use one schema across companies. Check available before reading amount.
{
"metricKey": "operating_cash_flow",
"available": false,
"amount": null,
"missingReason": "source_not_reported",
"missingReasonDetail": "The selected DART statement scope does not report this line item for the selected period.",
"currency": null,
"unit": null,
"valueSource": null,
"sourceAccountId": null,
"formulaKey": null
}| Reason | Meaning |
|---|---|
not_applicable_for_industry | The metric is outside the issuer profile's required operating-company set, such as selected financial-institution or SPAC fields. |
source_not_reported | The selected DART statement scope does not report this line item for the selected period. |
source_reported_in_other_scope | The line appears in another scope, usually standalone versus consolidated. |
source_reported_but_not_mapped | The source line appears to exist but no normalized value is available yet. |
derived_inputs_missing | A derived metric was not calculated because required input metrics are unavailable. |
no_selected_period | No Standard source period is available for the ticker. |
Rate limits
Limits apply to an access grant and are shared by every linked key and endpoint, including the company directory. Response headers are authoritative for the current request and may differ from the default plan values. Daily windows reset at midnight Korea Standard Time; use headers to manage queues and retries.
Customer usage is counted globally in fixed-minute and KST-day windows. If the metering service is unavailable, requests return 503 rate_limit_store_unavailable with Retry-After instead of proceeding without metering. Reaching a limit does not trigger an automatic overage charge.
Quota is reserved after a credential and active grant pass authentication but before endpoint validation and data work. That authenticated attempt therefore counts even if later processing returns a 4xx or 5xx response. Requests rejected before reservation—such as 401, 403, an already exhausted 429, or metering-store 503—do not consume another slot. Use the returned rate-limit headers as the authoritative result.
x-ratelimit-limit: 120
x-ratelimit-remaining: 118
x-ratelimit-reset: 1780633564
x-ratelimit-daily-limit: 3000
x-ratelimit-daily-remaining: 2868
x-ratelimit-daily-reset: 1780671600
x-ratelimit-scope: globalCaching and stored copies
Authenticated responses are delivered with cache-control: private, no-cache, no-store, max-age=0, must-revalidate and CDN no-store headers. Do not place raw responses in a shared intermediary cache. Approved pilot users may retain facts only for the use permitted by their pilot agreement and the Terms; raw bulk redistribution requires written permission.
Errors
Error responses use HTTP status for broad handling and a stable error.code for programmatic handling. The requestId should be included when reporting an issue.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_ticker | Ticker is not a six-character alphanumeric Korean stock code. |
| 400 | invalid_parameter | A query parameter is malformed, unsupported, or outside its documented range. |
| 401 | unauthorized | API key is missing or invalid. |
| 403 | entitlement_required | The valid key does not carry the entitlement required by the requested endpoint. |
| 403 | access_inactive | The key's access grant is pending, past due, suspended, cancelled, expired, or outside its active dates. |
| 404 | ticker_not_found | No Standard API company record is available for the ticker. |
| 404 | ticker_outside_coverage | The ticker is outside the API company directory; website coverage may be broader. |
| 429 | rate_limit_exceeded | The access grant has reached its minute or daily request limit. |
| 500 | internal_error | The request failed after authentication; retry later and report the requestId if it persists. |
| 503 | api_key_not_configured | Server-side API key configuration is unavailable. |
| 503 | api_key_store_unavailable | The configured API key store is temporarily unavailable. |
| 503 | rate_limit_store_unavailable | Grant-level paid API metering is unavailable; the request fails closed with Retry-After. |
| 503 | financial_store_unavailable | The Standard financial-period serving store is unavailable. |
| 503 | history_window_pending | The company's latest eight-period dataset is being validated; retry later. |
{
"error": {
"code": "unauthorized",
"message": "Send an API key with Authorization: Bearer <key> or x-api-key.",
"requestId": "31bedab6-64ca-464a-8906-a5e07b6132af"
},
"generatedAt": "2026-06-05T04:25:01.972Z"
}Freshness
Standard API data is filing-backed. It updates after DART filings are collected and normalized, not on a quote-feed cadence, and the manual pilot has no guaranteed publication-to-API latency. generatedAt is the response time; numeric fetchedAt and updatedAt fields are Unix milliseconds when present. Use latestPeriod, rceptNo, sourceUrl, and the source timestamps to detect revisions.
Use /periods to discover the currently retained history window and /coverage to inspect ticker-scoped dataset counts and timestamp maxima before a scheduled refresh. A dataset row count is null when its serving table is unavailable, zero only when the table was checked and has no rows for that ticker, and never converted into an invented data value.
Standard retains up to the latest eight fiscal reporting quarter slots per ticker: Q1, Q2/H1, Q3/9M, and Q4/annual, with CFS and OFS sharing one slot. Source statements may be cumulative or annual, so this does not promise eight standalone quarterly statements. After a new complete slot is published and validated, older normalized rows roll out of the eight-slot window. Read retentionPolicy and historyWindow.logicalPeriodCount on /periods or /coverage; Standard is not a bulk or long-term archive.
Provenance
Source lineage is period-aware. Reported values include DART account fields when available; derived values include a formula key and should be identified as Korean Tickers normalized calculations. Preserve the required source attribution and the receipt number or DART source URL supplied with period or row provenance when presenting a filing-derived number.
| Field | Use |
|---|---|
rceptNo | DART filing receipt number for source trace. |
sourceUrl | Clickable DART filing viewer URL when available. |
reportCode | DART report type, such as quarterly, half-year, third-quarter, or annual. |
fsDiv | Consolidated or separate statement scope. |
unit | currency, pct, or ratio. Monetary rows use unit currency; the ISO code remains in currency. |
sourceAccountId | DART/XBRL account ID when the value is reported. |
sourceAccountName | Raw source account label retained for lineage; it may be Korean. |
accountLabelKo | Raw Korean line label or official Korean taxonomy label when available. |
accountLabelEn | Official OpenDART English label when matched, otherwise a canonical or statement-scoped provider fallback. accountLabelSource identifies nonofficial provider labels. |
accountLabelSource | Identifies official English line, official taxonomy, canonical metric, account-ID, or raw-source fallback. |
formulaKey | Calculation identifier for derived metrics. |
formulaExpression | Human-readable canonical expression for a derived row when defined. |
mappingBasis | How the canonical metric was mapped, such as account ID, source label, indicator code, or derived formula. |
sourceLineKeys | Statement line keys contributing to the normalized fact. |
derivationInputs | Canonical input metric keys used by a derived fact. |
metricDefinitionVersion | Version of the canonical metric definition used for the row. |
valueSource | reported for basic financial facts; derived only in the separate calculated indicators response. |
confidence | Internal confidence score exposed for source-aware integrations. |
English-label precedence is explicit: exact official English OpenDART line, latest official English taxonomy label, canonical metric label, then account-ID/source fallback. Raw Korean statement, account, and detail labels stay in separate source fields. The API does not label machine-translated raw account text as an official source label.
Unit semantics are separate from currency. Monetary facts use unit=currency plus the source ISO currency code. Percentage-point and ratio-multiple facts use unit=pct or unit=ratio with currency=null. The API does not imply currency conversion.
Metric catalog
Fundamentals returns 11 reported metrics for the selected period. Financial-facts returns the same 11 metrics across retained periods. Neither endpoint substitutes synthetic totals or calculated ratios for reported values.
The machine-readable catalog defines every metric label, category, statement family, unit, duration, allowed value sources, derivation formula, and source-label policy.
Income statement
revenueoperating_incomepretax_incomenet_incomeBalance sheet
total_assetstotal_liabilitiestotal_equitycash_and_equivalentsCash flow
operating_cash_flowinvesting_cash_flowfinancing_cash_flowCalculated key financial metrics
All five use percentage points and verified DART inputs. Quick ratio excludes inventory from current assets. ROE uses annual net income and average total equity, not parent-only equity or TTM earnings. Definitions may differ from other services. Missing or incompatible inputs produce null.
operating_income / revenue * 100net_income / revenue * 100total_liabilities / total_equity * 100(current_assets - inventory) / current_liabilities * 100annual_net_income / ((prior_year_end_total_equity + current_year_end_total_equity) / 2) * 100Product boundaries
Standard API is a DART-derived fundamentals product. It is not a market-data, research-report, or advice product.