Our identifiers
| Identifier | Format | Example | Stability |
|---|---|---|---|
company_key | {MIC}_{TICKER} of the primary listing; UNLT_{name} for an unlisted company | XMIL_G | Stable in normal operation. If a key must change, for example after a re-listing, we tell you in advance. |
report_id | Integer | 529769 | Stable. If two records are merged, the retired id keeps resolving to the surviving report. |
report_key | {company_key}_{year}_{type}, with a suffix when a company has several reports of one type in a year | XMIL_G_2025_AR2 | Stable. A renamed key keeps resolving through POST /reports/lookup. |
Use report_id in API calls, and report_id or report_key as your primary key. The year in report_key is the cover year, which can differ from the fiscal year. Use content_sha256 to detect a changed PDF.
Querying with your identifiers
| Your identifier | How to use it |
|---|---|
| ISIN | POST /companies/resolve with isins, or GET /reports?isin= for a company's primary ISIN |
| Ticker | POST /companies/resolve with tickers as MIC:TICKER (for example XLON:HSBA), or symbols. A ticker alone is ambiguous across exchanges. |
| LEI, FIGI, CIK | POST /companies/resolve with leis, figis or ciks |
| Company name | POST /companies/resolve with names: the exact name or a known alias |
| Company key | company_key= on any endpoint that filters by company |
Resolution is exact; we do not guess. Each call takes up to 1,000 identifiers across all lists, and returns one result per input, in input order. A company we hold outside your licence comes back as matched: true, entitled: false with no details. An identifier that maps to more than one company comes back as matched: false, ambiguous: true, so a conflict is never resolved silently.
{"isins": ["IT0000062072", "XX0000000000"]}{
"results": [
{"query": "IT0000062072", "identifier_type": "isin", "matched": true, "entitled": true,
"company": {"company_key": "XMIL_G", "company_name": "Assicurazioni Generali SpA", "isin": "IT0000062072",
"lei": "549300X5UKJVE386ZB61", "figi": "BBG001S68DX0", "cik": null, "fiscal_year_end_month": 12,
"ticker": "G", "mic": "XMIL", "exchange": "Borsa Italiana (Euronext Milan)", "country": "Italy",
"sector": "Finance & insurance", "industry": "Insurance & pensions"}},
{"query": "XX0000000000", "identifier_type": "isin", "matched": false, "entitled": null,
"company": null}
],
"matched_count": 1,
"unmatched_count": 1
}For a large list, we can also prepare a crosswalk file during onboarding: one row per company on your list, with your identifier, our company_key and the match status. If you believe a match is wrong, email us the company_key and your identifier and we will correct it.
Identifiers we return
We return ISIN, LEI, FIGI and CIK where we hold them, plus our own keys and the listing: ticker, MIC and exchange.
Some ISINs are withheld
For licensing reasons, responses do not contain ISINs of US and Canadian issuers, nor certain other ISINs whose structure embeds a proprietary security identifier. For those companies isin is null, or empty in metadata. LEI and FIGI are provided where available. You can still send any ISIN as input: /companies/resolve echoes your own value in query. We do not return proprietary security identifiers.
Report types
report_type is one of these codes. SR, IR, AR2 and AR1 are the core types; the four-letter codes are specialty disclosures. We may add codes: treat an unknown code as a valid specialty disclosure.
| Code | Report type |
|---|---|
SR | Sustainability Report |
IR | Integrated Report |
AR2 | Annual Report with Sustainability Disclosures |
AR1 | Annual Report |
CGOV | Corporate Governance Report |
MSST | Modern Slavery Statement |
TCFD | TCFD Report |
GHGR | GHG Emissions Report |
GRIX | GRI Content Index |
CTRP | Climate Transition Plan |
STEW | Stewardship Report |
BNDI | Bond Impact Report |
CLIM | Climate Report |
HRTS | Human Rights Report |
EITI | EITI Payments to Governments Report |
GPGR | Gender Pay Gap Report |
CRPL | Carbon Reduction Plan |
DEIR | Diversity and Inclusion Report |
SASB | SASB Index |
GBFW | Sustainable Bond Framework |
SCTR | Supply Chain Transparency Report |
SPOP | Second Party Opinion |
TNFD | Nature and Biodiversity Report |
BNDA | Bond Allocation Report |
UNGC | UN Global Compact Progress Report |
HSAF | Health and Safety Report |
CODE | Code of Conduct |
WATR | Water Stewardship Report |
SLBF | Sustainability-Linked Bond Framework |
PRIT | PRI Transparency Report |
EMAS | EMAS Environmental Statement |
ESGD | ESG Data Book |
CBEN | Community Benefit Report |
An AR2 is an annual report with a dedicated, substantive sustainability section. An AR1 is an annual report without one. report_class groups documents more broadly: D for a standalone sustainability report, E for sustainability disclosure inside a larger report, S for a specialised ESG document and F for an annual report without substantive sustainability content.
The Report object
Every report endpoint returns the same Report object. It carries typed API fields, grouped below, and a metadata object with the same information under the 50 field-guide column names.
| Group | Fields |
|---|---|
| Identifiers and file | report_id, report_key, filename, has_file, download_path, formats, content_sha256, report_hash, created_at, updated_at |
| Company | company_key, company_name, company_isin, company_lei, company_figi, company_ticker, company_mic, company_exchange, company_country, company_sector, company_industry, nace_code, naics_code |
| Report | report_title, report_type, report_class, document_scope, report_year, report_fcyear, fiscal_year_label, period_start_date, period_end_date, report_period, report_pubdate, report_pubdate_iso, edition_number, report_edition, report_lang, report_pages, report_filesize |
| Disclosures | standards_gri, gri_level, standards_sasb, standards_tcfd, standards_issb, standards_esrs, standards_integrated, standards_ghg_protocol, standards_eu_taxonomy, standards_ungp, standards_cdp, standards_ungc, standards_sbti, sbti_status, sdg_alignment, has_materiality_assessment, has_materiality_matrix, assurance_provider, report_assurance, independent_assurance_report_included, assurance_level, assurance_standard, assurance_scope |
| Renamed reports | requested_legacy_report_id, requested_legacy_report_key, canonical_report_id, canonical_report_key: set when you ask for a report by an id or key that was retired in a rename |
Fields outside the 50 are API-only: report_id, has_file, download_path, formats, created_at, updated_at, report_hash, document_scope, report_fcyear, report_period, report_pubdate (date form), report_edition (string form of edition_number) and report_assurance (same value as assurance_provider).
Field conventions
- Unknown is null. A value we do not have is
nullin the typed fields and an empty string inmetadata. - A blank is never a no. For the boolean fields,
false(FALSEinmetadata) means we found evidence the report does not apply the standard or feature.null(empty inmetadata) means undetermined. - Extracted, not audited. Standards flags and assurance fields describe what the report states. They are not an independent audit.
- Two forms of the same data. The typed API fields use integers, booleans, dates and
null. Themetadataobject always carries all 50 columns, every value a string, exactly as in a bulk delivery file: dates in ISO 8601, booleans asTRUE,FALSEor empty. Use whichever suits you. - Times and sizes.
created_atandupdated_atare UTC.report_filesizeis in megabytes.report_pubdate_isokeeps the precision the report states:YYYY,YYYY-MMorYYYY-MM-DD. - Languages.
report_langholds ISO 639-1 codes; a bilingual report carries two. Thelanguagefilter matches either.
Fiscal year
report_fcyear is the fiscal year a report covers. When a company's fiscal year spans two calendar years, the report is tagged with the year in which that fiscal year ends. An Indian annual report for April 2024 to March 2025, labelled 2024-25 by the company, is fiscal year 2025.
- The company's own label stays in
fiscal_year_label, for example2024-2025. The exact dates are inperiod_start_dateandperiod_end_date. - The
fcyearfilter and the fiscal-year window of your licence use the same convention. - When a report states no fiscal year, its cover year (
report_year) is used instead. - Undated documents have cover year 0 and no fiscal year. They fall outside any fiscal-year window.
- The cover year can differ from the fiscal year: a report printed in 2024 can cover fiscal year 2025, and its
report_keythen contains 2024.
Older two-year values
Some older records still hold a two-year value in report_fcyear, such as 2024-2025. The fcyear filter and licence windows file these under the first year. When they are brought into line with the end-year convention, the affected reports will appear in the change feed as updates. Until then, if you need every report for a split fiscal year, also filter on the adjacent year and check period_end_date.
The 50 metadata fields
Every report carries the 50 fields of the metadata field guide (schema version V3). The table shows the column name used in metadata and in bulk deliveries, and the matching typed API field. GET /meta/schema returns the same dictionary in machine-readable form.
Report metadata (16)
| # | Column | API field | Type | Example | Description |
|---|---|---|---|---|---|
| 1 | filename | filename | string | XETR_ALV_2023_SR.pdf | Filename of the PDF |
| 2 | company | company_name | string | Allianz SE | Company name in our standardised form |
| 3 | title | report_title | string | Sustainability Report | Report title as printed on the cover. In metadata, a partial document is marked (Extract) or (Chapter) |
| 4 | year | report_year | integer | 2023 | Cover year: the edition year printed on the report |
| 5 | type | report_type | string | SR | Report type code, for example SR, IR, AR2 or AR1; see the report types table |
| 6 | class | report_class | string | D | Document class: D standalone sustainability report; E sustainability disclosure inside a larger report; S specialised ESG document; F annual report without substantive sustainability content |
| 7 | language | report_lang | string | EN | ISO 639-1 code; two codes for a bilingual report |
| 8 | pages | report_pages | integer | 158 | Page count |
| 9 | filesize | report_filesize | float | 2.41 | File size in megabytes |
| 10 | publication_date | report_pubdate_iso | string | 2024-03-07 | Publication date, ISO 8601 at the precision the report states |
| 11 | period_start | period_start_date | date | 2023-01-01 | First day of the reporting period |
| 12 | period_end | period_end_date | date | 2023-12-31 | Last day of the reporting period |
| 13 | fiscal_year | fiscal_year_label | string | 2023 | The company's own fiscal-year label, as a year or a two-year span such as 2024-2025 |
| 14 | edition | edition_number | integer | 23 | Edition number, where stated |
| 15 | report_key | report_key | string | XETR_ALV_2023_SR | SustainabilityReports.com report identifier |
| 16 | sha256 | content_sha256 | hex (64) | a1d0c6e8...9f2b | SHA-256 of the PDF bytes, 64 hex characters |
Company identity (12)
| # | Column | API field | Type | Example | Description |
|---|---|---|---|---|---|
| 17 | company_key | company_key | string | XETR_ALV | SustainabilityReports.com company identifier |
| 18 | ticker | company_ticker | string | ALV | Ticker on the primary listing |
| 19 | mic | company_mic | string | XETR | ISO 10383 Market Identifier Code |
| 20 | exchange | company_exchange | string | Deutsche Börse (Xetra) | Primary listing exchange |
| 21 | country | company_country | string | Germany | Country of headquarters |
| 22 | sector | company_sector | string | Finance & insurance | SustainabilityReports.com Industry Classification (SRIC) sector |
| 23 | industry | company_industry | string | Insurance & pensions | SRIC industry, the level below sector |
| 24 | nace_code | nace_code | string | 65 | NACE Rev. 2.1 division, always 2 digits |
| 25 | naics_code | naics_code | string | 524113 | NAICS code, 2 to 6 digits |
| 26 | isin | company_isin | string | DE0008404005 | ISIN, ISO 6166. Withheld for US, Canadian and certain other ISINs; use lei or figi for those companies |
| 27 | lei | company_lei | string | 529900K9B0N5BT694847 | Legal Entity Identifier, ISO 17442 |
| 28 | figi | company_figi | string | BBG001S5XGR4 | OpenFIGI share-class identifier |
Standards, materiality and assurance (22)
| # | Column | API field | Type | Example | Description |
|---|---|---|---|---|---|
| 29 | std_gri | standards_gri | boolean | TRUE | Applies GRI Standards. Derived from gri_level |
| 30 | gri_level | gri_level | string | In accordance | Depth of GRI adherence: in accordance, referenced, or not applied |
| 31 | std_sasb | standards_sasb | boolean | TRUE | Applies SASB Standards |
| 32 | std_tcfd | standards_tcfd | boolean | TRUE | Applies the TCFD recommendations |
| 33 | std_issb | standards_issb | boolean | FALSE | Applies ISSB Standards, reporting against IFRS S1 or S2 |
| 34 | std_esrs | standards_esrs | boolean | TRUE | Applies ESRS or CSRD requirements |
| 35 | std_integrated | standards_integrated | boolean | FALSE | Applies the Integrated Reporting Framework |
| 36 | std_ghg_protocol | standards_ghg_protocol | boolean | TRUE | Applies the GHG Protocol to calculate emissions |
| 37 | std_eu_taxonomy | standards_eu_taxonomy | boolean | FALSE | Applies the EU Taxonomy |
| 38 | std_ungp | standards_ungp | boolean | TRUE | Applies the UN Guiding Principles on Business and Human Rights |
| 39 | std_cdp | standards_cdp | boolean | TRUE | Mentions CDP participation or a CDP score |
| 40 | std_ungc | standards_ungc | boolean | TRUE | Mentions the UN Global Compact |
| 41 | std_sbti | standards_sbti | boolean | TRUE | Has a relationship with the SBTi. Derived from sbti_status |
| 42 | sbti_status | sbti_status | string | Committed | Relationship with the SBTi: targets set, committed, commitment removed, or no relationship |
| 43 | sdg_goals | sdg_alignment | string | 3; 7; 12; 13 | UN Sustainable Development Goals the report reports against, semicolon separated |
| 44 | materiality_assessment | has_materiality_assessment | boolean | TRUE | Describes a process for identifying, scoring or prioritising material topics |
| 45 | materiality_matrix | has_materiality_matrix | boolean | FALSE | Contains a materiality matrix |
| 46 | assurance_provider | assurance_provider | string | PricewaterhouseCoopers GmbH | Third-party assurance provider(s), semicolon separated |
| 47 | assurance_statement | independent_assurance_report_included | boolean | TRUE | The assurance practitioner's own statement is reproduced in the report, rather than assurance only being claimed |
| 48 | assurance_level | assurance_level | string | Limited | Level of external assurance: limited or reasonable |
| 49 | assurance_standard | assurance_standard | string | ISAE 3000 | Assurance standard(s), short code |
| 50 | assurance_scope | assurance_scope | string | Entire report | What the assurance covers. Derived from the metrics the assurance statement names |
Company changes
Mergers, renames and re-listings happen. When a company's key changes we tell you, and the change feed reports the affected reports as updates. See staying current for how to apply them.
