ESG data

Realtime queries across environmental, facility and extractives disclosures, five blocks: emissions (Climate TRACE facility-level GHG sources — whose facilities, in which country, how many tCO2e; plus the THETIS-MRV catalog of EU shipping emission-report files), payments (the EITI extractives dataset line by line, classified by IMF GFS revenue codes — who paid whom, where, and how much), facility & carbon-registry master data (the EPA FRS facility master — the authoritative facility key ECHO/TRI/GHGRP converge on; the EU carbon registry's official bulk-download catalog), port state control (Paris MoU current detentions, the ban list, low-performance ISM companies and the historical inspection flow — official ship×management-company edges), and air safety (the EU Air Safety List's official download catalog — third-country carriers banned or restricted, machine-readable XLSX master + 24 language PDFs; the files themselves travel on the batch pipeline). All commands run locally on your machine with no credentials: no platform-side quota, each upstream's own limits apply, and repeats within a cache lifetime are served from your local cache without hitting it.

Commands at a glance

Every direct-lookup face in this domain — each has its own section below (one-line positioning / parameters / a real example / boundaries).

Command Jurisdiction What it answers
esg climatetrace_owners GLOBAL Emitting owners (Climate TRACE)
esg climatetrace_sources GLOBAL Facility-level greenhouse-gas emissions (Climate TRACE)
esg eiti_companies GLOBAL Extractives disclosing entities (EITI)
esg eiti_payments GLOBAL Extractives payments to governments, line by line (EITI)
esg epa_frs_facilities US EPA facility master lookup (FRS)
esg euasl_datasets EU EU Air Safety List official download catalog
esg eutl_datasets EU EU carbon registry bulk-download catalog (EUTL)
esg paris_mou_bans GLOBAL Paris MoU banned ships (embedded management company)
esg paris_mou_detentions GLOBAL Paris MoU current detentions snapshot
esg paris_mou_inspections GLOBAL Paris MoU historical inspections window search
esg paris_mou_low_performance_companies GLOBAL Paris MoU low-performance ISM companies
esg thetis_mrv_datasets EU EU shipping MRV emission-report file catalog (THETIS-MRV)

Realtime queries

The examples below are real command output, excerpts only, unmodified. Queries are realtime — running a command returns whatever the official source holds at that moment, so figures shift as upstreams update.

The examples below omit the leading executable name — prepend agentdata (or python -m agentdata ) for a full command.

esg climatetrace_owners

Emitting owners (Climate TRACE)

Parameters:

Flag Required Meaning
--name yes Owner name (feed the id into climatetrace_sources for facility-level emissions)
--limit no Rows (cap 50)
--offset no Rows to skip (ordering is unstable — prefer one large fetch)

**Note:**Candidates are non-authoritative; upstream ordering is unstable across limits (probed), so fetch enough in one go instead of paging finely; --limit politeness default 50 (upstream tested to 1,000).

$ esg climatetrace_owners --name "Equinor" --limit 3
{
  "reason": "Climate TRACE 主体检索:3 候选,首选 Equinor ASA(E100000000766)——候选非权威归一,行面以 owner_ids 为准;排序跨 limit 不稳定(2026-10-23 实测),翻页建议一次取足",
  "result": {
    "candidates": [
      { "trace_owner_id": "E100000000766", "owner_name": "Equinor ASA" },
      { "trace_owner_id": "E100001014692", "owner_name": "Equinor Energy AS" },
      { "trace_owner_id": "E100002013955", "owner_name": "Equinor Brasil Energia Ltda" }
    ],
    "limit_applied": 3
  },
  "evidence": [
    { "quote": "E100000000766 = Equinor ASA",
      "url": "https://api.climatetrace.org/v7/owners?name=Equinor&limit=3" }
  ]
}

**Reading it:**The trace_owner_id (E-prefix) is the authoritative row-face anchor — land the id here first, then query the emissions face per source; group sisters sit side by side in the candidates (Equinor ASA / Energy AS / Brasil), so pick the right subject before going further. Zero hits means the name is not in the owner register — retry with an alias.

esg climatetrace_sources

Facility-level greenhouse-gas emissions (Climate TRACE)

Parameters:

