Building an AI agent? Start with /llms.txt for the full site index.
Companies & Events
GHG Carbon Disclosure (Scope 1/2/3)
Greenhouse-gas disclosures filed by listed companies: scope 1, 2 and 3 emissions with their assurance flags, republished from TWSE open data with per-row lineage. Not a TESG rating.
GET /v2/datasets/esg-ghg-carbon-disclosureGHG Carbon Disclosure (Scope 1/2/3) is a Taiwan market dataset sourced from TWSE, served by TW Market Data as GET /v2/datasets/esg-ghg-carbon-disclosure.
Overview
Greenhouse-gas disclosures filed by listed companies: scope 1, 2 and 3 emissions in tonnes of CO2e, plus the assurance flag stating whether each scope was externally verified. One row per company, report year and metric, each carrying a lineage block naming the TWSE open-data endpoint and the exact source column it came from. Two limits are stated rather than implied: the feed is a current snapshot, not a full history, and this is greenhouse-gas disclosure only. It is NOT a TESG rating and makes no parity claim against a paid commercial ESG score.
| Field | Type | Description |
|---|---|---|
ticker | string | Ticker. The payload calls this ticker, not symbol. |
market | string | Listing market, e.g. TWSE. |
report_year | number | Reporting year the disclosure covers. |
as_of_date | string | Snapshot date the row was captured on. |
subfamily | string | Disclosure family; ghg_carbon_disclosure for these rows. |
metric_name | string | Which metric this row carries, e.g. scope1_emissions_tco2e or scope1_assurance. |
metric_value | string | The value, as a string. Emission figures are numeric strings; assurance flags are 是 / 否. |
metric_unit | null | Unit for the metric, 噸CO2e for emissions and null for non-numeric metrics. |
disclosure_status | string | Whether the company disclosed this metric. |
Coverage
| Rows | 10,088 |
| Window | 2026-06-05 (single-day snapshot) |
| Grade | Derived |
Example response
A real response from this endpoint. Rows are returned under "data", and provenance is carried in the shape shown below — it is not identical across datasets, so read this page's rather than assuming another's.
{ "dataset_id": "esg_tesg", "request_context": { "scope": "esg_tesg_official_open_ghg_only", "coverage_type": "official_open_current_snapshot_only", "filters": { "ticker": "3189", "market": null, "report_year": null, "as_of_date": null, "subfamily": null, "metric_name": null, "disclosure_status": null, "source_family": null, "limit": 50 }, "min_as_of_date": "2026-06-05", "max_as_of_date": "2026-07-31" }, "quality": { "row_count": 12, "ticker_count": 1, "sensitive_fields_exposed": false }, "lineage": { "source_providers": [ "twse_official" ], "source_roles": [ "esg_tesg_official_open" ], "source_families": [ "twse_ghg" ] }, "error": null, "data": [ { "ticker": "3189", "market": "TWSE", "report_year": 2025, "as_of_date": "2026-07-31", "subfamily": "ghg_carbon_disclosure", "metric_name": "scope1_assurance", "metric_value": "<Chinese value - see the zh page>", "metric_unit": null, "disclosure_status": "disclosed", "source_provider": "twse_official", "source_role": "esg_tesg_official_open", "source_family": "twse_ghg", "lineage": { "row_index": 570, "source_url": "https://openapi.twse.com.tw/v1/opendata/t187ap46_L_1", "source_column": "<Chinese value - see the zh page>" }, "data_gaps": [], "not_investment_advice": true }, { "ticker": "3189", "market": "TWSE", "report_year": 2025, "as_of_date": "2026-07-31", "subfamily": "ghg_carbon_disclosure", "metric_name": "scope1_emissions_tco2e", "metric_value": "14994.1581", "metric_unit": "<Chinese value - see the zh page>", "disclosure_status": "disclosed", "source_provider": "twse_official", "source_role": "esg_tesg_official_open", "source_family": "twse_ghg", "lineage": { "row_index": 570, "source_url": "https://openapi.twse.com.tw/v1/opendata/t187ap46_L_1", "source_column": "<Chinese value - see the zh page>" }, "data_gaps": [], "not_investment_advice": true } ], "data_count": 12, "known_gaps": [ "official_open_current_snapshot_only", "ghg_only_initial_baseline", "no_paid_commercial_tesg_parity_claim" ], "warnings": [ "not_investment_advice" ], "not_investment_advice": true, "envelope": { "dataset_id": "esg_tesg", "scope": "esg_tesg_official_open_ghg_only", "row_count": 12 }}Captured from the live API on 2026-07-20.
Chinese data values are shown as a marker here so this page stays in English; the /zh page shows them verbatim.
Provenance
These columns are returned alongside the data and record where the row came from. They are provenance, not the dataset's subject matter, so they are listed here rather than in the field table.
source_providersource_rolesource_familylineagedata_gapsnot_investment_adviceRelated datasets
Datasets that join with this one. The key each pair aligns on is shown, so you can plan a multi-table query without guessing.
- Institutional flow
Joins on as_of_date + market + ticker
- Margin & short
Joins on as_of_date + market + ticker
- Market value weight
Joins on as_of_date + market + ticker
- Securities lending
Joins on as_of_date + market + ticker
- Futures market (daily)
Joins on as_of_date + market + ticker
- Governance — chairman/GM duality (t187ap33_L)
Joins on as_of_date + ticker
Getting started
- Put your key in the X-API-Key header.
- Add query parameters (symbol, date range, limit).
- Send the request and read the data array.
curl "https://api.twmarketdata.com/v2/datasets/esg-ghg-carbon-disclosure?symbol=2330" \ -H "X-API-Key: sk_live_..."Filtering
| Parameter | Required | Type | Description |
|---|---|---|---|
symbol | Yes | string | Ticker, e.g. 2330. |
start_date | No | string (YYYY-MM-DD) | Start of the query range. |
end_date | No | string (YYYY-MM-DD) | End of the query range. |
limit | No | integer | Maximum rows to return. |
Python
A first call:
import requests resp = requests.get( "https://api.twmarketdata.com/v2/datasets/esg-ghg-carbon-disclosure", params={"symbol": "2330"}, headers={"X-API-Key": "sk_live_..."},)resp.raise_for_status()print(resp.json()["data"])With a date-range filter:
import requests # The full verified example — the same call with every supported filter set.resp = requests.get( "https://api.twmarketdata.com/v2/datasets/esg-ghg-carbon-disclosure", params={"symbol": "2330"}, headers={"X-API-Key": "sk_live_..."},)resp.raise_for_status()for row in resp.json()["data"]: print(row)OpenAPI
This endpoint is GET /v2/datasets/esg-ghg-carbon-disclosure. The full machine-readable schema (parameters, security, response envelope) lives in the OpenAPI spec.
Notes & limitations
- Three limits, taken from the response's own known_gaps rather than inferred: the feed is a current snapshot, not a queryable history; coverage is the greenhouse-gas baseline only, not the full sustainability disclosure set; and no parity is claimed against a paid commercial ESG rating. Values are the companies' own filed figures, republished with lineage, not a score we compute.