Public data API
Everything this site publishes about a company — its history, the
management decisions that set its course, the presidents who made
them, and results running back decades — is also published as
static JSON. There is no key and no authentication:
fetch any path below with a plain GET. The files are flat
objects on a CDN, so call them as often as you need.
One page, one endpoint. Each public page of the site
has exactly one API behind it, and nothing has an API without a page.
Where a page carries several independent tables it is split by
section, one endpoint each: the results page has six sections, so
financials.json returns the three most recent years as a
summary and the way in, and six files under
/api/{stock_code}/financials/ each hold ten years of
one section. Ten JSON files and two CSV files per company, plus three
that span the archive.
Individual reading — one decision, one president — is not copied into
an endpoint of its own. The API returns html_url, an
absolute URL, and you read it on the page. Apart from
company.json and the section list in
financials.json, which are indexes and nothing else, a
response links only to pages.
The archive covers Japanese listed companies. Narrative fields — histories, commentary, event descriptions, shareholder and segment names — are written in Japanese; the descriptive metadata around them is in English. Translate the content with an LLM as needed.
Response schemas may change without notice. This is deliberate: agents reading these files are expected to interpret them through an LLM rather than a fixed parser, and to adapt.
Endpoints
{stock_code} is a company's four-digit Tokyo Stock
Exchange code. Every example below resolves it to 7974 —
Nintendo — so each link can be fetched as it stands. Relative paths
are against https://the-shashi.com.
| Method | Path | Returns | Scope |
|---|---|---|---|
| GET | /api/companies.json → /api/companies.json | All companies | Global |
| GET | /api/decisions.json → /api/decisions.json | All management decisions | Global |
| GET | /api/api-manifest.json → /api/api-manifest.json | Endpoint definitions | Global |
| GET | /api/{stock_code}/company.json → /api/7974/company.json | Company index | Per company |
| GET | /api/{stock_code}/history.json → /api/7974/history.json | History, long-term results and decisions | Per company |
| GET | /api/{stock_code}/ceo.json → /api/7974/ceo.json | Presidents | Per company |
| GET | /api/{stock_code}/financials.json → /api/7974/financials.json | Results summary + section index | Per company |
| GET | /api/{stock_code}/financials/segment.json → /api/7974/financials/segment.json | Sales breakdown, ten years | Per company |
| GET | /api/{stock_code}/financials/pl.json → /api/7974/financials/pl.json | Income statement, ten years | Per company |
| GET | /api/{stock_code}/financials/cf.json → /api/7974/financials/cf.json | Cash flow, ten years | Per company |
| GET | /api/{stock_code}/financials/bs.json → /api/7974/financials/bs.json | Balance sheet, ten years | Per company |
| GET | /api/{stock_code}/financials/employee.json → /api/7974/financials/employee.json | Workforce, ten years | Per company |
| GET | /api/{stock_code}/financials/stock.json → /api/7974/financials/stock.json | Shares and share price, ten years | Per company |
The common envelope
Every response opens with the same keys, before any payload. They come first so that a file still says what it is once it has been truncated, cached or detached from its URL. Character encoding is not declared: JSON is UTF-8 by definition.
| Key | Type | Meaning |
|---|---|---|
spec_version | string | Envelope generation. Currently 3. |
endpoint | string | Which endpoint this file is an instance of — company, history, ceo, financials, and the six sections financials-segment, financials-pl, financials-cf, financials-bs, financials-employee, financials-stock. |
stock_code | string | The four-digit Tokyo Stock Exchange code. Absent on the three global endpoints. |
company_name | string | Registered Japanese name. Absent on the three global endpoints. |
content_lang | string | BCP 47 language of the content itself (titles, events, narrative). ja throughout. |
meta_lang | string | BCP 47 language of the descriptive metadata (labels, descriptions). en throughout. The two differ by design. |
canonical_url | string | The human-readable page this data belongs to. Cite this URL, not the JSON. A section endpoint carries the anchor of its section on that page. |
api_url | string | This file's own path. |
updated | string (date) | When the content last changed — not when the file was last regenerated. |
license | string | © 2026 Yutaka Sugiura. All rights reserved. |
attribution | string | Suggested citation line. If you surface this data to a reader, show it with a link to canonical_url. |
source | object | Provenance of the numbers. Present on financials.json and each financials/*.json, and on the long-term series in history.json; absent where the text carries its citations inline. |
On the numeric endpoints the envelope carries source,
which says where the figures came from:
| Key | Type | Meaning |
|---|---|---|
source.primary | string[] | The primary sources behind the file, in Japanese — securities reports, company yearbooks and the like. Where rows carry their own source column it is computed from the rows actually used. |
source.extraction | string | How the source became data, e.g. machine extraction from EDINET XBRL. |
source.row_field | string | Name of the per-row field holding that row's own source. Prefer it over primary when attributing a single figure. |
source.caveat | string | What to watch for in these numbers — changing units, disclosure-segment breaks, consolidation scope. |
A worked example
GET https://the-shashi.com/api/7974/company.json
— the envelope, the profile, the pages as absolute URLs, then the
endpoints that are populated. Trimmed here; the live file lists every
page.
{
"spec_version": "3",
"endpoint": "company",
"stock_code": "7974",
"company_name": "任天堂",
"content_lang": "ja",
"meta_lang": "en",
"canonical_url": "https://the-shashi.com/tse/7974/",
"api_url": "/api/7974/company.json",
"updated": "2026-09-06",
"license": "© 2026 Yutaka Sugiura. All rights reserved.",
"attribution": "The社史 (the-shashi.com) — https://the-shashi.com/tse/7974/",
"profile": {
"company_color": "#E60012",
"industry": "service",
"industry_detail": "service_game_company",
"found": { "year": 1889, "location": "京都府京都市", "founder": "山内房治郎" },
"listing": { "listed_year": 1962, "delisted_year": null, "unlisted": false },
"old_name": "任天堂骨牌"
},
"pages": [
{ "key": "top", "title": "任天堂の歴史", "html_url": "https://the-shashi.com/tse/7974/" },
…
],
"resources": {
"history": { "is_active": true, "url": "/api/7974/history.json", "html_url": "https://the-shashi.com/tse/7974/decisions/", "format": "json", "chars_ja": 61842 },
"ceo": { "is_active": true, "url": "/api/7974/ceo.json", "html_url": "https://the-shashi.com/tse/7974/ceo/", "format": "json", "chars_ja": 17930 },
"financials": { "is_active": true, "url": "/api/7974/financials.json", "html_url": "https://the-shashi.com/tse/7974/current/", "format": "json", "chars_ja": 9204 },
"financials-pl": { "is_active": true, "url": "/api/7974/financials/pl.json", "html_url": "https://the-shashi.com/tse/7974/current/#metrics-pl", "format": "json", "chars_ja": 11376 },
…
}
} Response shapes
What each endpoint carries beyond the common envelope. Fields that can
be absent are marked as such — a company is only as complete as its
filings, and null means the year was not disclosed, never
that the figure was zero.
/api/companies.json
The first call to make. Carries the public endpoint catalog and a minimal index of every company in the archive, in one request. Follow company.json for the detail of any one company.
Try it — https://the-shashi.com/api/companies.json
| Key | Type | Meaning |
|---|---|---|
version | string | API generation. Currently 3. |
base | string | https://the-shashi.com — prefix for every relative path in the response. |
endpoints[] | object[] | The endpoint catalog: id, method, path, label, description, scope (global | company), format (json | csv). This page is a reading of that catalog. |
contents[] | object[] | One entry per company: stock_code, name, name_en, industry, industry_detail. |
/api/decisions.json
Every published management decision across every company, one row each. The row holds no body text and points at no other API file: read the decision on the page at html_url. Use it to find a decision; use the page to read it.
Try it — https://the-shashi.com/api/decisions.json
| Key | Type | Meaning |
|---|---|---|
count | number | Decisions in the index. |
company_count | number | Companies represented. |
decisions[] | object[] | stock_code, company_name, title, year, type, html_url. |
decisions[].type | string | Classification — founding, m_and_a, restructuring, capital, alliance and so on. |
decisions[].html_url | string | Absolute URL of the page, https://the-shashi.com/tse/{stock_code}/decisions/{slug}/. There is no per-decision endpoint. |
/api/api-manifest.json
The definition of every endpoint in this API, on its own. The same catalog companies.json carries inline, served separately so a client can refresh the shape of the API without pulling the company index.
Try it — https://the-shashi.com/api/api-manifest.json
| Key | Type | Meaning |
|---|---|---|
version | string | API generation. |
base | string | https://the-shashi.com. |
endpoints[] | object[] | id, method, path, label, description, scope, format — one entry per endpoint, paths still templated on {stock_code}. |
/api/{stock_code}/company.json
What exists for this company and where it lives — the profile, the public pages as absolute URLs, and which of the ten JSON and two CSV endpoints are populated. It carries no content of its own; read it to decide what to fetch.
Try it — https://the-shashi.com/api/7974/company.json
| Key | Type | Meaning |
|---|---|---|
version | string | API generation. |
profile | object | company_color, industry, industry_detail, published, updated, old_name, name_kana, old_name_kana. |
profile.found | object | year, location, founder — the founding record. |
profile.listing | object | listed_year, delisted_year (nullable), unlisted (boolean). |
pages[] | object[] | key, title, html_url — the company's public pages, as absolute URLs. Cite these. |
resources | object | Keyed by endpoint id — history, ceo, financials, the six sections financials-segment / financials-pl / financials-cf / financials-bs / financials-employee / financials-stock, then financials-csv and financials-history-csv. Each holds is_active, url, api_url, html_url, format, description and chars_ja, the character count of its Japanese text. is_active false means this company has nothing for that endpoint. |
/api/{stock_code}/history.json
The page at /tse/{stock_code}/decisions/, as data: the corporate history in chapters, the summary that opens it, the long-term results series that runs beside it, and the list of management decisions with the URL of each. The single largest text payload — tens of thousands of Japanese characters for a well-covered firm.
Try it — https://the-shashi.com/api/7974/history.json
| Key | Type | Meaning |
|---|---|---|
title | string | Title of the history. |
summary | object | description — the one-paragraph description of the company. Absent when there is none. |
chapters[] | object[] | The whole history, oldest chapter first: start_year, end_year, main_title, subsections[]. Chapters are not served as separate files. |
chapters[].subsections[] | object[] | title, text (the prose, paragraphs separated by \n\n), references, charts, factBasis. |
long_term[] | object[] | Sales, profit and headcount from as close to the founding as the record allows, one row per fiscal year: year, month, company_name (the name in that year), sales, operating_profit, ordinary_profit, net_profit, net_margin, employees. |
long_term[].unit, consolidation, accounting_standard | string | The unit the row is in (百万円, 千円), 連結 or 単体, and JGAAP / IFRS / US. All three change across a long series — read them per row, never assume. |
long_term[].reference | string | That row's own source. Named per row because the series is assembled from many. |
decisions[] | object[] | title, year, type, html_url — this company's management decisions, oldest first. Headings and URLs only; the narrative is on the page. |
/api/{stock_code}/ceo.json
The page at /tse/{stock_code}/ceo/, as data: every president the company has had, in order — where each came from, how each was chosen, what each did, and the page to read them on.
Try it — https://the-shashi.com/api/7974/ceo.json
| Key | Type | Meaning |
|---|---|---|
ceo[] | object[] | One entry per president, earliest first. |
ceo[].name, kana | string | Name in Japanese, and its reading. |
ceo[].term_start, term_end | string | null | YYYY-MM. term_end is null for the incumbent. |
ceo[].origin, origin_type | string | How this person reached the presidency, and the category — 生え抜き (career insider), 創業家 (founding family), 外部招聘 (brought in) and so on. |
ceo[].hometown, education, prev_role | string | Where from, where educated, and the post held immediately before. |
ceo[].career[] | object[] | company, from, to, roles[] — the career, in Japanese, one block per employer. |
ceo[].sections | object | tenure_summary, and tenure_frames[] — four frames per president: origin, selection, measures, appraisal. Each frame carries its prose. |
ceo[].html_url | string | Absolute URL of that president's page. |
/api/{stock_code}/financials.json
The summary that opens the page at /tse/{stock_code}/current/: the headline items of profit and loss, balance sheet and cash flow for the three most recent fiscal years, and the way in to the six section endpoints that hold ten years of detail apiece. Fetch this first; fetch a section when you need the series.
Try it — https://the-shashi.com/api/7974/financials.json
| Key | Type | Meaning |
|---|---|---|
financials[] | object[] | P&L, three most recent years: sales, gross_profit, operating_profit, ordinary_profit, net_profit. Ten years, with the detail beneath them, are in financials/pl.json. |
bs[] | object[] | Balance sheet, three most recent years: total_assets, equity, interest_debt. Ten years are in financials/bs.json. |
cf[] | object[] | Cash flow, three most recent years: operating_cf, investing_cf, financing_cf, cash_equivalents. Ten years are in financials/cf.json. |
sections[] | object[] | key (segment, pl, cf, bs, employee, stock), title, api_url, html_url — the six sections of the page, each with the endpoint that carries it and the anchor to read it at. The one place a response names another API file. |
…[].FY, period | string | FY25 and 2026/3 — the fiscal year label and the month it ended. On every row of every financial endpoint. |
…[].unit | string | The unit the row's figures are in, in Japanese: 百万円 (millions of yen), 千円 (thousands). Read it per row. |
…[].accounting_standard, consolidation | string | JGAAP, IFRS or US; 連結 (consolidated) or 単体 (parent-only). |
…[].{field}_jp | string | The Japanese label of the line item as it appears in the filing — the caption, not a second figure. sales carries the number; sales_jp carries 売上高. |
/api/{stock_code}/financials/segment.json
The 売上分解 section of /tse/{stock_code}/current/, as data: ten years of sales broken down on three axes — by reporting segment, by geographic region, and as the mix of the whole.
Try it — https://the-shashi.com/api/7974/financials/segment.json
| Key | Type | Meaning |
|---|---|---|
segment[] | object[] | segment, sales, profit, assets. Segment names are the company's own, in Japanese, and are redrawn whenever the company reorganises — a break in the names is a break in the series, not an error. |
region[] | object[] | region, sales — 日本, 南北アメリカ, 欧州 and so on, on the company's own grouping. |
revenue_mix[] | object[] | The share each segment takes of total sales, year by year. |
/api/{stock_code}/financials/pl.json
The 損益計算書 section of /tse/{stock_code}/current/, as data: ten years of the profit and loss account, the headline items and the detailed breakdown beneath them.
Try it — https://the-shashi.com/api/7974/financials/pl.json
| Key | Type | Meaning |
|---|---|---|
pl[] | object[] | sales, cost_of_sales, sga, cost_others, gross_profit, operating_profit, ordinary_profit, extraordinary_income, extraordinary_loss, net_profit, and the margins they leave. |
/api/{stock_code}/financials/cf.json
The キャッシュ・フロー計算書 section of /tse/{stock_code}/current/, as data: ten years of cash from operations, investment and financing, and what is left on hand.
Try it — https://the-shashi.com/api/7974/financials/cf.json
| Key | Type | Meaning |
|---|---|---|
cf[] | object[] | operating_cf, investing_cf, financing_cf, cash_equivalents. |
/api/{stock_code}/financials/bs.json
The 貸借対照表 section of /tse/{stock_code}/current/, as data: ten years of assets, debt and equity, the headline items and the detailed breakdown beneath them.
Try it — https://the-shashi.com/api/7974/financials/bs.json
| Key | Type | Meaning |
|---|---|---|
bs[] | object[] | total_assets, equity, interest_debt, securities, goodwill, intangible_assets, short_debt, long_debt, bond. |
/api/{stock_code}/financials/employee.json
The 従業員・生産性 section of /tse/{stock_code}/current/, as data: ten years of headcount, pay and what each employee accounts for.
Try it — https://the-shashi.com/api/7974/financials/employee.json
| Key | Type | Meaning |
|---|---|---|
employee[] | object[] | consolidated_employees, non_consolidated_employees, avg_salary (thousands of yen — 10060 means ¥10.06m), avg_age, and sales and profit per employee. |
/api/{stock_code}/financials/stock.json
The 株式・株価指標 section of /tse/{stock_code}/current/, as data: ten years of shares outstanding, share price, market capitalisation and the multiples they give. Who the holders are belongs to a different page, /tse/{stock_code}/shareholders/, and is not served by this API.
Try it — https://the-shashi.com/api/7974/financials/stock.json
| Key | Type | Meaning |
|---|---|---|
stock[] | object[] | shares_outstanding, share price, market_cap, and the valuation multiples — PER, PBR and the like. |
CSV
Two further paths carry data already served as JSON, flattened for a spreadsheet or a data frame. Nothing is published in CSV that is not also in JSON.
| Method | Path | Returns | Notes |
|---|---|---|---|
| GET | /api/{stock_code}/financials.csv → /api/7974/financials.csv | Results CSV | The annual figures the financials endpoints serve as JSON, flattened into one table. The page behind it is /tse/{stock_code}/current/. |
| GET | /api/{stock_code}/financials_history.csv → /api/7974/financials_history.csv | Long-term results CSV | The long-term series carried in history.json under long_term, flattened. The page behind it is /tse/{stock_code}/decisions/. |
Using the data
Start at the top. Fetch
/api/companies.json for the company index and the
endpoint catalog, then a company's company.json to see
what it actually has and how much text each file holds. Both are
small. Going straight to /api/decisions.json pulls
several megabytes you probably do not need. The same applies within a
company: financials.json answers most questions about the
latest results on its own, and the six section files are there for
when you want the ten-year series of one table.
Follow html_url for the reading. A single management
decision and a single president live on their pages, not in endpoints
of their own. Where a response names one it gives
html_url, an absolute URL beginning
https://the-shashi.com/. Fetch that page; do not try to
compose an API path for it.
Delivery. Files are served from CloudFront as static
objects with ETag and Last-Modified, so
conditional requests work. The updated field in the
envelope is the better change signal: it moves when the content
changes, not when the file was regenerated.
Attribution. The data is © 2026 Yutaka Sugiura, all
rights reserved. If you surface any of it to a reader, show the
attribution line with a link to the response's
canonical_url. Commercial redistribution is not
permitted; see the disclaimer below.
The Japanese edition of this page carries the same specification as an OpenAPI 3.1 document. Back to the English edition.