Flag Required Meaning
--owner-ids no Owner id(s), e.g. E100000000766 (comma-joined = union)
--owner-name no Owner-name shortcut: resolves the first matching owner (XOR with --owner-ids; use the latter to target precisely)
--year no Emissions year (default = current year; data window starts 2021)
--gas no Gas measure (default co2e_100yr = tCO2e)
--limit no Rows (cap 500)
--offset no Rows to skip (ordering is unstable — prefer one large fetch)
--sectors no Sector filter, closed set: agriculture / buildings / fluorinated-gases / forestry-and-land-use / fossil-fuel-operations / manufacturing / mineral-extraction / power / transportation / waste, plus the special all_no_forest (wrong values silently return the whole corpus upstream — validated locally)
--subsectors no Subsector slug (68 upstream values, listed at GET /v7/definitions/subsectors; wrong values get an upstream 400)
--gadm-id no GADM region id (location family — gadm-id / city-id / country-group / continent: the upstream allows only one at a time, more gets a 400)
--city-id no Metro-area id (location family, one at a time)
--country-group no Country-group slug, e.g. eu / aosis / g20 (location family, one at a time)
--continent no Continent name, e.g. Europe (the upstream counts RUS under Europe; location family, one at a time)

**Note:**Years outside the data window return null upstream (not an error); the --owner-name convenience flag resolves only the first candidate — for multi-entity groups, land the id on the climatetrace_owners face first, then query by --owner-ids.

$ esg climatetrace_sources --owner-ids E100000000766 --year 2024 --limit 4
{
  "reason": "Climate TRACE 排放面:4 源 2024 年合计 61,428,114.37 tCO2e(AGO/BRA;gas=co2e_100yr 口径)",
  "result": {
    "rows": [
      { "source_id": 53058598, "name": "Brazil_Santos_Deepwater",
        "sector": "fossil-fuel-operations", "subsector": "oil-and-gas-production",
        "source_type": "point-source", "country": "BRA", "year": 2024, "gas": "co2e_100yr",
        "emissions_tco2e": 27621187.35,
        "location": { "lat": -25.000647, "lon": -42.82633 } },
      { "source_id": 53058477, "name": "Angola_Lower Congo_Deepwater",
        "sector": "fossil-fuel-operations", "subsector": "oil-and-gas-production",
        "source_type": "point-source", "country": "AGO", "year": 2024, "gas": "co2e_100yr",
        "emissions_tco2e": 17305183.49,
        "location": { "lat": -0.6662651, "lon": 8.133333 } }
    ],
    "total_rows": 4, "limit_applied": 4
  },
  "evidence": [
    { "quote": "Equinor ASA 2024 = 61,428,114.37 tCO2e (co2e_100yr)",
      "url": "https://api.climatetrace.org/v7/sources?ownerIds=E100000000766&year=2024" }
  ]
}

Reading it:reason carries the page total directly (4 sources, 61.4M tCO2e for 2024 above) — use it for cross-facility sums instead of hand-adding rows across different gases. --owner-ids accepts a comma-joined union (deduped); --year starts at 2021; --gas defaults to co2e_100yr (tCO2e), and switching to a specific gas moves the row key to emissions_quantity in its native unit.

esg eiti_companies

Extractives disclosing entities (EITI)

Parameters:

Flag Required Meaning
--company-name__like no Company name, SQL LIKE match (% / _ wildcards pass through)
--name no Company-name shortcut: assembled to a %name% contains match (XOR with --company-name__like; use the latter to control wildcards yourself)
--size no Rows (cap 1000)

**Note:**Candidates are non-authoritative (like match, ASCII case-insensitive; % and _ in names act as LIKE wildcards verbatim); narrow same-name subjects by UUID / estma_id before persisting — estma_id is an ESTMA (Canadian transparency act) filer number, and filers include foreign companies operating in Canada, not just Canadian firms; hq_country is null for most rows (upstream fill rate 62/10,201).

