ESG data in Postman
Last update  December 2019
Operating System  Any
Tool  Postman

Introduction

In the first tutorial we authenticated to the server and requested our token, and then retrieved some data.

This tutorial covers ESG, i.e. Environmental Social & Governance data retrieval.

After a brief introduction to ESG data, we shall cover the available API calls, as well as their input parameters and expected outputs.

We shall illustrate this with requests in Postman. These calls are included in the Postman collection, available under the downloads tab.

Table of contents

  • What is ESG data ?
    • How can I access ESG data ?
  • What data are you entitled to ?
  • Data coverage: instrument universe and history
  • API calls parameters
    • Start and end
  • Output data format
    • Messages, validation of returned data
  • Calling up the data universe
  • Basic data for public websites
  • Standard data for private websites
  • Full data for the professional package

What is ESG data ?

The ESG acronym stands for Environmental Social & Governance. This is data that highlights how companies are rated on Environmental, Social and Corporate Governance criteria.

The data is of 2 natures:

  • Measures
  • Scores

There are more than 400 measures (the actual number can vary depending on the company), which as their name indicates are measures of specific criteria, self reported by the companies. The type of data can be a boolean, a number, or eventually a string, depending on the nature of the underlying data. Here are a few areas that are covered:

  • Water and energy consumption and efficiency
  • CO2 emissions
  • Human rights
  • Women employees
  • Staff training
  • Health and safety
  • Etc.

Using the measures, we calculate a set of scores, i.e. analytics whose result is a number that indicates how well a company scores on various criteria. Some of these are on specific topics, like the Innovation Score, others are summaries, like the EnvironmentSocial and Governance Pillar Score, which are overall ratings of these 3 pillars, and the ESG Score which is an overall score for the company, based on those 3 pillars. Scores have values between 0 and 1, 0 being the worst and 1 the best.

All these values are delivered on a yearly basis, i.e. there is one record per calendar year.

Please note that the source data for measures is self reported by the companies. Depending on when it is published, values for the preceding year might not be available.

How can I access ESG data ?

We plan to have 2 ways of accessing ESG data from the Refinitiv Data Platform:

  • By instrument, using specific queries - This is what this tutorial is about.
  • In bulk files - This will be available in Q2 2020.

What data are you entitled to ?

There are several levels of access to the data, that relate to the data usage (display on public or private websites), as well as the number of data fields and the depth of history available.

Depending on your contract, you might only be able to access a subset of the API calls described in this tutorial.

In case of doubt about your access rights, please contact your Refinitiv account manager.

Data coverage: instrument universe and history

Data is currently available for more than 8000 companies, with history going all the way back to 2002 (when available). Companies are regularly added to the list, and delisted companies are not removed.

API calls parameters

There are several API call parameters, that are common to most of the ESG API calls. Please note that they are case sensitive:

Parameter Mandatory? API calls where it applies Purpose Example value Default
universe Mostly All except the universe call Instrument identifier. Example codes for Apple Incorporated: none
   
The following codes are supported: AAPL.O
   
RIC1 4295905573
PermID2  
Cusip 37833100
ISIN  
OrgID US0378331005
Sedol  
Valoren 19775
Wert  
  2046251
To use several, separate them with commas.  
  908440
   
  865985
start Optional Measures and scores calls Start year -2 -2 (standard calls)
   
(number of years before the most recent year) -20 (full calls)
end Optional Measures and scores calls End year 0 0
 
(most recent year)
format Optional All calls Remove messages3 from output noMessages Messages are delivered
 
(this is the only possible value if it is set)

1ESG also supports special RICs that do not deliver market depth data, it is therefore possible to use BNPP.PA or BNPP.PA1, TEF.MC or TEF.MC1, MSFT.NB or MSFT.O.

2See Open PermID for information on what the PermID is, and how you can use it. RIC is the Reuters Identification Code.

3Messages are numeric codes that validate output fields.

As all API calls use the GET method, the API parameters are set in the URL of the call to the API. Their order is not important. Example:

    	
            
https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-standard?universe=IBM.N&format=noMessages&start=-1&end=0

Start and end

By default, API calls for standard data will return 3 years of history, and calls for full data will return all years history.

The optional start and end parameters can be used to restrict that range to a subset of years.

Note: for a standard call, start cannot be lower than -2. For a full call, start cannot be lower than -20.

API call Start End Result
universe not applicable not applicable  
basic not applicable not applicable 2017
standard not set not set 2015-2017
standard -1 0 2016-2017
standard -1 -1 2016
standard -3 -1 Error (start value should be between -2 and 0)
full not set not set All available history
full -3 -1 2014-2016
full -15 -15 2002
full -21 0 Error (start value should be between -20 and 0)

Output data format

The output of the calls is in JSON format. All calls deliver data with a common structure, each one contains the following objects:

  • links - number of data records
  • variability - defines if the number of records in the result will always be the same, or if it might change
  • universe - universe of instruments with data fields (some might not be available): RIC, company name, PermID, currency
  • data - requested data records (1 or more), each containing a set of fields
  • messages - validation of the data records
  • headers - description of the returned data fields

