Skip to content

API documentation

Data model and field conventions

How companies and reports are identified, what each report type means, how fiscal years are assigned, and the 50 metadata fields every report carries.

API version 2.4.0 · Updated 2 October 2026

Our identifiers

IdentifierFormatExampleStability
company_key{MIC}_{TICKER} of the primary listing; UNLT_{name} for an unlisted companyXMIL_GStable in normal operation. If a key must change, for example after a re-listing, we tell you in advance.
report_idInteger529769Stable. 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 yearXMIL_G_2025_AR2Stable. 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 identifierHow to use it
ISINPOST /companies/resolve with isins, or GET /reports?isin= for a company's primary ISIN
TickerPOST /companies/resolve with tickers as MIC:TICKER (for example XLON:HSBA), or symbols. A ticker alone is ambiguous across exchanges.
LEI, FIGI, CIKPOST /companies/resolve with leis, figis or ciks
Company namePOST /companies/resolve with names: the exact name or a known alias
Company keycompany_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.

POST /companies/resolve
{"isins": ["IT0000062072", "XX0000000000"]}
Response
{
  "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.

CodeReport type
SRSustainability Report
IRIntegrated Report
AR2Annual Report with Sustainability Disclosures
AR1Annual Report
CGOVCorporate Governance Report
MSSTModern Slavery Statement
TCFDTCFD Report
GHGRGHG Emissions Report
GRIXGRI Content Index
CTRPClimate Transition Plan
STEWStewardship Report
BNDIBond Impact Report
CLIMClimate Report
HRTSHuman Rights Report
EITIEITI Payments to Governments Report
GPGRGender Pay Gap Report
CRPLCarbon Reduction Plan
DEIRDiversity and Inclusion Report
SASBSASB Index
GBFWSustainable Bond Framework
SCTRSupply Chain Transparency Report
SPOPSecond Party Opinion
TNFDNature and Biodiversity Report
BNDABond Allocation Report
UNGCUN Global Compact Progress Report
HSAFHealth and Safety Report
CODECode of Conduct
WATRWater Stewardship Report
SLBFSustainability-Linked Bond Framework
PRITPRI Transparency Report
EMASEMAS Environmental Statement
ESGDESG Data Book
CBENCommunity 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.

GroupFields
Identifiers and filereport_id, report_key, filename, has_file, download_path, formats, content_sha256, report_hash, created_at, updated_at
Companycompany_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
Reportreport_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
Disclosuresstandards_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 reportsrequested_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 null in the typed fields and an empty string in metadata.
  • A blank is never a no. For the boolean fields, false (FALSE in metadata) means we found evidence the report does not apply the standard or feature. null (empty in metadata) 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. The metadata object always carries all 50 columns, every value a string, exactly as in a bulk delivery file: dates in ISO 8601, booleans as TRUE, FALSE or empty. Use whichever suits you.
  • Times and sizes. created_at and updated_at are UTC. report_filesize is in megabytes. report_pubdate_iso keeps the precision the report states: YYYY, YYYY-MM or YYYY-MM-DD.
  • Languages. report_lang holds ISO 639-1 codes; a bilingual report carries two. The language filter 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 example 2024-2025. The exact dates are in period_start_date and period_end_date.
  • The fcyear filter 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_key then 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)

#ColumnAPI fieldTypeExampleDescription
1filenamefilenamestringXETR_ALV_2023_SR.pdfFilename of the PDF
2companycompany_namestringAllianz SECompany name in our standardised form
3titlereport_titlestringSustainability ReportReport title as printed on the cover. In metadata, a partial document is marked (Extract) or (Chapter)
4yearreport_yearinteger2023Cover year: the edition year printed on the report
5typereport_typestringSRReport type code, for example SR, IR, AR2 or AR1; see the report types table
6classreport_classstringDDocument class: D standalone sustainability report; E sustainability disclosure inside a larger report; S specialised ESG document; F annual report without substantive sustainability content
7languagereport_langstringENISO 639-1 code; two codes for a bilingual report
8pagesreport_pagesinteger158Page count
9filesizereport_filesizefloat2.41File size in megabytes
10publication_datereport_pubdate_isostring2024-03-07Publication date, ISO 8601 at the precision the report states
11period_startperiod_start_datedate2023-01-01First day of the reporting period
12period_endperiod_end_datedate2023-12-31Last day of the reporting period
13fiscal_yearfiscal_year_labelstring2023The company's own fiscal-year label, as a year or a two-year span such as 2024-2025
14editionedition_numberinteger23Edition number, where stated
15report_keyreport_keystringXETR_ALV_2023_SRSustainabilityReports.com report identifier
16sha256content_sha256hex (64)a1d0c6e8...9f2bSHA-256 of the PDF bytes, 64 hex characters