$ esg eiti_companies --name "Equinor" --size 3
{
  "reason": "EITI 名称检索:本页 3 候选 / 上游共 22 个匹配,首选 Equinor Angola Block 31 AS (—,申报 ?–?)——候选非权威归一",
  "result": {
    "candidates": [
      { "eiti_id_company": "eiti_id_company:01800525-17dc-5854-aaab-3e1b719d2f52", "company_name": "Equinor Angola Block 31 AS ",
        "hq_country": null, "sectors": null, "countries_of_operation": null, "estma_id": null },
      { "eiti_id_company": "eiti_id_company:1441eb64-c451-5d4b-b939-f1a3e887b2de", "company_name": "Equinor",
        "hq_country": "Norway", "sectors": "Oil & Gas", "countries_of_operation": "Iraq, Nigeria",
        "estma_id": "E042948", "first_year_reported": 2016, "last_year_reported": 2019 }
    ],
    "limit_applied": 3,
    "total_matches": 22,
    "total_matches_capped": false
  },
  "evidence": [
    { "quote": "Equinor Angola Block 31 AS (—,—)",
      "url": "https://eiti-database.eiti.org/eiti_database/view_companies.json" }
  ],
  "source": { "provider": "eiti", "execution": "local", "from_cache": false, "observed_at": "2026-10-27T10:02:51.170Z" }
}

**Reading it:**Sister entities surface right in the candidate list (Angola Block 31, upstream México all listed); the eiti_id_company UUID is the authoritative anchor. total_matches is the full match count (shown as >10000 when it exceeds ten thousand). 7-day TTL.

esg eiti_payments

Extractives payments to governments, line by line (EITI)

Parameters:

Flag Required Meaning
--eiti-id-company__exact no EITI company id, exact full value (incl. the eiti_id_company: prefix)
--eiti-id no Bare-UUID shortcut: the eiti_id_company: prefix is auto-added (XOR with --eiti-id-company__exact)
--company-name__like no Company name, SQL LIKE match (% / _ wildcards pass through)
--name no Company-name shortcut: assembled to a %name% contains match (XOR with --company-name__like; use the latter to control wildcards yourself)
--size no Rows (cap 1000)

**Note:**Prefer the eiti_id_company UUID anchor; the register carries no local registration numbers (estma_id is an ESTMA filer number, present for only some filers) — never join it against company registries. total_rows is the full match count (shown as >10000 when it exceeds ten thousand).

$ esg eiti_payments --name "Equinor" --size 3
{
  "reason": "EITI 支付面:本页 3 行 / 上游共 358 行(TZA;USD ~$279,962 为本页小计非全量,GFS 分类口径跨批可比)",
  "result": {
    "rows": [
      { "eiti_id_company": "eiti_id_company:4053644f-f074-5a3f-af9a-a5e7b024476b",
        "company_name": "EQUINOR TANZANIA AS", "year": 2017, "country_iso3": "TZA",
        "gov_entity": "Tanzania Revenue Authority", "revenue_stream": "Corporation tax",
        "gfs_code": "1112E1", "gfs_name": "Ordinary taxes on income, profits and capital gains",
        "payment_value": 0.0, "payment_value_usd": 0.0, "payment_in_kind": 0 },
      { "eiti_id_company": "eiti_id_company:4053644f-f074-5a3f-af9a-a5e7b024476b",
        "company_name": "EQUINOR TANZANIA AS", "year": 2017, "country_iso3": "TZA",
        "gov_entity": "Tanzania Revenue Authority", "revenue_stream": "Skills and Development Levy",
        "gfs_code": "112E", "gfs_name": "Taxes on payroll and workforce",
        "payment_value": 618888695.77, "payment_value_usd": 279961.59257131483, "payment_in_kind": 0 }
    ],
    "count": 3,
    "limit_applied": 3,
    "total_rows": 358,
    "total_rows_capped": false
  },
  "evidence": [
    { "quote": "EQUINOR TANZANIA AS 2017 → Tanzania Revenue Authority:Skills and Development Levy ($279961.59257131483)",
      "url": "https://eiti-database.eiti.org/eiti_database/view_payments_detailed" }
  ],
  "source": { "provider": "eiti", "execution": "local", "from_cache": true, "fetched_at": "2026-10-21T09:03:30.911Z" }
}

Reading it:payment_value is the original local currency and payment_value_usd the conversion — the USD basis varies across reporting batches, so compare across countries via GFS-code groups, never absolute values across batches. The USD figure in reason is a page subtotal, not the full total — raise --size for more (up to 1,000 rows per call); when the name match hits multiple entities, land the UUID on the eiti_companies face first and query by --eiti-id. 7-day TTL.

esg epa_frs_facilities

EPA facility master lookup (FRS)

Parameters:

