To watch new filings from Japan and South Korea, call the latest filings endpoint once for each country and filter by type. Narwhal returns EDINET and DART filings in one format, with English titles for Japan and English company names for both countries.
Get the latest Japanese filings in English
GET /v1/filings/latest takes a country code and returns the newest filings for it. Japan's come from EDINET, the registry run by the Financial Services Agency. The lang parameter takes en or original, and en is the default. Passing it explicitly makes the request say what language you expect.
curl -s -H "Authorization: Bearer $NARWHAL_API_KEY" \
"https://api.narwhalapi.com/v1/filings/latest?country=JPN&lang=en&limit=2"{
"filings": [
{"id": "jpn:E02800:S100ZB7H", "filed": "2026-11-02", "form": "RINJI", "type": "event", "title": "Extraordinary Report", "company_id": "jpn:E02800"},
{"id": "jpn:E35534:S100ZB6G", "filed": "2026-11-02", "form": "RINJI/A", "type": "event", "title": "Extraordinary Report (amendment)", "company_id": "jpn:E35534"}
]
}Each filing has an id, the date it was filed, a form code, a type and a company_id. Here RINJI is the extraordinary report and RINJI/A is its amendment, and the title is already in English. With lang=original the same two filings carry the titles 臨時報告書 and 訂正臨時報告書. Keep id as your key for a filing, since it is the value the single-filing endpoint accepts and the value you use to remove duplicates between polls. The company_id is the key for the company endpoints.
Get the latest South Korean filings
The same endpoint serves South Korea with country=KOR. Those filings come from DART, the South Korean disclosure registry. The request and the fields are the same as for Japan.
curl -s -H "Authorization: Bearer $NARWHAL_API_KEY" \
"https://api.narwhalapi.com/v1/filings/latest?country=KOR&lang=en&limit=2"{
"filings": [
{"id": "kor:01042711:20261103000062", "filed": "2026-11-02", "form": "주식등의대량보유상황보고서", "type": "ownership", "company_id": "kor:01042711"},
{"id": "kor:00569646:20261103000066", "filed": "2026-11-02", "form": "분기보고서", "type": "quarterly", "title": "분기보고서 (2026.09)", "company_id": "kor:00569646"}
]
}In the responses, the Korean form and title values stay in Korean even with lang=en. The API does not translate them. The type field is language neutral, so use it for filtering. Company names are different: GET /v1/companies/kor:00569646 returns the name as YoungWoo DSP Co.,Ltd., in Latin letters.
Filter by form type
The type parameter on the latest endpoint limits the list to one group of forms. The values are annual, semiannual, quarterly, event, ownership, insider and other. The same names appear in the type field of every filing, so you can also count or filter a result in code.
import json, os, urllib.request
from collections import Counter
API = "https://api.narwhalapi.com"
def get(path):
req = urllib.request.Request(API + path, headers={"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"})
return json.load(urllib.request.urlopen(req))
for country in ("JPN", "KOR"):
filings = get(f"/v1/filings/latest?country={country}&lang=en&limit=200")["filings"]
days = sorted({f["filed"] for f in filings})
print(country, len(filings), "filings,", days[0], "to", days[-1])
print(" ", dict(Counter(f["type"] for f in filings).most_common()))JPN 200 filings, 2026-10-29 to 2026-11-02
{'ownership': 97, 'event': 66, 'semiannual': 33, 'annual': 4}
KOR 200 filings, 2026-10-28 to 2026-11-02
{'ownership': 115, 'event': 70, 'quarterly': 7, 'semiannual': 6, 'annual': 2}The 200 newest Japanese filings run from 2026-10-29 to 2026-11-02, and the 200 newest Korean ones from 2026-10-28 to 2026-11-02. Ownership reports and event reports make up most of both lists, so a watcher that only wants annual and quarterly reports should send type=annual or type=quarterly and read a short list, rather than download 200 rows on every run and discard most of them.
To follow one company, use GET /v1/companies/{company_id}/filings. It accepts type, a form code, filed_from, filed_to and include_amendments. This request asks for the semiannual reports (HANKI) of one Japanese company.
curl -s -H "Authorization: Bearer $NARWHAL_API_KEY" \
"https://api.narwhalapi.com/v1/companies/jpn:E02800/filings?lang=en&form=HANKI&limit=2"{
"id": "jpn:E02800",
"filings": [
{"id": "jpn:E02800:S100YVHZ", "filed": "2026-08-12", "form": "HANKI", "type": "semiannual", "title": "Semiannual Securities Report", "period_end": "2026-12-31"},
{"id": "jpn:E02800:S100WHHZ", "filed": "2025-08-12", "form": "HANKI", "type": "semiannual", "title": "Semiannual Securities Report", "period_end": "2025-12-31"}
]
}form is the registry's own code, so Japanese and Korean codes differ. type is the same set of names for both countries.
Open one filing
GET /v1/filings/{filing_id} returns the details of a single filing. For a Korean quarterly report it adds the fiscal year, the fiscal period, the period end and a link to the DART page.
curl -s -H "Authorization: Bearer $NARWHAL_API_KEY" \
"https://api.narwhalapi.com/v1/filings/kor:00569646:20261103000066?lang=en"{
"id": "kor:00569646:20261103000066",
"company_id": "kor:00569646",
"form": "분기보고서",
"type": "quarterly",
"title": "분기보고서 (2026.09)",
"fy": 2026,
"fp": "Q3",
"period_end": "2026-09-30",
"filed_at": "2026-11-02T15:00:00Z",
"url": "https://dart.fss.or.kr/dsaf001/main.do?rcpNo=20261103000066"
}fy and fp place the report in the company's fiscal calendar, period_end gives the date the reporting period closed, and filed_at gives the filing time in UTC. The list endpoints give only the filing date, so open the filing when you need the exact time. A Japanese filing returns id, company_id, form, type, title and filed_at without a url, so do not rely on a link being present for every filing.
Are South Korean filings available in English?
Partly. Company names come back in English, but the form and title of a Korean filing stayed in Korean in every response, with lang=en and with lang=original. Use type to tell an annual report from an ownership report, and read the original title when you need the exact form.
Japanese filings behave differently: lang=en returns English titles such as Extraordinary Report, and lang=original returns the Japanese ones.
What is the difference between form and type?
form is the code or name the registry uses, such as RINJI in Japan or a Korean report name. type is Narwhal's grouping of those forms into seven names that are the same in every country. Filter by type on the latest endpoint and by form on one company's filings.
An amendment keeps the type of the report it amends. In the Japanese response above, RINJI/A has type event.
How do I avoid seeing the same filing twice?
Store the id of every filing you have handled and skip ids you have seen. An id names one filing, so it works as the deduplication key across polls. Poll once a day, or as often as you need, and keep the limit large enough to cover the gap between polls. The daily data pull guide shows a scheduled script.
Published .