Company identity (12)

#ColumnAPI fieldTypeExampleDescription
17company_keycompany_keystringXETR_ALVSustainabilityReports.com company identifier
18tickercompany_tickerstringALVTicker on the primary listing
19miccompany_micstringXETRISO 10383 Market Identifier Code
20exchangecompany_exchangestringDeutsche Börse (Xetra)Primary listing exchange
21countrycompany_countrystringGermanyCountry of headquarters
22sectorcompany_sectorstringFinance & insuranceSustainabilityReports.com Industry Classification (SRIC) sector
23industrycompany_industrystringInsurance & pensionsSRIC industry, the level below sector
24nace_codenace_codestring65NACE Rev. 2.1 division, always 2 digits
25naics_codenaics_codestring524113NAICS code, 2 to 6 digits
26isincompany_isinstringDE0008404005ISIN, ISO 6166. Withheld for US, Canadian and certain other ISINs; use lei or figi for those companies
27leicompany_leistring529900K9B0N5BT694847Legal Entity Identifier, ISO 17442
28figicompany_figistringBBG001S5XGR4OpenFIGI share-class identifier

Standards, materiality and assurance (22)

#ColumnAPI fieldTypeExampleDescription
29std_gristandards_gribooleanTRUEApplies GRI Standards. Derived from gri_level
30gri_levelgri_levelstringIn accordanceDepth of GRI adherence: in accordance, referenced, or not applied
31std_sasbstandards_sasbbooleanTRUEApplies SASB Standards
32std_tcfdstandards_tcfdbooleanTRUEApplies the TCFD recommendations
33std_issbstandards_issbbooleanFALSEApplies ISSB Standards, reporting against IFRS S1 or S2
34std_esrsstandards_esrsbooleanTRUEApplies ESRS or CSRD requirements
35std_integratedstandards_integratedbooleanFALSEApplies the Integrated Reporting Framework
36std_ghg_protocolstandards_ghg_protocolbooleanTRUEApplies the GHG Protocol to calculate emissions
37std_eu_taxonomystandards_eu_taxonomybooleanFALSEApplies the EU Taxonomy
38std_ungpstandards_ungpbooleanTRUEApplies the UN Guiding Principles on Business and Human Rights
39std_cdpstandards_cdpbooleanTRUEMentions CDP participation or a CDP score
40std_ungcstandards_ungcbooleanTRUEMentions the UN Global Compact
41std_sbtistandards_sbtibooleanTRUEHas a relationship with the SBTi. Derived from sbti_status
42sbti_statussbti_statusstringCommittedRelationship with the SBTi: targets set, committed, commitment removed, or no relationship
43sdg_goalssdg_alignmentstring3; 7; 12; 13UN Sustainable Development Goals the report reports against, semicolon separated
44materiality_assessmenthas_materiality_assessmentbooleanTRUEDescribes a process for identifying, scoring or prioritising material topics
45materiality_matrixhas_materiality_matrixbooleanFALSEContains a materiality matrix
46assurance_providerassurance_providerstringPricewaterhouseCoopers GmbHThird-party assurance provider(s), semicolon separated
47assurance_statementindependent_assurance_report_includedbooleanTRUEThe assurance practitioner's own statement is reproduced in the report, rather than assurance only being claimed
48assurance_levelassurance_levelstringLimitedLevel of external assurance: limited or reasonable
49assurance_standardassurance_standardstringISAE 3000Assurance standard(s), short code
50assurance_scopeassurance_scopestringEntire reportWhat 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.