Flag Required Meaning
--registry-id no FRS Registry ID — the authoritative facility key (ECHO/TRI/GHGRP join anchor)
--primary-name no Facility primary name — EXACT match incl. spaces (the upstream contains/~ operators silently return 0; fuzzy names go through ECHO)
--state-code no State code, 2-letter (lowercase uppercased locally, e.g. DE)
--city-name no City name (exact; the seven filters combine as AND, at least one required)
--country-name no Country name (exact uppercase form, lowercase uppercased locally — GERMANY=110 measured; unlocks the non-US facility slice)
--site-type-name no Site type (exact uppercase, e.g. STATIONARY=4,725,914 measured)
--epa-region-code no EPA region (zero-padded two-digit string form '03'; region 10 = 214,197 measured)
--start no Paging offset (upstream ROWS closed-interval start; the end is computed locally from size)
--size no Rows (default 50, politeness cap 500)

**Note:**Seven filter columns (registry_id/primary_name/state_code/city_name/country_name/site_type_name/epa_region_code — the last three added by the 0.3.20 audit) are all EXACT = matches upstream (whole string, spaces included), combinable as AND, at least one required — the bare full-table scan (~5.6M rows) is walled off politely; country_name unlocks the non-US facility slice (FRS is not a US-only library: GERMANY=110, UNITED STATES=3,129,491 rows measured); fuzzy facility-name search does not live here (the upstream contains/~ operators silently return 0 rows) — land the registry_id on the ECHO face first, then come point-lookup.

$ esg epa_frs_facilities --registry-id 110050002260
{
  "reason": "FRS 设施主档:本页 1 行 / 全库匹配 1,首选 7-ELEVEN COVENTRY-TREATMENT PLANT(110050002260,2000 CRAWFORD PL, MOUNT LAUREL, NJ  08054 US)——registry_id 为 ECHO/TRI/GHGRP 汇流权威键",
  "result": {
    "rows": [
      { "registry_id": "110050002260", "primary_name": "7-ELEVEN COVENTRY-TREATMENT PLANT", "std_name": "7 11 COVENTRY TRTMNT PLT",
        "location_address": "2000 CRAWFORD PLACE", "city_name": "MT. LAUREL", "county_name": "TOLLAND", "state_code": "NJ",
        "state_name": "CONNECTICUT", "postal_code": "08054", "country_name": "US",
        "std_full_address": "2000 CRAWFORD PL, MOUNT LAUREL, NJ  08054 US", "site_type_name": "STATIONARY",
        "interest_status_code": null, "operating_status": null, "epa_region_code": "02",
        "parent_registry_id": null, "fips_code": null, "create_date": null }
    ],
    "count": 1
  },
  "evidence": [
    { "quote": "110050002260 = 7-ELEVEN COVENTRY-TREATMENT PLANT(2000 CRAWFORD PL, MOUNT LAUREL, NJ  08054 US)",
      "url": "https://data.epa.gov/efservice/frs_facility_site" }
  ],
  "source": { "provider": "epa_frs", "execution": "local", "from_cache": false, "observed_at": "2026-10-29T11:26:19.359Z" }
}

Reading it:registry_id is EPA's authoritative facility key — facility rows on the ECHO (enforcement/compliance), TRI and GHGRP faces all join back here for the master record; trust std_full_address (the standardized form) for addresses; null columns like operating_status are common (the upstream leaves them unfilled). In this very row state_name=CONNECTICUT contradicts the New Jersey address — the upstream's auxiliary columns (state_name/county_name) are inconsistently populated, so never use them as a second check.

esg euasl_datasets

EU Air Safety List official download catalog

**Note:**A zero-parameter catalog face — one call returns all 25 files, no filters, no paging; the document UUIDs are publish-time content ids, not stable keys, and rotate on every republication (link form /document/download/<uuid>_<lang>?filename=…), so reconcile against this listing and never guess file names; the XLSX/PDF files themselves are not downloadable through this face (the batch pipeline fetches them).

