Endpoint schema
Companies
Retrieve company-level information, ratings, screens and metrics
Retrieve the list of available companies
Causes
Retrieve the list of available causes on Ethos
Funds
Retrieve fund-level information, ratings and metrics
Retrieve the list of available funds
Help
Submit requests for coverage additions or customer support
Metrics
Retrieve the list of available metrics on Ethos
Portfolios
Retrieve and submit data on one or more of your Portfolios
Questionnaires
Retrieve and submit data on one or more of your
Questionnaires
Reports
Retrieve and submit data on one or more of your Reports
API Keys
Every firm on Ethos has a unique firm_id and secret that you can use to access the Ethos API. You can find your firm_id and secret under "Keys" in your account on Ethos.
Protocols and headers
The Ethos API uses POST requests to communicate and HTTP response codes to indicate status and errors. All responses come in standard JSON. The Ethos API is served over HTTPS TLS v1.2+ to ensure data privacy. All requests must include a Content-Type of application/json and the body must be valid JSON.
Almost all Ethos API endpoints require a firm_id and secret. These may be sent either in the request body or in the headers ETHOS-FIRM-ID and ETHOS-SECRET.
Every Ethos API response includes a request_id in the returned JSON response (see examples below). The request_id is included regardless of whether or not the API request succeeded or failed. For faster support, include the request_id when contacting support regarding a specific API call.
API host
All testing should be done in the Development and Staging environments.
Companies
Retrieve data on one or more companies, including company information, classification, ESG screens, ratings and metrics.
In this section
/companies/get
The /companies/get endpoint allows you to receive data about one or more Companies, including classification, geography, screens (e.g., fossil fuel, gambling or nuclear), and more.
Companies are returned in alphabetical order by standard Ethos name. Due to the potentially large amount of data associated with multiple Companies, results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_companies response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/companies/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "symbols": [String],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getCompanies (firm_id, secret , {
- symbols: [String] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const companies = response.companies
- response = client.Companies.get(firm_id, secret)
- companies = response['companies']
- # Manipulate the count and offset parameters to paginate
- # companies and retrieve all available data
- while len (companies) < response[' total_companies' ]:
- response = client.Companies.get(firm_id, secret,
- offset= len (companies))
- companies.extend(response[ 'companies' ])
- response = @client .companies. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # companies and retrieve all available data
- response = @client .companies. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_companies = response[ 'companies' ]
Response fields
Example response
- {
- "companies" : [
- {
- "company_id" : 553
- "name" : "Apple",
- "symbol" : "AAPL",
- "cusip", : "37833100",
- "isin" : "US0378331005",
- "uuid" : "II|V1|FactSetId|000C7F-E|17",
- "open_figi" : "BBG000B9XRY4",
- "summary_pdf_link" : "https://....pdf",
- "updated_at" : "2022-06-19",
- "deleted_at" : null,
- "price" : "200.5",
- "classifications" : {
- "sector" : "Technology & Communications",
- "industry" : "Software & Services",
- "sub_industry" : "Big Tech - Major Diversified",
- }
- "geography" : {
- "region" : "United States",
- "hq_country" : "United States",
- "hq_state" : "California",
- "hq_city" : "Cupertino",
- }
- "financial" : {
- "revenue" : 347155005440,
- "market_value" : 2457875513344,
- "market_cap" : "mega",
- "net_income" : 100555000000,
- "price" : "168.64",
- "earnings_per_share" : "6.015",
- "return_on_assets" : "0.2",
- "return_on_equity" : "1.46",
- "net_invested_capital" : 194730000000,
- "dividends_per_share" : "0.865",
- "net_debt" : 85679000000,
- "cash_and_short_term" : 63913000000,
- }
- "performance" : {
- "return_one_day" : "-2.102473",
- "return_one_week" : "-5.29824",
- "return_one_month" : "-3.678318",
- "return_three_months" : "14.046122",
- "return_one_year" : "24.975637",
- "return_two_years" : "108.424224",
- "return_three_years" : "304.289341",
- "return_five_years" : "369.4877506",
- }
- "executives" : [{
- "name" : "Mr. Timothy D. Cook",
- "title" : "CEO & Director",
- "is_ceo" : true,
- "age" : 61,
- "pay" : 16386559,
- ]}
- "screens" : {
- "advertising" : pass,
- "alcohol" : pass,
- "animal_testing" : pass,
- "cannabis" : pass,
- "carbon_emissions_intensity" : pass,
- "coal" : pass,
- "contraceptives" : pass,
- "deforestation_financing" : pass,
- "deforestation_supply_chain" : pass,
- "discrimination_cont" : pass,
- "environmental_cont" : pass,
- "factory_farming" : pass,
- "fast_food" : pass,
- "fossil_fuel" : pass,
- "fur" : pass,
- "gambling" : pass,
- "genetic_engineering" : pass,
- "health_cont" : pass,
- "human_trafficking" : fail,
- "interest_based" : pass,
- "interest_bearing_debt" : pass,
- "interest_bearing_securities" : pass,
- "misleading_communication" : pass,
- "music" : pass,
- "no_sbti" : pass,
- "nuclear" : pass,
- "oil_and_gas" : pass,
- "opioid_cont" : pass,
- "oppressive_cont" : fail,
- "pork" : pass,
- "pornography" : pass,
- "predatory_lending" : pass,
- "prison_involvement" : pass,
- "privacy_cont" : fail,
- "pro_life" : pass,
- "single_use_plastic" : pass,
- "stem_cell" : pass,
- "sugar" : pass,
- "tobacco" : pass,
- "weapons" : pass
- }
- }
- ],
- "offset_companies" : 0 ,
- "paged_companies" : 1 ,
- "total_companies" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/companies/screens/get
The /companies/screens/get endpoint allows you to receive ESG Screens data about one or more Companies.
You must specify at least one Company identifier (symbol, CUSIP, ISIN or UUID).
Companies are returned in alphabetical order by standard Ethos name. Due to the potentially large amount of data associated with multiple Companies, results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_companies response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/companies/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "symbols": [String],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getCompanyScreens (firm_id, secret , {
- symbols: [String] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const companies = response.companies
- response = client.CompanyScreens.get(firm_id, secret)
- companies = response['companies']
- # Manipulate the count and offset parameters to paginate
- # companies and retrieve all available data
- while len (companies) < response[' total_companies' ]:
- response = client.CompanyScreens.get(firm_id, secret,
- offset= len (companies))
- companies.extend(response[ 'companies' ])
- response = @client .company_screen_exclusions. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # companies and retrieve all available data
- response = @client .company_screen_exclusions. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_companies = response[ 'companies' ]
Response fields
Example response
- {
- "companies" : [
- {
- "company_id" : 553,
- "symbol" : "AAPL",
- "cusip" : "37833100",
- "isin" : "US0378331005",
- "uuid" : "II|V1|FactSetId|000C7F-E|17",
- "open_figi" : "BBG000B9XRY4",
- "name" : "Apple",
- "updated_at" : "2022-06-19"
- "screens" : {
- "advertising" : {
- "pass" : "false",
- "revenue_percent" : 0.157,
- "updated_at" : "2022-06-19"
- },
- "alcohol" : {
- "pass" : "true",
- "revenue_percent" : 0,
- "updated_at" : "2022-06-19"
- },
- "animal_testing" : {
- "pass" : "true",
- "revenue_percent" : 0,
- "updated_at" : "2022-06-19"
- },
- "cannabis" : {
- "pass" : "true",
- "revenue_percent" : 0,
- "updated_at" : "2022-06-19"
- },
- "carbon_emissions_intensity" : {
- "pass" : "true",
- "revenue_percent" : 0,
- "updated_at" : "2022-06-19"
- },
- "..." : {
- "pass" : "true",
- "revenue_percent" : 0,
- "updated_at" : "2022-06-19"
- }
- }
- }
- ],
- "offset_companies" : 0 ,
- "paged_companies" : 1 ,
- "total_companies" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/companies/ratings/get
The /companies/ratings/get endpoint allows you to receive ESG Ratings data about one or more Companies.
You must specify at least one Company identifier (symbol, CUSIP, ISIN, UUID, or portfolio_ids). Optionally specify the id of a cause (topic) you want to retrieve a Rating for. Defaults to returning ratings for all causes on Ethos.
Companies are returned in alphabetical order by standard Ethos name. Due to the potentially large amount of data associated with multiple Companies, results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_companies response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/companies/ratings/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "symbols": [String],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getCompanyRatings (firm_id, secret , {
- symbols: [String] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const companies = response.companies
- response = client.CompanyRatings.get(firm_id, secret)
- companies = response['companies']
- # Manipulate the count and offset parameters to paginate
- # companies and retrieve all available data
- while len (companies) < response[' total_companies' ]:
- response = client.CompanyRatings.get(firm_id, secret,
- offset= len (companies))
- companies.extend(response[ 'companies' ])
- response = @client .company_ratings. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # companies and retrieve all available data
- response = @client .company_ratings. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_companies = response[ 'companies' ]
Response fields
Example response
- {
- "companies" : [
- {
- "company_id" : 553,
- "symbol" : "AAPL",
- "cusip" : "37833100",
- "isin" : "US0378331005",
- "uuid" : "II|V1|FactSetId|000C7F-E|17",
- "open_figi" : "BBG000B9XRY4",
- "name" : "Apple",
- "updated_at" : "2022-06-19",
- "ratings" : [
- {
- "cause" : "Gender equality",
- "cause_id" : "37",
- "updated_at" : "2022-06-19",
- "score" : 84.1,
- "rank" : 119,
- "percentile" : 0.85
- }
- ]
- }
- ],
- "offset_companies" : 0 ,
- "paged_companies" : 1 ,
- "total_companies" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/companies/metrics/get
The /companies/metrics/get endpoint allows you to receive ESG Metrics data about one or more Companies.
You must specify at least one Company identifier (symbol, CUSIP, ISIN or UUID). Optionally specify the id of a Metric you want to retrieve data for. Defaults to all Metrics on Ethos.
Companies are returned in alphabetical order by standard Ethos name. Due to the potentially very large amount of data associated with multiple Companies, results are paginated in groups of max 10. Manipulate the count and offset parameters in conjunction with the total_companies response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/companies/metrics/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "symbols": [String],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getCompanyMetrics (firm_id, secret , {
- symbols: [String] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const companies = response.companies
- response = client.CompanyMetrics.get(firm_id, secret)
- companies = response['companies']
- # Manipulate the count and offset parameters to paginate
- # companies and retrieve all available data
- while len (companies) < response[' total_companies' ]:
- response = client.CompanyMetrics.get(firm_id, secret,
- offset= len (companies))
- companies.extend(response[ 'companies' ])
- response = @client .company_metrics. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # companies and retrieve all available data
- response = @client .company_metrics. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_companies = response[ 'companies' ]
Response fields
Example response
- {
- "companies" : [
- {
- "company_id" : 553,
- "symbol" : "AAPL",
- "cusip" : "37833100",
- "isin" : "US0378331005",
- "uuid" : "II|V1|FactSetId|000C7F-E|17",
- "open_figi" : "BBG000B9XRY4",
- "name" : "Apple",
- "updated_at" : "2022-06-19",
- "metrics" : [
- {
- "name" : "Advertising fines and violations",
- "metric_id" : "224",
- "description" : "Sum of fines incurred over the past four years from the Federal Trade Commission, related to advertising",
- "link" : "https://www.goodjobsfirst.org/violation-tracker",
- "uom" : "$ fines",
- "updated_at" : "2022-06-30",
- "esg_category" : "social",
- "score_base" : 113000000,
- "score_normalized" : 0,
- "peer_value" : false
- }
- ]
- }
- ],
- "offset_companies" : 0 ,
- "paged_companies" : 1 ,
- "total_companies" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/companies/list
The /companies/list endpoint allows you to receive a list of Companies available on Ethos, with basic identifiers for each Company.
Companies are returned in alphabetical order by name. No paging is included in the response.
If you would like more detailed information about a company, use the /companies/get endpoint below.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/companies/list \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- }'
- const response = await client
- . listCompanies (firm_id, secret )
- . catch ((err) => {
- // handle error
- })
- const companies = response.companies
- response = client.Companies.list(firm_id, secret)
- companies = response['companies']
- response = @client .companies. list ( @firm_id , @secret )
- total_companies = response[ 'companies' ]
Response fields
Example response
- {
- "companies" : [
- {
- "company_id" : 553,
- "symbol" : "AAPL",
- "cusip" : "37833100",
- "isin" : "US0378331005",
- "uuid" : "II|V1|FactSetId|000C7F-E|17",
- "open_figi" : "BBG000B9XRY4",
- "name" : "Apple",
- "updated_at" : "2022-06-19"
- }
- ],
- "total_companies" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
Causes
Retrieve a list of causes available on Ethos. Ratings of companies and funds can be scoped to specific causes
In this section
/causes/list
The /causes/list endpoint allows you to receive a list of Causes available on Ethos, with basic information about each Cause.
Causes are returned in alphabetical order by name. There are 45 total Causes available on Ethos; no paging is included in the response.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/causes/list \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "cause_ids": [Integer]
- }
- }'
- const response = await client
- . listCauses (firm_id, secret , {
- cause_ids: [Integer]
- })
- . catch ((err) => {
- // handle error
- })
- const causes = response.causes
- response = client.Causes.list(firm_id, secret)
- causes = response['causes']
- response = client.Causes.list(firm_id, secret,
- offset= len (causes))
- causes.extend(response[ 'causes' ])
- response = @client .causes. list ( @firm_id , @secret )
- total_companies = response[ 'causes' ]
Response fields
Example response
- {
- "causes" : [
- {
- "cause_id" : 32
- "name" : "Sustainable use of water"
- "description" : "Promote sustainable management of water everywhere"
- "problem" : "Less than 1.2% of all water on earth is available for human use, and the UN projects a 40% shortfall in meeting demand for global water by 2030. More efficient use of water is critical to addressing this shortfall, as well as mitigating the impact of increasing droughts and floods resulting from climate change. Companies play a central role in how water is used, especially in industrial, agricultural, and food industries. Companies can contribute to sustainable water use in several ways, including by reducing water withdrawals, especially in high-stress water regions; setting specific targets for their water use and establishing robust policies for water use and management; engaging with their value chains on sustainable water use; leading on developing and implementing international standards for water use; and setting board and executive compensation incentives to better manage water issues"
- "keywords" : "sustainable farming, industrial agriculture, sustainability, access to water, water stress"
- }
- ],
- "total_causes" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
Funds
Retrieve current data on one or more funds, including fund information, classification, ESG screens, ratings and metrics.
In this section
/funds/get
The /funds/get endpoint allows you to receive data about one or more Funds, including classification, expense ratio and AUM, and screens (e.g., whether the fund holds fossil fuel, gambling, nuclear or other types of companies).
Funds are returned in alphabetical order by standard Ethos name. Due to the potentially large amount of data associated with multiple Funds, results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_funds response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/funds/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "symbols": [String],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getFunds (firm_id, secret , {
- symbols: [String] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const funds = response.funds
- response = client.Funds.get(firm_id, secret)
- funds = response['funds']
- # Manipulate the count and offset parameters to paginate
- # funds and retrieve all available data
- while len (funds) < response[' total_funds' ]:
- response = client.Funds.get(firm_id, secret,
- offset= len (funds))
- funds.extend(response[ 'funds' ])
- response = @client .funds. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # funds and retrieve all available data
- response = @client .funds. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_funds = response[ 'funds' ]
Response fields
Example response
- {
- "funds" : [
- {
- "fund_id" : 553,
- "symbol" : "VEGN",
- "cusip" : "26922A 297",
- "isin" : "US26922A2978",
- "open_figi" : "BBG00Q6L3CX3",
- "name" : "US Vegan Climate ETF",
- "updated_at" : "2022-06-19",
- "price" : "200.5",
- "classifications" : {
- "fund_type" : "ETF",
- "asset_class" : "Equities",
- "category" : "Equity - US Large Blend",
- "style" : "Large Blend",
- "fund_family" : "Beyond Advisors IC",
- },
- "logos" : {
- "original" : "https://d1bgieexblpmvb.cloudfront.net/funds/logos/beyond_investing.png",
- "square" : "https://d1bgieexblpmvb.cloudfront.net/funds/logos/200x200/beyond_investing.png"
- },
- "financial" : {
- "expense_ratio" : "0.006",
- "aum" : "73111284"
- },
- "performance" : {
- "return_one_week" : "1.049524",
- "return_one_month" : "-0.110756",
- "return_three_months" : "7.283246",
- "return_one_year" : "18.069027",
- "return_two_years" : "-1.680218",
- "return_three_years" : "10.446368",
- "return_five_years" : "null"
- },
- "screens" : {
- "abortion" : "2.23%",
- "advertising" : "0.74%",
- "alcohol" : "0%",
- "animal_testing" : "0%",
- "cannabis" : "0%",
- "carbon_emissions_intensity" : "5.58%",
- "coal" : "0%",
- "contraceptives" : "0.74%",
- "deforestation_financing" : "0.74%",
- "deforestation_supply_chain" : "2.23%",
- "discrimination_cont" : "12.64%",
- "environmental_cont" : "15.61%",
- "factory_farming" : "0%",
- "fast_food" : "0%",
- "fossil_fuel" : "0%",
- "fur" : "0%",
- "gambling" : "0%",
- "genetic_engineering" : "0%",
- "health_cont" : "6.32%"
- "human_trafficking" : "2.23%",
- "interest_based" : "21.93%",
- "interest_bearing_debt" : "13.75%",
- "interest_bearing_securities" : "8.18%",
- "misleading_communication" : "10.04%",
- "music" : "0.37%",
- "no_sbti" : "72.49%",
- "nuclear" : "0%",
- "oil_and_gas" : "0%",
- "opioid_cont" : "0.37%",
- "oppressive_cont" : "3.72%",
- "pork" : "0%",
- "pornography" : "0%",
- "predatory_lending" : "1.12%",
- "prison_involvement" : "3.35%",
- "privacy_cont" : "5.95%",
- "single_use_plastic" : "0.37%",
- "stem_cell" : "0%",
- "sugar" : "0.37%",
- "tobacco" : "0%",
- "weapons" : "0%"
- }
- }
- ],
- "offset_funds" : 0 ,
- "paged_funds" : 1 ,
- "total_funds" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/funds/screens/get
The /funds/screens/get endpoint allows you to receive ESG Screens data about one or more Funds.
Funds are returned in alphabetical order by standard Ethos name. Due to the potentially large amount of data associated with multiple Funds, results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_funds response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/funds/screens/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "symbols": [String],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getFundScreens (firm_id, secret , {
- symbols: [String] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const funds = response.funds
- response = client.FundScreens.get(firm_id, secret)
- funds = response['funds']
- # Manipulate the count and offset parameters to paginate
- # funds and retrieve all available data
- while len (funds) < response[' total_funds' ]:
- response = client.FundScreens.get(firm_id, secret,
- offset= len (funds))
- funds.extend(response[ 'funds' ])
- response = @client .fund_screens. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # funds and retrieve all available data
- response = @client .fund_screens. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_funds = response[ 'funds' ]
Response fields
Example response
- {
- "funds" : [
- {
- "fund_id" : 553,
- "symbol" : "VEGN",
- "cusip" : "26922A 297",
- "isin" : "US26922A2978",
- "open_figi" : "BBG00Q6L3CX3",
- "name" : "US Vegan Climate ETF",
- "updated_at" : "2022-06-19",
- "screens" : {
- "advertising" : {
- "fail_count" : 2,
- "revenue_percent" : 0.02,
- "updated_at" : "2022-06-19"
- },
- "..." : {
- "fail_count" : 10,
- "revenue_percent" : 0.11,
- "updated_at" : "2022-06-19"
- }
- }
- }
- ],
- "offset_funds" : 0 ,
- "paged_funds" : 1 ,
- "total_funds" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/funds/ratings/get
The /funds/ratings/get endpoint allows you to receive ESG Ratings data about one or more Funds.
Optionally specify the id of a cause (topic) you want to retrieve a Rating for. Defaults to returning ratings for all causes on Ethos.
Funds are returned in alphabetical order by standard Ethos name. Due to the potentially large amount of data associated with multiple Funds, results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_funds response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/funds/ratings/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "symbols": [String],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getFundRatings (firm_id, secret , {
- symbols: [String] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const funds = response.funds
- response = client.FundRatings.get(firm_id, secret)
- funds = response['funds']
- # Manipulate the count and offset parameters to paginate
- # funds and retrieve all available data
- while len (funds) < response[' total_funds' ]:
- response = client.FundRatings.get(firm_id, secret,
- offset= len (funds))
- funds.extend(response[ 'funds' ])
- response = @client .fund_ratings. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # funds and retrieve all available data
- response = @client .fund_ratings. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_funds = response[ 'funds' ]
Response fields
Example response
- {
- "funds" : [
- {
- "fund_id" : 2858,
- "symbol" : "VEGN",
- "cusip" : "26922A 297",
- "isin" : "US26922A2978",
- "open_figi" : "BBG00Q6L3CX3",
- "name" : "US Vegan Climate ETF",
- "updated_at" : "2022-06-19",
- "ratings" : [
- {
- "cause" : "Gender equality",
- "cause_id" : "37",
- "updated_at" : "2022-06-19",
- "score" : 88.2,
- "rank" : 84,
- "percentile" : 0.92
- }
- ]
- }
- ],
- "offset_funds" : 0 ,
- "paged_funds" : 1 ,
- "total_funds" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/funds/metrics/get
The /funds/metrics/get endpoint allows you to receive ESG Metrics data about one or more Funds.
Optionally specify the id of a Metric you want to retrieve data for. Defaults to all Metrics on Ethos.
Funds are returned in alphabetical order by standard Ethos name. Due to the potentially large amount of data associated with multiple Funds, results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_funds response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/funds/metrics/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "symbols": [String],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getFundMetrics (firm_id, secret , {
- symbols: [String] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const funds = response.funds
- response = client.FundMetrics.get(firm_id, secret)
- funds = response['funds']
- # Manipulate the count and offset parameters to paginate
- # funds and retrieve all available data
- while len (funds) < response[' total_funds' ]:
- response = client.FundMetrics.get(firm_id, secret,
- offset= len (funds))
- funds.extend(response[ 'funds' ])
- response = @client .fund_metrics. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # funds and retrieve all available data
- response = @client .fund_metrics. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_funds = response[ 'funds' ]
Response fields
Example response
- {
- "funds" : [
- {
- "fund_id" : 2858,
- "symbol" : "VEGN",
- "cusip" : "26922A 297",
- "isin" : "US26922A2978",
- "open_figi" : "BBG00Q6L3CX3",
- "name" : "US Vegan Climate ETF",
- "updated_at" : "2022-06-19",
- "metrics" : [
- {
- "name" : "Advertising fines and violations",
- "metric_id" : "224",
- "description" : "Sum of fines incurred over the past four years from the Federal Trade Commission, related to advertising",
- "link" : "https://www.goodjobsfirst.org/violation-tracker",
- "uom" : "$ fines",
- "updated_at" : "2022-06-19",
- "esg_category" : "social",
- "score_base" : 42100000,
- "score_normalized" : 0
- }
- ]
- }
- ],
- "offset_funds" : 0 ,
- "paged_funds" : 1 ,
- "total_funds" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/funds/list
The /funds/list endpoint allows you to receive a list of Funds available on Ethos, with basic identifiers for each Fund.
Funds are returned in alphabetical order by name. No paging is included in the response.
If you would like more detailed information about a fund, use the /funds/get endpoint below.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/funds/list \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- }'
- const response = await client
- . listFunds (firm_id, secret )
- . catch ((err) => {
- // handle error
- })
- const funds = response.funds
- response = client.Funds.list(firm_id, secret)
- funds = response['funds']
- response = @client .funds. list ( @firm_id , @secret )
- total_funds = response[ 'funds' ]
Response fields
Example response
- {
- "funds" : [
- {
- "fund_id" : 553,
- "symbol" : "VEGN",
- "cusip" : "26922A 297",
- "isin" : "US26922A2978",
- "open_figi" : "BBG00Q6L3CX3",
- "name" : "US Vegan Climate ETF",
- "updated_at" : "2022-06-19"
- }
- ],
- "total_funds" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
Help
Submit requests for coverage additions or customer support
In this section
/help/coverage_requests/get
The /help/coverage_requests/get endpoint allows you to receive a list of all coverage requests you have made, including status of each request.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/help/coverage_requests/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- }'
- const response = await client
- . listCoverageRequests (firm_id, secret)
- . catch ((err) => {
- // handle error
- })
- const coverageRequests = response.coverage_requests
- response = client.CoverageRequests.get(firm_id, secret)
- coverageRequests = response['coverage_requests']
- response = @client .coverage_requests. get ( @firm_id , @secret )
Response fields
Example response
- {
- "coverage_requests" : {
- "available_count" : 18,
- "in_progress_count" : 4,
- "in_progress_requests" : [{
- "name" : Apple,
- "status" : "In Progress",
- "created_at" : "October 1, 2023",
- "updated_at" : "October 2, 2023",
- "record_type" : "Company",
- "public_status" : "Public",
- "symbol" : "AAPL",
- "isin" : "US0378331005",
- "cusip" : "037833100",
- "open_figi" : "BBG000B9XRY4",
- "lxid" : ""
- }],
- "completed_count" : 24,
- "completed_requests" : [{
- "name" : Apple,
- "status" : "In Progress",
- "created_at" : "October 1, 2023",
- "updated_at" : "October 2, 2023",
- "record_type" : "Company",
- "public_status" : "Public",
- "symbol" : "AAPL",
- "isin" : "US0378331005",
- "cusip" : "037833100",
- "open_figi" : "BBG000B9XRY4",
- "lxid" : ""
- }],
- },
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/help/coverage_requests/create
The /help/coverage_requests/create endpoint allows you to submit one or more requests for coverage additions on Ethos.
You can also view all submitted coverage requests and your remaining requests in your account under Support > Coverage requests.
Note you can test this endpoint with symbols "AAPL" or "PRIVATE.TESTCO" without affecting your available coverage additions.
If you are using Test mode (contact us for more information), coverage requests you create will auto-complete after 2 days.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/help/coverage_requests/create \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "coverage_requests": [{
- "symbol": String,
- "name": String,
- "isin": String,
- ]}
- }'
- const response = await client
- . createCoverageRequests (firm_id, secret , [{
- symbol: String ,
- name: String ,
- isin: String ,
- }])
- . catch ((err) => {
- // handle error
- })
- const created_coverage_requests = response.created_coverage_requests
- response = client.CoverageRequests.create(firm_id, secret, [{
- symbol: String
- name: String
- isin: String
- }])
- response = @client .coverage_requests. create ( @firm_id , @secret , [{symbol: String, name: String, isin: String}] )
Response fields
Example response
- {
- "created_coverage_requests" : [{
- "status" : 200,
- "message" : Successfully created or updated coverage request,
- "name" : Apple,
- "record_type" : "Company",
- "public_status" : "Public",
- "symbol" : "AAPL",
- "isin" : "US0378331005",
- "cusip" : "037833100",
- "open_figi" : "BBG000B9XRY4",
- "lxid" : ""
- }],
- "errors" : []
- "coverage_requests_summary" : {
- "available_count" : 18,
- "in_progress_count" : 3,
- "completed_count" : 12
- },
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/help/tickets/get
The /help/tickets/get endpoint allows you to receive a list of all support tickets you have made, including status of each tickets.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/help/tickets/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- }'
- const response = await client
- . listTickets (firm_id, secret)
- . catch ((err) => {
- // handle error
- })
- const tickets = response.tickets
- response = client.Tickets.get(firm_id, secret)
- tickets = response['tickets']
- response = @client .tickets. get ( @firm_id , @secret )
Response fields
Example response
- {
- "tickets" : {
- "open_count" : 1,
- "open_tickets" : [{
- "email" : email@example.co,
- "message" : "Support request message",
- "created_at" : "October 1, 2023",
- "updated_at" : "October 2, 2023",
- "status" : "Open"
- }],
- "closed_count" : 4,
- "closed_tickets" : [{
- "email" : email@example.co,
- "message" : "Support request message",
- "created_at" : "October 1, 2023",
- "updated_at" : "October 2, 2023",
- "status" : "Open"
- }],
- },
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/help/tickets/create
The /help/tickets/create endpoint allows you to submit one or more support requests (tickets).
Request fields
Example request
- curl -X POST https://development.ethosesg.com/help/tickets/create \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "tickets": [{
- "emails": [String],
- "cc": [String],
- "message": String,
- ]}
- }'
- const response = await client
- . createTickets (firm_id, secret , [{
- emails: [String] ,
- cc: [String] ,
- message: String ,
- }])
- . catch ((err) => {
- // handle error
- })
- const created_tickets = response.created_tickets
- response = client.Tickets.create(firm_id, secret, [{
- emails: [String]
- cc: [String]
- message: String
- }])
- response = @client .tickets. create ( @firm_id , @secret , [{emails: [String], cc: [String], message: String}] )
Response fields
Example response
- {
- "created_tickets" : [{
- "status" : 200,
- "message" : Successfully created ticket,
- "emails" : [email@example.co, email2@example.co],
- "cc" : [supportinbox@example.co],
- "message" : "Support request message",
- "status" : "Open"
- }],
- "errors" : []
- "tickets_summary" : {
- "open_count" : 3,
- "closed_count" : 12
- },
- "max_id" : 100
- "request_id" : "28HyTu"
- }
Metrics
Retrieve a list of metrics available on Ethos. Metrics of companies and funds (info above) can be scoped to specific metrics
In this section
/metrics/list
The /metrics/list endpoint allows you to receive a list of Metrics available on Ethos, with basic information about each Metric.
Metrics are returned in alphabetical order by name. Due to the potentially large amount of data associated with multiple Metrics, results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_metrics response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/metrics/list \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "metric_ids": [Integer],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . listMetrics (firm_id, secret , {
- metric_ids: [Integer]
- })
- . catch ((err) => {
- // handle error
- })
- const metrics = response.metrics
- response = client.Metrics.list(firm_id, secret)
- metrics = response['metrics']
- # Manipulate the count and offset parameters to paginate
- # metrics and retrieve all available data
- while len (metrics) < response[' total_metrics' ]:
- response = client.Metrics.list(firm_id, secret,
- offset= len (metrics))
- metrics.extend(response[ 'metrics' ])
- response = @client .metrics. list ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # metrics and retrieve all available data
- response = @client .metrics. list ( @firm_id , @secret , count: 250 , offset: 0 )
- total_metrics = response[ 'metrics' ]
Response fields
Example response
- {
- "metrics" : [
- {
- "metric_id" : 224,
- "name" : "Fines and violations",
- "description" : "Sum of fines and violations incurred from US government agencies over the previous four years",
- "source" : "Violation Tracker",
- "link" : "https://www.goodjobsfirst.org/violation-tracker",
- "uom" : "$ fines",
- "updated_at" : "2021-04-15",
- "esg_category" : "governance",
- "normalization_scope" : "all"
- }
- ],
- "paged_metrics" : 1 ,
- "total_metrics" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
Portfolios
Retrieve and submit data on one or more of your Portfolios
In this section
/portfolios/get
The /portfolios/get endpoint allows you to receive basic data about one or more of your Portfolios.
Portfolios are returned in alphabetical order by their name. Results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_portfolios response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/portfolios/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "portfolio_ids": [Integer],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getPortfolios (firm_id, secret , {
- portfolio_ids: [Integer] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const portfolios = response.portfolios
- response = client.Portfolios.get(firm_id, secret)
- portfolios = response['portfolios']
- # Manipulate the count and offset parameters to paginate
- # portfolios and retrieve all available data
- while len (portfolios) < response[' total_portfolios' ]:
- response = client.Portfolios.get(firm_id, secret,
- offset= len (portfolios))
- portfolios.extend(response[ 'portfolios' ])
- response = @client .portfolios. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # portfolios and retrieve all available data
- response = @client .portfolios. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_portfolios = response[ 'portfolios' ]
Response fields
Example response
- {
- "portfolios" : [
- {
- "portfolio_id" : 553,
- "account_number" : "123456789",
- "name" : "Example Portfolio",
- "description" : "Europe credit portfolio",
- "value" : "120000000",
- "holdings_as_of" : "2023-09-30",
- "created_at" : "2023-06-19"
- "updated_at" : "2023-06-19"
- }
- ],
- "offset_portfolios" : 0 ,
- "paged_portfolios" : 1 ,
- "total_portfolios" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/portfolios/update
The /portfolios/update endpoint allows you to create or update a Portfolio in your account.
Request fields
- curl -X POST https://development.ethosesg.com/portfolios/update \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "name": String
- }'
- const response = await client
- . updatePortfolio (firm_id, secret, name)
- . catch ((err) => {
- // handle error
- })
- const portfolio = response.portfolio
- response = client.Portfolios.update(firm_id, secret, name)
- response = @client .portfolios. update ( @firm_id , @secret , @name )
Response fields
Example response
- {
- "portfolio" : {
- "status" : 200,
- "message" : Successfully added or updated the portfolio,
- "portfolio_id" : 553,
- "account_number" : "123456789",
- "name" : "Example Portfolio",
- "description" : "Europe credit portfolio",
- "value" : "120000000",
- "holdings_as_of" : "2023-09-30",
- "created_at" : "2023-06-19"
- "updated_at" : "2023-06-19"
- },
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/portfolios/holdings/get
The /portfolios/holdings/get endpoint allows you to receive a list of holdings for one or more Portfolios in your account.
Holdings are returned in alphabetical order by standard Ethos name. Due to the potentially large amount of data, results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_portfolios response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/portfolios/holdings/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "portfolio_ids": [Integer],
- }
- }'
- const response = await client
- . getPortfolioHoldings (firm_id, secret , {
- portfolio_ids: [Integer] ,
- })
- . catch ((err) => {
- // handle error
- })
- const portfolios = response.portfolios
- response = client.PortfolioHoldings.get(firm_id, secret)
- portfolios = response['portfolios']
- response = @client .portfolio_holdings. get ( @firm_id , @secret )
Response fields
Example response
- {
- "portfolios" : [
- {
- "portfolio_id" : 553,
- "name" : "Example Portfolio",
- "created_at" : "2023-06-19",
- "updated_at" : "2023-06-19",
- "holdings" : [
- "name" : Example Company,
- "symbol" : XYZ,
- "client_id" : "12345",
- "isin" : "248384ABC",
- "cusip" : 428334333,
- "open_figi" : "BBG093RKMB42",
- "holding_type" : "Company",
- "weight" : "0.037"
- ]
- }
- ],
- "offset_portfolios" : 0 ,
- "paged_portfolios" : 1 ,
- "total_portfolios" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/portfolios/holdings/update
The /portfolios/holdings/update endpoint allows you to create or update a holding in one or more Portfolios in your account.
Note that when you add or update holdings with this endpoint, Ethos initiates a process to update ratings and analysis for the associated portfolio. This process typically takes 30 seconds to 5 minutes, depending on the size of the portfolio. While this process is ongoing, API calls to this endpoint for the same portfolio will return the error message, PORTFOLIO_IMPORTING.
Request fields
- curl -X POST https://development.ethosesg.com/portfolios/holdings/update \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "portfolio_id": Integer
- "holdings": [{
- "symbol": String,
- "weight": Float,
- ]}
- }'
- const response = await client
- . updatePortfolioHoldings (firm_id, secret, portfolio_id , [{
- symbol: String ,
- weight: Float ,
- }])
- . catch ((err) => {
- // handle error
- })
- const updated = response.updated
- response = client.PortfolioHoldings.update(firm_id, secret, portfolio_id, [{
- symbol: String
- weight: Float
- }])
- response = @client .portfolio_holdings. update ( @firm_id , @secret , @portfolio_id , [{symbol: String, weight: Float}] )
Response fields
Example response
- {
- "portfolio" : {
- "portfolio_id" : 553,
- "name" : "Example Portfolio",
- "total_holdings" : "100",
- "total_weight" : "100",
- },
- "updated" : [{
- "status" : 200,
- "message" : Successfully added or updated XYZ Company,
- "name" : XYZ Company,
- "symbol" : XYZ,
- "client_id" : "12345",
- "isin" : 248384ABC,
- "cusip" : 428334333,
- "open_figi" : "BBG093RKMB42",
- "weight" : "0.037"
- }],
- "errors" : [{
- "status" : 400,
- "error_message" : Not able to find a company for passed symbol: XYZA. Verify the company exists or submit a coverage request for it to be added to Ethos.,
- "error_code" : ITEM_NOT_FOUND
- }],
- "created_coverage_requests" : [{
- "status" : 200,
- "message" : Successfully created or updated coverage request,
- "id" : 12345,
- "name" : Apple,
- "record_type" : Company,
- "public_status" : Public,
- "symbol" : AAPL,
- "isin" : US0378331005,
- "cusip" : 037833100,
- "open_figi" : BBG000B9XRY4,
- "lxid" : "",
- }],
- "coverage_requests_summary" : {
- "available_count" : 18,
- "in_progress_count" : 3,
- "completed_count" : 12
- },
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/portfolios/ratings/get
The /portfolios/ratings/get endpoint allows you to receive ESG Ratings data about one or more Portfolios in your account.
Optionally specify the id of a cause (topic) you want to retrieve a Rating for. Defaults to returning ratings for all causes on Ethos.
Portfolios are returned in alphabetical order by standard Ethos name. Due to the potentially large amount of data, results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_portfolios response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/portfolios/ratings/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "portfolio_ids": [Integer],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getPortfolioRatings (firm_id, secret , {
- portfolio_ids: [Integer] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const portfolios = response.portfolios
- response = client.PortfolioRatings.get(firm_id, secret)
- portfolios = response['portfolios']
- # Manipulate the count and offset parameters to paginate
- # portfolios and retrieve all available data
- while len (portfolios) < response[' total_portfolios' ]:
- response = client.PortfolioRatings.get(firm_id, secret,
- offset= len (portfolios))
- portfolios.extend(response[ 'portfolios' ])
- response = @client .portfolio_ratings. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # portfolios and retrieve all available data
- response = @client .portfolio_ratings. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_portfolios = response[ 'portfolios' ]
Response fields
Example response
- {
- "portfolios" : [
- {
- "portfolio_id" : 2858,
- "name" : "Example Portfolio",
- "updated_at" : "2022-06-19",
- "ratings" : [
- {
- "cause" : "Gender equality",
- "cause_id" : "37",
- "updated_at" : "2022-06-19",
- "score" : 88.2,
- "percentile" : 0.92
- }
- ]
- }
- ],
- "offset_portfolios" : 0 ,
- "paged_portfolios" : 1 ,
- "total_portfolios" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
Questionnaires
Retrieve data on one or more of your Questionnaires
In this section
/questionnaires/get
The /questionnaires/get endpoint allows you to receive basic data about one or more of your Questionnaires.
Questionnaires are returned in order by their id. Results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_questionnaires response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/questionnaires/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getQuestionnaires (firm_id, secret , {
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const portfolios = response.portfolios
- response = client.Questionnaires.get(firm_id, secret)
- questionnaires = response['questionnaires']
- # Manipulate the count and offset parameters to paginate
- # questionnaires and retrieve all available data
- while len (questionnaires) < response[' total_questionnaires' ]:
- response = client.Questionnaires.get(firm_id, secret,
- offset= len (questionnaires))
- questionnaires.extend(response[ 'questionnaires' ])
- response = @client .questionnaires. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # questionnaires and retrieve all available data
- response = @client .questionnaires. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_questionnaires = response[ 'questionnaires' ]
Response fields
Example response
- {
- "questionnaires" : [
- {
- "questionnaire_id" : 553,
- "title" : "XYZ Questionnaire",
- "description" : "Description of the questionnaire",
- "updated_at" : "2024-09-30",
- "responses_count" : "3"
- "percent_completed" : "95%"
- }
- ],
- "offset_questionnaires" : 0 ,
- "paged_questionnaires" : 1 ,
- "total_questionnaires" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/questionnaires/responses/get
The /questionnaires/responses/get endpoint allows you to receive basic data about one or more Response to your Questionnaires.
Responses are returned in order by their id. Results are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_responses response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/questionnaires/responses/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "symbols": [String],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getQuestionnaireResponses (firm_id, secret , {
- symbols: [String] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const responses = response.responses
- response = client.Responses.get(firm_id, secret)
- responses = response['responses']
- # Manipulate the count and offset parameters to paginate
- # responses and retrieve all available data
- while len (responses) < response[' total_responses' ]:
- response = client.Responses.get(firm_id, secret,
- offset= len (responses))
- responses.extend(response[ 'responses' ])
- response = @client .responses. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # responses and retrieve all available data
- response = @client .responses. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_responses = response[ 'responses' ]
Response fields
Example response
- {
- "responses" : [
- {
- "response_id" : 1234,
- "questionnaire_id" : 13223,
- "questionnaire_title" : "Example Questionnaire",
- "company_id" : 74,
- "company_name" : "Apple",
- "updated_at" : "2024-09-30",
- "status" : "In Progress"
- "overdue" : false,
- "percent_completed" : "100%"
- "responsible_user" : "John Smith"
- "primary_approver" : "Sarah Jackson"
- "secondary_approver" : null
- "submission_deadline" : "2024-10-05",
- "approval_deadline" : "2024-10-10",
- "submitted_at" : "2024-09-30",
- "approved_at" : "2024-10-02",
- }
- ],
- "offset_responses" : 0 ,
- "paged_responses" : 1 ,
- "total_responses" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/questionnaires/questions/get
The /questionnaires/questions/get endpoint allows you to receive basic data about one or more Question.
Questions are returned in order by their id. Questions are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_questions response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/questionnaires/questions/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "query": String,
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getQuestionnaireQuestions (firm_id, secret , {
- query: String ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const questions = response.questions
- response = client.Questions.get(firm_id, secret)
- questions = response['questions']
- # Manipulate the count and offset parameters to paginate
- # questions and retrieve all available data
- while len (questions) < response[' total_questions' ]:
- response = client.Questions.get(firm_id, secret,
- offset= len (questions))
- questions.extend(response[ 'questions' ])
- response = @client .questions. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # questions and retrieve all available data
- response = @client .questions. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_questions = response[ 'questions' ]
Response fields
Example response
- {
- "questions" : [
- {
- "question_id" : 1234,
- "metric_id" : 132,
- "updated_at" : "2024-09-30",
- "question_text" : "What was the company's total Scope 1 emissions last year, in metric tons?",
- "instructions" : "Enter the company's total Scope 1 GHG emissions for the last calendar year, in metric tons."
- "question_type" : "integer"
- }
- ],
- "offset_questions" : 0 ,
- "paged_questions" : 1 ,
- "total_questions" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/questionnaires/answers/get
The /questionnaires/answers/get endpoint allows you to receive basic data about one or more Answer.
Answers are returned in order by their id. Answers are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_answers response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/questionnaires/answers/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "symbols": [String],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getQuestionnaireAnswers (firm_id, secret , {
- symbols: [String] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const answers = response.answers
- response = client.Answers.get(firm_id, secret)
- answers = response['answers']
- # Manipulate the count and offset parameters to paginate
- # answers and retrieve all available data
- while len (answers) < response[' total_answers' ]:
- response = client.Answers.get(firm_id, secret,
- offset= len (answers))
- answers.extend(response[ 'answers' ])
- response = @client .answers. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # answers and retrieve all available data
- response = @client .answers. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_answers = response[ 'answers' ]
Response fields
Example response
- {
- "answers" : [
- {
- "answer_id" : 1234,
- "question_id" : 553,
- "question_text" : "What was the company's total Scope 1 emissions last year, in metric tons?",
- "response_id" : 23392,
- "questionnaire_id" : 3212,
- "company_id" : 74,
- "company_name" : "Apple",
- "updated_at" : "2024-09-30",
- "updated_by" : "John Smith"
- "answer_text" : "10230"
- "answer_commentary" : "As reported in the company's sustainability report"
- "answer_documents" : [
- {
- "name" : "Sustainability Report"
- "file_url" : "https://xyz.com"
- }
- ],
- }
- ],
- "offset_answers" : 0 ,
- "paged_answers" : 1 ,
- "total_answers" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
/questionnaires/approvals/get
The /questionnaires/approvals/get endpoint allows you to receive basic data about one or more Answer.
Answers are returned in order by their id. Answers are paginated in groups of 100. Manipulate the count and offset parameters in conjunction with the total_answers response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/questionnaires/approvals/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "symbols": [String],
- "count": 100,
- "offset": 0
- }
- }'
- const response = await client
- . getQuestionnaireApprovals (firm_id, secret , {
- symbols: [String] ,
- count: 100 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const approvals = response.approvals
- response = client.Approvals.get(firm_id, secret)
- approvals = response['approvals']
- # Manipulate the count and offset parameters to paginate
- # approvals and retrieve all available data
- while len (approvals) < response[' total_approvals' ]:
- response = client.Approvals.get(firm_id, secret,
- offset= len (approvals))
- approvals.extend(response[ 'approvals' ])
- response = @client .approvals. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # approvals and retrieve all available data
- response = @client .approvals. get ( @firm_id , @secret , count: 250 , offset: 0 )
- total_approvals = response[ 'approvals' ]
Response fields
Example response
- {
- "approvals" : [
- {
- "approval_id" : 1234,
- "response_id" : 23342,
- "company_id" : 74,
- "company_name" : "Apple",
- "created_at" : "2024-09-25",
- "updated_at" : "2024-09-30",
- "updated_by" : "John Smith"
- "deadline" : "2024-10-02",
- "status" : "Pending"
- "requester" : "John Smith"
- "request_message" : "Please review and approve"
- "approvers" : [
- {
- "name" : "Sarah Jackson"
- "email" : "example@email.com"
- }
- ],
- }
- ],
- "offset_approvals" : 0 ,
- "paged_approvals" : 1 ,
- "total_approvals" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }
Reports
Retrieve data on one or more of your Reports
In this section
/reports/get
The /reports/get endpoint allows you to receive basic data about one or more of your Reports.
Reports are returned in order by their id. Results are paginated in groups of 10. Manipulate the count and offset parameters in conjunction with the total_reports response body field.
Request fields
Example request
- curl -X POST https://development.ethosesg.com/reports/get \
- -H 'Content-Type: application/json' \
- -d '{
- "firm_id": String,
- "secret": String,
- "options": {
- "ids": [Integer],
- "count": 10,
- "offset": 0
- }
- }'
- const response = await client
- . getReports (firm_id, secret , {
- ids: [Integer] ,
- count: 10 ,
- offset: 0 ,
- })
- . catch ((err) => {
- // handle error
- })
- const reports = response.reports
- response = client.Reports.get(firm_id, secret)
- reports = response['reports']
- # Manipulate the count and offset parameters to paginate
- # reports and retrieve all available data
- while len (reports) < response[' total_reports' ]:
- response = client.Reports.get(firm_id, secret,
- offset= len (reports))
- reports.extend(response[ 'reports' ])
- response = @client .reports. get ( @firm_id , @secret )
- # Manipulate the count and offset parameters to paginate
- # reports and retrieve all available data
- response = @client .reports. get ( @firm_id , @secret , count: 5 , offset: 0 )
- total_reports = response[ 'reports' ]
Response fields
Example response
- {
- "reports" : [
- {
- "report_id" : 553,
- "token" : "123456789",
- "title" : "ABC Co Scorecard",
- "subtitle" : "Company ESG risk scorecard",
- "created_at" : "2023-06-19"
- "updated_at" : "2023-06-19"
- "filename" : "abc-co-scorecard.pdf",
- "link" : ""https://ethos-app.s3.eu-west-3.amazonaws.com/accounts/development/352/reports/company-summary-pdf-1705448130-8YMatc7L7i5br9KvXMqbstn2.pdf",
- "record_type" : "company",
- "company_id" : 1,
- "fund_id" : null
- }
- ],
- "offset_reports" : 0 ,
- "paged_reports" : 1 ,
- "total_reports" : 1 ,
- "max_id" : 100
- "request_id" : "28HyTu"
- }