Here is an example, from the API call for basic data (the headers section was truncated in this exerpt):

    	
            

{

    "links": {

        "count": 1

    },

    "variability": "variable",

    "universe": [

        {

            "Instrument": "ALVG.DE",

            "Company Common Name": "Allianz SE",

            "Organization PermID": "4295870171",

            "Reporting Currency": ""

        }

    ],

    "data": [

        [

            "ALVG.DE",

            "2018-12-31",

            100,

            "2019-09-20T00:00:00",

            285866,

            37.7999999999999,

            24

        ]

    ],

    "messages": {

        "codes": [

            [

                -1,

                -1,

                -1,

                -1,

                -1,

                -1,

                -1

            ]

        ],

        "descriptions": [

            {

                "code": -1,

                "description": "ok"

            }

        ]

    },

    "headers": [

        {

            "name": "instrument",

            "title": "Instrument",

            "type": "string",

            "description": "The requested Instrument as defined by the user."

        },

...

       {

            "name": "TR.AvgTrainingHours",

            "title": "Average Training Hours",

            "type": "number",

            "decimalChar": ".",

            "description": "Average hours of training per year per employee.\n- if the company has reported the total training hours, divide the value by total number of employees and not employees trained only\n- consider only employee average training hours\n- include all types of training given to general employees (such as health & safety, environmental, emergency response, skills & career development training)\n- if the value is given in days, multiply by 8, assuming that 1 day = 8 hours worked"

        }

    ]

}

Note: if a returned value is null, that means no data is available. If it is 0, then it means a value exists, and it is zero.

Messages, validation of returned data

Messages are numeric codes that validate received output fields.

There is one message record per returned data record, and one message value per output field in a data record, as can be seen in the example above.

The meaning of the returned message codes is explained in the accompanying description record:

Code Meaning
-1 ok (the value is ok)
-2 empty (there is no available value)

As we saw previously, these messages can be disabled using the format=noMessages API call parameter.

Calling up the data universe

This simple API call returns the universe of instruments for which ESG data is currently available. This is very useful to find out if there is any data for a specific company, and as such it is a good idea to store this list locally on your servers. As the coverage is regularly increased, if you store this list locally then we recommend you update it on a daily basis.

Parameters: format (optional)

Examples:

    	
            

https://api.refinitiv.com/data/environmental-social-governance/v1/universe?format=noMessages

https://api.refinitiv.com/data/environmental-social-governance/v1/universe

Output:

After the count of results, variability and universe objects, we get the actual data for the universe of instruments.

Fields are the PermID, the primary RIC and the company common name, you can use these to map between a name, a RIC and a PermID:

    	
            

...

    "data": [

        [

            "4295533401",

            "RST",

            "Rosetta Stone Inc"

        ],

        [

            "4295613014",

            "PWF.TO",

            "Power Financial Corp"

        ],

 

...

This is followed by the messages with their descriptions (except if messages were disabled):

    	
            

...

    ],

    "messages": {

        "codes": [

            [

                -1,

                -1,

                -1

            ],

            [

                -1,

                -1,

                -1

            ],

...

        ],

        "descriptions": [

            {

                "code": -2,

                "description": "empty"

            },

            {

                "code": -1,

                "description": "ok"

            }

        ]

    },

At the end, we find the headers, i.e. the definitions of the 3 data fields:

    	
            

...

    "headers": [

        {

            "name": "TR.OrganizationID",

            "title": "Organization PermID",

            "type": "string",

            "description": "Organization level permanent identifier. (OA Permid, Organization Permid, etc)"

        },

        {

            "name": "TR.PrimaryRIC",

            "title": "Ric Code",

            "type": "string",

            "description": "Reuters Identification Code for the primary issue of a company."

        },

        {

            "name": "TR.CommonName",

            "title": "Common name",

            "type": "string",

            "description": "Where available provides the name of the organisation most commonly used."

        }

    ]

}

ESG supports special RICs that do not deliver market depth data (like BNPP.PA1, TEF.MC1, MSFT.NB), but this call will only deliver the main RICs (BNPP.PA, TEF.MC, MSFT.O).

Basic data for public websites

This API call delivers the latest value for a limited set of data, including mainly the following measures: CO2 emissions in tonnes, percentage of women managers and average hours of training per employee.

Parameters: universe (mandatory), format (optional)

Examples:

    	
            

https://api.refinitiv.com/data/environmental-social-governance/v1/views/basic?universe=ALVG.DE

https://api.refinitiv.com/data/environmental-social-governance/v1/views/basic?universe=ALVG.DE,VOD.L

https://api.refinitiv.com/data/environmental-social-governance/v1/views/basic?universe=4295870171

https://api.refinitiv.com/data/environmental-social-governance/v1/views/basic?universe=ALVG.DE&format=noMessages

Output:

The (nearly) complete output can be seen here.

After the count of results and the variability, we get the universe record which describes the instrument, followed by the data, the messages and the headers.