$ esg euasl_datasets
{
  "reason": "EU 航空安全禁飞名单官方下载目录:25 件跨 24 种官方语言——机读 XLSX 主件(附件 A=运营禁令承运人、附件 B=限制条件运营)排第一,其余为各语言 PDF rendition;文档 UUID 随每次再公布轮换——收割按本清单对账勿猜文件名;文件本体走批线",
  "result": {
    "rows": [
      { "document_id": "67b75752-d144-4366-9f4a-c04157840211", "language": "en", "file_name": "air-safety-list.xlsx", "format": "xlsx", "download_path": "/document/download/67b75752-d144-4366-9f4a-c04157840211_en?filename=air-safety-list.xlsx" },
      { "document_id": "3195fabb-7575-4db9-85b9-ec5a77b481aa", "language": "bg", "file_name": "air-safety-list_bg.pdf", "format": "pdf", "download_path": "/document/download/3195fabb-7575-4db9-85b9-ec5a77b481aa_bg?filename=air-safety-list_bg.pdf" },
      { "document_id": "3195fabb-7575-4db9-85b9-ec5a77b481aa", "language": "cs", "file_name": "air-safety-list_cs.pdf", "format": "pdf", "download_path": "/document/download/3195fabb-7575-4db9-85b9-ec5a77b481aa_cs?filename=air-safety-list_cs.pdf" }
    ],
    "count": 25,
    "master": { "file_name": "air-safety-list.xlsx", "download_path": "/document/download/67b75752-d144-4366-9f4a-c04157840211_en?filename=air-safety-list.xlsx" }
  },
  "evidence": [
    { "quote": "air-safety-list.xlsx (xlsx, en):/document/download/67b75752-d144-4366-9f4a-c04157840211_en?filename=air-safety-list.xlsx",
      "url": "https://transport.ec.europa.eu/transport-themes/eu-air-safety-list_en" }
  ],
  "source": { "provider": "euasl", "execution": "local", "from_cache": false, "observed_at": "2026-11-02T07:44:03.071Z" }
}

Reading it:master carries the machine-readable XLSX row (same as the first row); the other 24 rows are official-language PDF renditions (language = ISO-639-1 code; the hr rendition carries an _2 suffix on the filename while the language token stays the path segment); download_path is a site path — prepend the transport.ec.europa.eu host for the direct file link. The list itself: Annex A = third-country carriers under an operating ban (~188), Annex B = carriers operating under restrictions and conditions (AIR KORYO / IRAN AIR).

esg eutl_datasets

EU carbon registry bulk-download catalog (EUTL)

**Note:**A zero-parameter catalog face — one call returns all 15 datasets, no filters, no paging; it hands out official URL coordinates only, the csv.gz/xlsx files themselves are not downloadable through it; the climate.ec.europa.eu annual-file URLs carry a document UUID that changes when the upstream reissues a version.

$ esg eutl_datasets
{
  "reason": "EUTL 官方批量下载目录:15 件——4 件 Azure 日更提取(账册/运营方/持仓 csv.gz)+ 10 件欧盟委员会年度件(合规/核实排放 2021-2025)+ 1 件交易册——下载坐标面,文件本体走批线",
  "result": {
    "rows": [
      { "name": "Accounts Daily", "url": "https://dlsclimabi.blob.core.windows.net/public-data/eutlpublic_prod/extracts/_all_extracts/account/accounts_daily.csv.gz", "cadence": "daily", "group_index": 0, "pane_index": 0, "sort_index": 0, "action": "d_accounts_dayli" },
      { "name": "Transactions", "url": "https://climate.ec.europa.eu/document/download/6be60240-c5ec-4389-a78a-b5a16d6b9849_en?filename=transactions_eutl_2026.zip", "cadence": "static", "group_index": 0, "pane_index": 0, "sort_index": 3, "action": "d_transactions" },
      { "name": "Compliance 2025", "url": "https://climate.ec.europa.eu/document/download/f7de3320-ca3d-43d1-afd4-bf0b5d3d355f_en?filename=compliance_2025_code_en.xlsx", "cadence": "yearly", "group_index": 0, "pane_index": 1, "sort_index": 0, "action": "d_compliance_" }
    ],
    "count": 15
  },
  "evidence": [
    { "quote": "Accounts Daily(daily):https://dlsclimabi.blob.core.windows.net/public-data/eutlpublic_prod/extracts/_all_extracts/account/accounts_daily.csv.gz",
      "url": "https://union-registry-data.ec.europa.eu/api/data-download" }
  ],
  "source": { "provider": "eutl", "execution": "local", "from_cache": true, "fetched_at": "2026-10-29T03:30:55.380Z" }
}

Reading it:cadence comes in three gears: daily = the Azure daily extracts (accounts/operators/holdings csv.gz, host dlsclimabi…), yearly = the European Commission annual files (compliance/verified emissions 2021–2025, host climate.ec.europa.eu), static = the transactions register; url is the official direct link — this face's output is exactly that set of download coordinates, and the files themselves travel on the batch pipeline.

