Building an AI agent? Start with /llms.txt for the full site index.
Companies & Events
ESG (TESG) scores for listed companies — the composite sustainability score and its environmental, social and governance pillars, compiled from official disclosures.
GET /v2/datasets/esg-tesgesg-tesg is a derived dataset: the composite TESG score and its E / S / G pillar scores are compiled and computed from official corporate sustainability disclosures, not published as a single raw figure. The lineage block names what each score was derived from, so the rating stays auditable rather than a black box. One row per company per assessment period.
| Field | Type | Description |
|---|---|---|
symbol | string | Ticker. |
period | string | Assessment period (e.g. 2025). |
tesg_score | number | Composite TESG score. |
environment_score | number | Environmental pillar score. |
social_score | number | Social pillar score. |
governance_score | number | Governance pillar score. |
source_role | string | Canonical source role (derived_twse_tesg). |
| Rows | 10,088 |
| Window | 2026-06-05 (single-day snapshot) |
| Grade | Derived |
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": null, "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-06-05" }, "quality": { "row_count": 50, "ticker_count": 9, "sensitive_fields_exposed": false }, "lineage": { "source_providers": [ "twse_official" ], "source_roles": [ "esg_tesg_official_open" ], "source_families": [ "twse_ghg" ] }, "error": null, "data": [ { "ticker": "1101", "market": "TWSE", "report_year": 2024, "as_of_date": "2026-06-05", "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": 0, "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": "1101", "market": "TWSE", "report_year": 2024, "as_of_date": "2026-06-05", "subfamily": "ghg_carbon_disclosure", "metric_name": "scope1_emissions_tco2e", "metric_value": "39544430.9992", "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": 0, "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": 50, "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": 50 }}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.
curl "https://api.twmarketdata.com/v2/datasets/esg-tesg?symbol=2330" \ -H "X-API-Key: sk_live_..."| 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. |
A first call:
import requests resp = requests.get( "https://api.twmarketdata.com/v2/datasets/esg-tesg", 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-tesg", params={"symbol": "2330"}, headers={"X-API-Key": "sk_live_..."},)resp.raise_for_status()for row in resp.json()["data"]: print(row)This endpoint is GET /v2/datasets/esg-tesg. The full machine-readable schema (parameters, security, response envelope) lives in the OpenAPI spec.