Here is the actual data, for Allianz:

    	
            

    "data": [

        [

            "ALVG.DE",

            "2018-12-31",

            100,

            "2019-09-20T00:00:00",

            285866,

            37.7999999999999,

            24

        ]

    ],

We can understand the data by using the returned header fields. They show that we received the values for ALVG.DE for the end of the latest current available year (2018). The reporting scope (100) means 100% of the companies activities are covered by the ESG report. We know when the ESG auditor last updated the metrics (2019-09-20), the total CO2 emissions (285866 tonnes), the percentage of women managers (37.8%) and the average hours of training per year per employee (24).

Standard data for private websites

API calls for standard data will return 3 years of history, except if the start and end parameters were used to restrict that range to a subset of years.

There are 2 API calls for standard data, one for measures that delivers more than 400 data fields (the actual number can vary depending on the company), and one just for scores that delivers 16 scores. The measures call actually also includes the scores.

Parameters: universe (mandatory), format (optional), start and end (optional)

Examples:

    	
            

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-standard?universe=ALVG.DE

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-standard?universe=ALVG.DE,VOD.L

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-standard?universe=4295870171

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-standard?universe=ALVG.DE&format=noMessages

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-standard?universe=ALVG.DE&start=-1&end=0

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-standard?universe=ALVG.DE&format=noMessages&start=-1&end=0

 

https://api.refinitiv.com/data/environmental-social-governance/v1/views/scores-standard?universe=ALVG.DE

https://api.refinitiv.com/data/environmental-social-governance/v1/views/scores-standard?universe=4295870171

https://api.refinitiv.com/data/environmental-social-governance/v1/views/scores-standard?universe=ALVG.DE&format=noMessages

https://api.refinitiv.com/data/environmental-social-governance/v1/views/scores-standard?universe=ALVG.DE&start=0&end=0

https://api.refinitiv.com/data/environmental-social-governance/v1/views/scores-standard?universe=ALVG.DE&format=noMessages&start=-1&end=-1

Output:

After the count of results and the variability, we get the universe record which describes the instrument, followed by the data, the messages and the headers.

Here is an exerpt of the measures-standard data for Allianz (which starts with the 16 scores, which are also delivered by the scores-standard call):

    	
            

    "data": [

        [

            "2018-12-31",

            48.0697490253411,

            89.8894980506822,

            6.25,

            88.1263616557734,

            91.4351851851851,

            89.8889128559102,

            86.3425925925925,

            85.8796296296296,

            92.8240740740741,

            84.9537037037037,

            96.0648148148148,

            99.7685185185185,

            93.75,

            99.0131578947368,

            75.3289473684211,

            74.0131578947368,

            null,

            "2019-09-20T00:00:00",

            true,

            true,

            true,

...

We can understand the data by using the returned header fields. They show that we received the values for ALVG.DE for the end of the latest current available year (2018). The overall combined ESG score was 48.07 (this score on the 3 pillars is overlayed with the controversies score), the ESG score was 89.89 (without taking controversies into account), the controversies score is 6.25. And so on ...

Here is an exerpt of the scores data for Allianz, containing all the latest scores :

    	
            

    "data": [

        [

            "ALVG.DE",

            "2018-12-31",

            48.0697490253411,

            89.8894980506822,

            6.25,

            88.1263616557734,

            91.4351851851851,

            89.8889128559102,

            86.3425925925925,

            85.8796296296296,

            92.8240740740741,

            84.9537037037037,

            96.0648148148148,

            99.7685185185185,

            93.75,

            99.0131578947368,

            75.3289473684211,

            74.0131578947368,

            100,

            null,

            "2019-09-20T00:00:00"

        ],

It contains the same data as the first part of the measures call illustrated above.

Full data for the professional package

API calls for full data will return all years of history, except if the start and end parameters were used to restrict that range to a subset of years.

There are 2 API calls for full data, one for measures that delivers more than 400 data fields (the actual number can vary depending on the company), and one just for scores that delivers 16 scores. The measures call actually also includes the scores.

Parameters: universe (mandatory), format (optional), start and end (optional)

Examples:

    	
            

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-full?universe=ALVG.DE

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-full?universe=ALVG.DE,VOD.L

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-full?universe=4295870171

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-full?universe=ALVG.DE&format=noMessages

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-full?universe=ALVG.DE&start=-1&end=0

https://api.refinitiv.com/data/environmental-social-governance/v1/views/measures-full?universe=ALVG.DE&format=noMessages&start=-10&end=-10

 

https://api.refinitiv.com/data/environmental-social-governance/v1/views/scores-full?universe=ALVG.DE

https://api.refinitiv.com/data/environmental-social-governance/v1/views/scores-full?universe=4295870171

https://api.refinitiv.com/data/environmental-social-governance/v1/views/scores-full?universe=ALVG.DE&format=noMessages

https://api.refinitiv.com/data/environmental-social-governance/v1/views/scores-full?universe=ALVG.DE&start=0&end=0

https://api.refinitiv.com/data/environmental-social-governance/v1/views/scores-full?universe=ALVG.DE&format=noMessages&start=-5&end=0

Output:

The output is similar to that of the standard calls, but with more records as it can deliver the full history.