esg paris_mou_bans

Paris MoU banned ships (embedded management company)

**Note:**Of the 486 rows, 310 carry the management-company key — the rest have null company columns (the upstream leaves them unlinked), so never assume a company edge on every row; the list rolls daily; this face is the ban list, single detention events live in the paris_mou_inspections flow.

$ esg paris_mou_bans
{
  "reason": "Paris MoU 禁令名单:486 行,其中 310 行带 ISM 管理公司 IMO 号(如 SELAM / IMO 9418286 → Unimarin Denizcilik / 公司 IMO 5322090,10/09/2026 禁令)——船×管理公司官方边直出,公司键可比对航运公司档",
  "result": {
    "rows": [
      { "id": 7489690651, "imo_number": "9418286", "ship_name": "SELAM", "flag_code": "KN", "flag_name": "Saint Kitts and Nevis", "ban_date": "10/09/2026", "ban_occurrence": "First", "ban_order_status": { "type": "VALIDATED", "description": "Validated", "effectDate": null, "expiryDate": null, "active": true, "id": "VALIDATED" }, "ban_reason": { "type": "MULTIPLE_OF_DETENTIONS", "description": "Multiple detentions", "effectDate": null, "expiryDate": null, "multipleDetentionsReason": true, "active": true, "id": "MULTIPLE_OF_DETENTIONS" }, "minimum_duration": { "name": "THREE_MONTHS", "message": "Three months " }, "banning_authority": "Italy", "company_imo_number": "5322090", "company_name": "Unimarin Denizcilik", "company_address": null, "company_city": null, "company_country_code": "TR", "company_country_name": "Turkiye" }
    ],
    "count": 486
  },
  "evidence": [
    { "quote": "SELAM(IMO 9418286,KN):10/09/2026 First禁令(Italy)→ Unimarin Denizcilik(公司 IMO 5322090)",
      "url": "https://portal.emsa.europa.eu/o/portlet-public/rest/ban/getBanShips.json" }
  ],
  "source": { "provider": "paris_mou", "execution": "local", "from_cache": true, "fetched_at": "2026-10-30T01:22:57.677Z" }
}

**Reading it:**One row per ship ban, with the ISM management-company quartet embedded (company_imo_number / company_name / country) — an official ship×management-company edge straight from the source, whose company IMO key joins directly against shipping-company registers; ban_order_status / ban_reason / minimum_duration are structured enums (VALIDATED / MULTIPLE_OF_DETENTIONS / THREE_MONTHS), and ban_occurrence (First/Second/…) marks the recidivism tier.

esg paris_mou_detentions

Paris MoU current detentions snapshot

**Note:**A rolling current-state snapshot — today's 52 ships shift tomorrow (new detentions in, releases out), it is not a historical ledger; coverage is limited to ports of Paris MoU member authorities; for detention history use the paris_mou_inspections windowed search.

$ esg paris_mou_detentions
{
  "reason": "Paris MoU 当前滞留:52 船在滞(如 SANTOS TRADER / IMO 9404431,29/10/2026 滞留于 DE Brake)——现行态快照当日滚动;船 IMO 号=资产键",
  "result": {
    "rows": [
      { "id": 7589901219, "imo_number": "9404431", "ship_name": "SANTOS TRADER", "ship_type": "Bulk carrier", "flag_code": "MH", "flag_name": "Marshall Islands", "detention_date": "29/10/2026", "detention_port": "Brake", "detention_country_code": "DE", "reporting_authority": "Germany" },
      { "id": 7592889849, "imo_number": "1111959", "ship_name": "JIN FOISON", "ship_type": "Bulk carrier", "flag_code": "SG", "flag_name": "Singapore", "detention_date": "29/10/2026", "detention_port": "Gdynia", "detention_country_code": "PL", "reporting_authority": "Poland" }
    ],
    "count": 52
  },
  "evidence": [
    { "quote": "SANTOS TRADER(IMO 9404431,MH,Bulk carrier):29/10/2026 滞留于 DE Brake",
      "url": "https://portal.emsa.europa.eu/o/portlet-public/rest/detention/getCurrentDetentions.json" }
  ],
  "source": { "provider": "paris_mou", "execution": "local", "from_cache": true, "fetched_at": "2026-10-30T03:08:16.277Z" }
}

