Get free API key
Docs menuexpand_more
travel_exploreTry in the API Viewer

Guides

Endpoints

search
appsAll APIs
functionHow metrics are calculated

Data quality

Where every number comes from, and how fresh it is

Which companies, which periods, as of when, and how we check it. The breadth and depth of ZENITH Code’s Japanese equity data, in measured numbers.
4,568Listings (stocks, ETFs, REITs)
93%Stocks with financial metrics
87Endpoints
1,756Automated tests of the API software

Listings and coverage were counted on 2026-10-20 from /stable/stock-list and /stable/industry-benchmarks in the dev environment. Coverage is stocks with a computable ROE (3,745) divided by all stocks (4,014). The endpoint count comes from /openapi.json, and the test count from the API software’s automated tests (a vitest run of the backend).

1. Coverage

We cover 4,568 stocks, ETFs and REITs listed on the Tokyo, Nagoya, Fukuoka and Sapporo exchanges.

domain4,568 listings

4,014 stocks, 491 ETFs and 63 REITs. By exchange: Tokyo 4,454, Nagoya 65, Fukuoka 30, Sapporo 19.

Stocks4,014
ETFs491
REITs63

table_chartFinancial data coverage

Of 4,014 stocks, 3,745 (93%) have an ROE computable from the latest results and 3,772 (94%) a computable PBR. ROE needs both net income and equity, so it is a good proxy for how complete the financial data is.

Stocks with a computable ROE3,745 / 4,014 (93%)
Stocks with a computable PBR3,772 / 4,014 (94%)
DataSourceScope and historyUpdates
Financial statements (P/L, B/S, cash flow, metrics)TDnet earnings releases and EDINET annual reportsExample: Toyota Motor has 13 full years from 2014-03 to 2026-03, plus quarters. Ranges vary by companyDaily (around 16:30 for releases, 19:00 for annual reports)
Dividends (actual, forecast, changes, streaks)TDnet earnings releases and dividend forecast revisionsExample: Mitsubishi Corp. has 41 records since 2013-03. Split-adjusted, with the unadjusted amount alongsideDaily (around 16:30)
Structured annual report data (major shareholders, directors, pay, strategic holdings, subsidiaries, segments, human capital, narrative text)EDINET annual securities reportsPer filed report (once a year). The latest report by default; most endpoints accept a fiscal period for earlier reportsDaily (around 19:00)
Timely disclosures, extraordinary reports, large holdings, eventsTDnet and EDINETDisclosure lists with document IDs and links to the originalsAbout hourly (delivery cache 15 to 30 minutes)
Daily prices (split-adjusted) and price-based metricsExchange price data (adjustments and metrics calculated in-house)From January 2010 (e.g. Toyota Motor from January 4, 2010)Daily (end-of-day, around 16:30)
Listings (stocks, ETFs, REITs)Listed company information4,568 listings (4,014 stocks, 491 ETFs, 63 REITs)Rebuilt Mon to Sat at 16:45 and 19:45
Economic indicators and the Fear & Greed indexFRED (Federal Reserve Bank of St. Louis) and in-house calculationVaries by seriesFRED every 6 hours; Fear & Greed every minute

History lengths are examples measured in the dev environment on 2026-10-20.

2. Field coverage

For key fields: the share of rows with a value, together with the denominator, the period basis and why values are missing.

info

Coverage is the share of values that are present, not a measure of correctness. Blanks are correct for items such as operating income at banks and insurers, ordinary income under IFRS or US GAAP, and the payout ratio in loss-making years. The denominator excludes 218 companies without a full-year result yet (including 186 on TOKYO PRO Market and 25 listed within the last 12 months). The 10-year rate counts company × year cells over each company's last ten full years.

FieldCoverage (latest full year)Last 10 yearsDenominatorPeriod basisMain reasons for missing values
Revenue (incl. operating / ordinary revenue)
revenue
99.3%
99.7%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
  • 14 cases where a revenue-like line (e.g., "business revenue") was not mapped
  • 10 cases not shown by definition (e.g., fiscal-year changes)
Operating income
operatingIncome
96.6%
96.8%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
  • 94 banks/insurers without an operating-income concept (blank is correct)
  • 20 by publication rules (e.g., no non-consolidated values in consolidated fields), 14 missing source
Ordinary income
ordinaryIncome
91.6%
93.5%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
  • 306 IFRS / US GAAP companies have no ordinary-income concept (blank is correct)
  • 11 missing source
Net income attributable to owners
netIncome
99.6%
99.9%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
  • 12 missing source or unmapped
Total assets
totalAssets
99.9%
100.0%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
  • 2 withheld by publication rules