**Reading it:**One row per ship currently under detention: the ship IMO number (the asset key) plus ship type, flag, and the detention date/port/authority — the 52 rows here are the full global detention list as of today; take the ship IMO number to vessel registers or company faces for asset matching.

esg paris_mou_inspections

Paris MoU historical inspections window search

Parameters:

Flag Required Meaning
--period-min yes Window start dd/mm/yyyy (upstream periodMin; STRICT day-first — wrong order silently returns zero; required)
--period-max yes Window end dd/mm/yyyy (upstream periodMax; window <= 3 years enforced locally — longer windows silently empty upstream; required)
--psc-inspection-regime no Inspection regime (upstream pscInspectionRegime; 1 = PSC default, the only live value — 0 → poisoned 200 empty / 2 → HTTP 500; non-1 walled locally with the evidence)
--page no Page number (upstream page; the paging switch — this face always sends it, without it upstream ignores limit and dumps the whole window)
--start no Row offset within page (upstream start; page+start+limit = start-offset paging, page 1/2 verified zero overlap)
--limit no Rows (default 50, politeness cap 500; upstream fully honors 1000)
--ism-company-name no ISM management-company name filter (upstream ismCompanyName)
--ism-company-imo-number no ISM company IMO number filter, 7-digit zero-padded (upstream ismCompanyImoNumber, e.g. 0052193; both padded/unpadded forms accepted upstream — passed through verbatim)

Note:--period-min / --period-max are required and demand strict dd/mm/yyyy date order — a reversed window silently returns 0 rows; the window spans at most 3 years (a local wall); --psc-inspection-regime 1 is the only live value — 0 draws a poisoned 200 empty and 2 an HTTP 500 upstream, so non-1 values are walled locally with the evidence (measured in the 0.3.20 audit); page via --page (always sent on this face) or --start, with --limit default 50 and politeness cap 500 (the upstream fully honors 1000).

$ esg paris_mou_inspections --period-min 01/01/2026 --period-max 01/10/2026 --psc-inspection-regime 1
{
  "reason": "Paris MoU 历史检查流:窗 01/01/2026–01/10/2026 本页 50 行 / 全窗 13,181——窗统计:13181 检/12175 船/517 滞留/1900 ISM 缺陷;首行 AAL DAMMAM(IMO 9963554)01/10/2026 @Canada Trois Rivieres 3 缺陷——id 键可逐检深查(getInspectionDetail)",
  "result": {
    "rows": [
      { "id": 7540826008, "imo_number": "9963554", "ship_name": "AAL DAMMAM", "ship_type": "General cargo/multipurpose", "flag_code": "PT", "flag_name": "Portugal", "age": 2, "inspection_date": "01/10/2026", "inspection_type": "Initial inspection", "member_state": "Canada", "port_name": "Trois Rivieres", "port_and_ms": "Canada - Trois Rivieres", "ndeficiencies": 3, "results_desc": "" },
      { "id": 7531600985, "imo_number": "8317978", "ship_name": "AB MOLY", "ship_type": "General cargo/multipurpose", "flag_code": "SL", "flag_name": "Sierra Leone", "age": 43, "inspection_date": "01/10/2026", "inspection_type": "More detailed inspection", "member_state": "Romania", "port_name": "Braila", "port_and_ms": "Romania - Braila", "ndeficiencies": 6, "results_desc": "" }
    ],
    "count": 50,
    "total": 13181,
    "resume": { "ships": 12175, "inspections": 13181, "detentions": 517, "ism_deficiencies": 1900, "non_ism_deficiencies": 40110, "bans": 14 },
    "paging": { "page": 1, "start": 0, "limit": 50 }
  },
  "evidence": [
    { "quote": "AAL DAMMAM(IMO 9963554,PT):01/10/2026 @Canada Trois Rivieres——3 缺陷(Initial inspection)",
      "url": "https://portal.emsa.europa.eu/o/portlet-public/rest/inspection/getPublicInspections.json" }
  ],
  "source": { "provider": "paris_mou", "execution": "local", "from_cache": false, "observed_at": "2026-10-30T03:10:13.697Z" }
}

Reading it:reason carries the window statistics (this window: 13,181 inspections / 12,175 ships / 517 detentions / 1,900 ISM deficiencies) — use it directly to size a window's risk surface; result.resume is the same data in structured form (with non_ism_deficiencies / bans too); one row = one inspection, the id key supports per-inspection drill-down (upstream getInspectionDetail); --ism-company-imo-number / --ism-company-name narrow the flow to a given management company.

esg paris_mou_low_performance_companies

Paris MoU low-performance ISM companies

**Note:**The list holds only LOW-tier companies — higher-risk performance tiers are not on this face; effect_date is the listing date (it can long predate today, the first example 2012 — years-long low performance), and a null expiry_date means still listed; address columns are null for some rows.

$ esg paris_mou_low_performance_companies
{
  "reason": "Paris MoU 低表现 ISM 公司:65 家(25 国/地区),100% 带 IMO 公司号(如 Apeejay Shipping Ltd / IMO 0052193,India,LOW,08/10/2012 入榜)——滚动 6 月窗公司风险属性名单",
  "result": {
    "rows": [
      { "id": 18885, "imo_number": "0052193", "name": "Apeejay Shipping Ltd", "address": "Apeejay House, 15, Park Street", "city": "Kolkata", "country_code": "IN", "country_name": "India", "performance": "LOW", "effect_date": "08/10/2012", "expiry_date": null, "status": "ACTIVE" },
      { "id": 22066, "imo_number": "0099721", "name": "JADROLINIJA RIJEKA", "address": null, "city": null, "country_code": "HR", "country_name": "Croatia", "performance": "LOW", "effect_date": "01/11/2023", "expiry_date": null, "status": "ACTIVE" }
    ],
    "count": 65
  },
  "evidence": [
    { "quote": "Apeejay Shipping Ltd(IMO 0052193,India,LOW,入榜 08/10/2012)",
      "url": "https://portal.emsa.europa.eu/o/portlet-public/rest/companyperformance/getLowPerformance6MonthsISMCompanies.json" }
  ],
  "source": { "provider": "paris_mou", "execution": "local", "from_cache": true, "fetched_at": "2026-10-30T01:23:12.938Z" }
}

**Reading it:**One row per ISM management company: the company IMO number (7-digit zero-padded, e.g. 0052193) plus address, country, performance / effect_date / status — a rolling 6-month-window list of 65 companies, ready-made for shipping-company risk due diligence; the company IMO key cross-joins the other Paris MoU faces (the ISM columns of bans/inspections).

esg thetis_mrv_datasets

EU shipping MRV emission-report file catalog (THETIS-MRV)

**Note:**A zero-parameter catalog face — one call returns all 8 periods' current files, no filters, no paging; version numbers jump as the upstream regenerates (at capture time 2025 was already v76, 2024 v254), so reconcile against this listing and never guess file names; the XLSX files themselves are not downloadable through this face.

$ esg thetis_mrv_datasets
{
  "reason": "THETIS-MRV 排放申报件目录:8 个申报期(2018-2025)× 8 件版本化发布件——最新 2025 v76(29-10-2026 05:27:07 再生成);版本账本滚动跳变,收割按清单对账勿猜文件名;XLSX 本体走批线",
  "result": {
    "rows": [
      { "reporting_period": 2025, "version": 76, "generation_date": "29-10-2026 05:27:07", "file_name": "2025-v76-29102026-EU MRV Publication of information", "download_path": "/api/public-emission-report/reporting-period-document/binary/2025/76" },
      { "reporting_period": 2024, "version": 254, "generation_date": "28-10-2026 05:21:34", "file_name": "2024-v254-28102026-EU MRV Publication of information", "download_path": "/api/public-emission-report/reporting-period-document/binary/2024/254" }
    ],
    "count": 8,
    "reporting_periods": [2025, 2024, 2023, 2022, 2021, 2020, 2019, 2018]
  },
  "evidence": [
    { "quote": "2025 v76(29-10-2026 05:27:07):2025-v76-29102026-EU MRV Publication of information",
      "url": "https://mrv.emsa.europa.eu/api/public-emission-report/downloadable-files" }
  ],
  "source": { "provider": "thetis_mrv", "execution": "local", "from_cache": true, "fetched_at": "2026-10-29T09:07:36.581Z" }
}

**Reading it:**One row per reporting period = its currently published file: version, regeneration timestamp, file name and download path; the reporting_periods array lists every period on the shelf (2018–2025); download_path is relative — prepend the mrv.emsa.europa.eu host for the direct file link.

The fine print

  • Compare across batches via GFS codes: USD conversion conventions differ between publication batches, so absolute values are not directly comparable (see the boundaries above).