Equity ratio
equityRatio
100.0%
100.0%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
    EPS
    eps
    99.6%
    99.9%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
    • 12 missing source or unmapped
    BPS
    bps
    99.5%
    99.7%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
    • 19 missing source rows
    Dividend per share (actual)
    dividendPerShare
    97.7%
    99.2%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
    • 87 under investigation (e.g., FY Aug 2026 with only the earnings summary filed)
    Payout ratio
    payoutRatio
    85.6%
    86.2%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
    • 435 loss-making periods (EPS ≤ 0) not shown by definition
    • 95 under investigation, 12 missing source
    Operating cash flow
    operatingCashFlow
    99.5%
    99.9%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
    • 17 e.g. earnings summaries without a cash-flow statement
    Investing cash flow
    investingCashFlow
    99.4%
    99.8%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
    • 20 e.g. earnings summaries without a cash-flow statement
    Financing cash flow
    financingCashFlow
    99.0%
    99.6%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
    • 35 e.g. earnings summaries without a cash-flow statement
    ROE
    roe
    98.8%
    99.1%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
    • 32 not shown by definition (fiscal-year change, equity ≤ 0)
    • 12 missing source
    ROA
    roa
    98.9%
    99.4%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
    • 25 not shown by definition (e.g., fiscal-year change)
    • 12 missing source
    Employees (from annual reports)
    employees
    95.3%
    98.1%3,796 listed equities with a latest full-year resultLatest full year (fiscal periods from April 2025)
    • 176 periods whose annual report has not been filed yet (earnings summary only); 99.9% where the annual report exists

    Measured as of 2026-10-20.

    3. Update schedule (JST)

    For each kind of data we define when it should have been updated by, and watch for delays.

    Time (JST)What happens
    Every 15 minutesEach dataset is checked for changes; when the data has changed, its version (X-Data-Version) and point in time (asOf) advance together. Freshness is judged on these values.
    HourlyExpected update for timely disclosures, extraordinary reports and the events feed (flagged as late if not updated 15 minutes after)
    16:30Expected daily update for TDnet-based data (earnings release financials, dividends, prices, profiles)
    16:45 / 19:45 (Mon to Sat)Snapshots for whole-market data (listings, screener, rankings, earnings and dividend calendars, sector comparisons) are rebuilt
    19:00Expected daily update for EDINET-based data (annual report financials, major shareholders, directors, narrative text and more)
    3:15 / 9:15 / 15:15 / 21:15Economic indicators are synced from FRED. Roughly the last three years are re-fetched every time, so retroactive revisions are picked up

    All times are Japan Standard Time. Expected update times are the monitoring threshold (“should have been updated by”); if the source (TDnet or EDINET) publishes late, our update follows.

    4. Freshness you can check

    Response headers and public monitoring endpoints let your code check how current the data is. We track the update time of 72 datasets (a separate count from the number of endpoints or MCP tools).

    HeaderMeaning
    X-Data-VersionDataset version. It advances when the source updates, and a new version switches the delivery cache over
    X-Data-As-OfThe point in time of the data used to build that version (a UTC timestamp; the latest trading date for prices)
    X-DatasetWhich dataset the response came from (same id as in the freshness list)
    X-CacheWhether the delivery cache was hit (HIT / MISS)
    Server-TimingOn a cache miss, a breakdown of processing time (version check, source read and so on)

    monitor_heart/stable/system/freshness and /stable/system/status

    Neither needs an API key. freshness returns, per dataset, the expected update time, asOf, age in seconds and a stale flag; status returns overall health and the number and names of late datasets.

    curl "https://api.zenithcode.net/stable/system/freshness"
    curl "https://api.zenithcode.net/stable/system/status"

    Stale rule: a dataset is stale if asOf is older than the most recent expected update time. Expected times include a grace period of 60 minutes for daily data and 15 minutes for hourly data.

    One freshness row (fetched from the dev environment on 2026-10-19)

    {
      "id": "income-statement",
      "group": "financials",
      "path": "/stable/income-statement",
      "expected": "daily-16:30-JST",
      "ttlSec": 21600,
      "asOf": "2026-10-19T13:24:17.564Z",
      "ageSec": 17886,
      "expectedAt": "2026-10-19T07:30:00.000Z",
      "stale": false
    }

    5. Provenance

    Every response lets you trace which filing a number came from.

    • check_circleEach financial statement row carries provenance (source, document ID, publication time, link to the original PDF). source is tdnet (earnings release) or edinet (annual or quarterly report, etc.). For older periods where the detailed statement is not available and values come from the summary of business results or the earnings release summary, that document is the source and basis: "summary" is set. When different items come from different documents, fieldSources lists the document for each item (for example, revenue from the annual report and operating income from the earnings release). Rows whose source document is not known have provenance null. In a 2026-10-21 sample (40 companies, 2,936 rows with values), 99.9% of rows had a source document and a link to the original.
    • check_circleAnnual-report data such as major shareholders, directors and strategic holdings carries the document ID (docId) and the EDINET URL of the original.
    • check_circleDisclosure lists, dividend changes, dividend policies and shareholder benefits carry the TDnet document ID and a PDF link. Dividend history and stock splits carry no document ID; dividends only carry dataSource (where the data was ingested from). Prices and computed metrics are not built from documents, so they have no source document.
    • check_circleMCP returns the same responses, so you can trace a number in an AI answer back to the original filing.
    • check_circleLinks to original PDFs go through ZENITH Code (/stable/filing-document, API key required). When a PDF is not available the link is null; we do not return links that cannot be opened.
    • check_circleCorrections: when a company files a correction, we replace values with the newer filing. In financial statements, categories replaced by an amended earnings release carry amended: true and the amending document (amendedDocId, amendedArchiveUrl) in provenance; docId stays the original. For annual-report data, docTypeCode 130 tells you the values come from an amended report. When the data platform fixes an ingestion error, values are also replaced; the API does not expose a flag or the previous value for these fixes. Values ZENITH Code withholds as obvious scale errors are returned as null with a reason (sharesNote, suppressedFields).

    From an income-statement sample response (Toyota Motor)

    {
      "symbol": "7203",
      "fiscalPeriod": "2026-03",
      "provenance": {
        "source": "edinet",
        "docId": "S100Y8NY",
        "announcedAt": "2026-06-10T06:33:00Z",
        "sourceUrl": "https://disclosure2.edinet-fsa.go.jp/WZEK0040.aspx?S100Y8NY",
        "archiveUrl": "https://api-dev.zenithcode.net/stable/filing-document?docId=S100Y8NY&type=pdf"
      }
    }

    6. Statement hierarchy (the tree as filed)

    /stable/financial-statement-full returns the balance sheet, income statement, cash-flow statement, statement of changes in equity (SS), comprehensive income (CI) and the kessan tanshin (earnings summary) summary as the presentation tree of the filing (XBRL). You can also check which line a standardized value came from.

    merge_typeAccount-name normalization

    Line items (XBRL tags) that differ by company and accounting standard are mapped to common standard items. Standard and Short fields use these normalized values, and you can trace each one back to its filing row through the as-filed tree below and the standard key (master_key). Company-specific items that cannot be mapped are kept in their as-filed form.

    308Standard items
    about 4,700XBRL tag names mapped
    71Items calculated or derived from normalized values

    Counts of items with disclosure tags mapped in our normalization definitions as of 2026-10-23. This does not mean every company and period has every item (see the coverage table above).

    Reproduce the statement exactly as filed

    Order (sort), depth, parent (parent_key) and line names (label_ja) match the filing, so you can rebuild the table the company published.

    Company-specific line items are kept

    Industry- or company-specific lines (e.g. receivables related to financial services) are filed under the company’s own extension tags. Lines that disappear in standardized fields are returned here with their original_tag.

    Check subtotals

    With is_subtotal and parent_key you can add up child lines and compare them with the subtotal line — useful for checking ingestion and signs, or as the basis of your own aggregation.

    Linked to standardized fields

    Lines with a master_key map to standardized fields in income-statement, balance-sheet-statement and so on, so you can trace which line a standardized value came from.

    FieldMeaning
    depthDepth in the tree; 1 is the top level (Summary and SS may start at 0).
    parent_keyThe tree_tag of the parent line; null at the top level.
    sortDisplay order in the filing; sort ascending to get the original order.
    is_abstractA heading-only line; it has no value, so value is null.
    is_subtotalA total or subtotal line; heading lines are also true.
    original_tagXBRL tag in the filing. Tags starting with jppfs_cor_, jpigp_cor_, jpcrp_cor_ etc. are standard taxonomy; others (e.g. tse-qcediffr-72030_…) are the company’s extension tags.
    label_jaThe line name given by the company; label_en is the English name and may be empty.
    master_keyThe mapped ZENITH Code standardized field (e.g. cash_and_equivalents); null for company-specific lines and similar.
    context_idThe XBRL context (instant or duration), e.g. CurrentQuarterInstant (quarter end) or CurrentYTDDuration (year to date); null on headings.
    sourceHow the value was obtained: xbrl is taken from the filing, calculated is a subtotal filled in by calculation.
    valueThe amount in JPY. Ratios in the Summary are 0–1 decimals (0.104 in the API, 10.4% on screen). Outflows are negative, as disclosed.

    Example: the first lines of the income statement and balance sheet of 7203, 2026-06 Q1 (sample response fetched on 2026-10-23). Amounts are in ¥100 millions.

    Income statement (PL)

    Line (depth, tag)Amount (¥100 mn)
    営業収益HeadingExtension
    depth=1 · tse-qcediffr-72030_SalesRevenuesIFRSAbstract_pl
    —
    Sales of productsExtension
    depth=2 · tse-qcediffr-72030_SalesOfProductsIFRS_pl
    121,423
    Financing operationsExtension
    depth=2 · tse-qcediffr-72030_FinancingOperationsIFRS_pl
    13,831
    Total net revenuesSubtotalExtension
    depth=2 · tse-qcediffr-72030_TotalNetRevenuesIFRS_pl
    135,254
    売上原価並びに販売費及び一般管理費HeadingExtension
    depth=1 · tse-qcediffr-72030_CostsAndExpensesIFRSAbstract_pl
    —

    Balance sheet (BS)

    Line (depth, tag)Amount (¥100 mn)
    資産Heading
    depth=1 · jpigp_cor_AssetsIFRSAbstract_bs
    —
    Current AssetsHeading
    depth=2 · jpigp_cor_CurrentAssetsIFRSAbstract_bs
    —
    Cash and Cash Equivalentscash_and_equivalents
    depth=3 · jpigp_cor_CashAndCashEquivalentsIFRS_bs
    103,431
    Notes and Accounts Receivablenotes_and_accounts_receivable
    depth=3 · jpigp_cor_TradeAndOtherReceivablesCAIFRS_bs
    40,196
    Receivables related to financial servicesExtension
    depth=3 · tse-qcediffr-72030_ReceivablesRelatedToFinancialServicesCAIFRS_bs
    140,863

    Sample responses keep only the first few items of long arrays, so the tree is cut short; real responses contain every line. “Extension” marks a company-specific tag; a tag such as cash_and_equivalents shows the mapped standard field (master_key).

    Related: /stable/financial-statement-full · How metrics are calculated

    7. Testing and verification

    Both the API’s shape and its data are protected in two ways. First, automated tests of the ZENITH Code API and MCP software itself: 1,756 tests in 74 files, all run before each deploy (as of 2026-10-20). Second, checks in the data pipeline: at 19:20 JST every business day, 179 checks run across the data for every stock, and each ingested filing goes through 7 separate checks. Items 1–5 below are software tests; item 6 is a check on live data.

    OpenAPI completeness

    Checks, against the /openapi.json actually served, that every public endpoint has auth, English and Japanese descriptions, a token cost, a freshness registration and a response schema. Also checks that MCP tools only use endpoints and parameters that exist.

    Schema cross-check

    Compares the columns the API reads with the production database’s column list. A single non-existent column would break every endpoint reading that table, so the definitions are pinned to the audited column list.

    Every route

    Sends a representative request to every endpoint and checks the success response, required-parameter validation, the empty-data response, CSV output and Japanese labels.

    MCP end-to-end

    Sends tool listing and tool calls to the MCP server and checks that calls go through real auth and quota to the right endpoint, and that errors are flagged correctly.

    Freshness logic

    Tests the expected-time, grace and versioning calculations for daily, hourly, weekly and every-n-hours schedules.

    Live-data smoke test (85 endpoints)

    Calls 85 endpoints against live data in the dev environment and lists the HTTP status, row count, cache status, data version and asOf, and response time. Every public endpoint is covered, including shareholder benefits, dividend policies and document files (filing-document), except the two system endpoints that return service status and freshness.

    ruleHow we handle the data

    • check_circleDividends and prices are split-adjusted, and dividends also carry the unadjusted amount (rawAmount).
    • check_circleDividend streaks are calculated in-house from annual dividends, and the response says whether they match the separately counted value (matchesReported).
    • check_circleExtreme outliers are excluded or set to null so they do not distort comparisons and rankings (for example, rankings exclude ROE above 100%).
    • check_circleItems a company does not disclose are returned as null, never estimated.
    • check_circleWe only deliver public disclosures (TDnet and EDINET), data from sources whose rights we have confirmed, and metrics we calculate ourselves.

    8. Current limitations

    What the data does not do, and what to keep in mind.

    info

    Prices are end-of-day only; there are no real-time intraday prices. Price history starts in January 2010.

    info

    How far back financials and dividends go varies by company. Recently listed companies start from their post-listing disclosures.

    info

    Annual-report data (major shareholders, directors, human capital and so on) updates when the yearly report is filed, not every quarter.

    info

    Errors or corrections in the source data (TDnet, EDINET) can affect our data.

    Figures on this page were measured on 2026-10-20. We do not warrant the accuracy, completeness or timeliness of the data. Investment decisions are your own responsibility (see the Terms of Service).

    conveyor_beltHow the data is made, in detail

    We have written up where our shareholder-benefit and dividend-policy data comes from and how it is checked before it is published.

    Read how benefits and dividend policies workarrow_forward

    See the data for yourself

    The endpoint list and sample responses are open without signing in.