API

Want access to the API? Contact us and request your API key.

The CO2 Emission Estimation API provides a mechanism to estimate the carbon footprint of a website on every load. With the increasing awareness of environmental concerns, understanding the carbon footprint of digital assets is becoming crucial. This API allows developers and website owners to gauge the environmental impact of their websites in terms of CO2 emissions. The results include details about the website's size, energy consumption, and the estimated CO2 emissions in both grams and liters.

API Endpoint

https://co2.observer/api/

Request Parameters

Parameter Description Required Example
key The API key for authentication. Yes rt1bvhJY9v7bxSTHi449O6A7b9Ml86LJTC67kr4wMJ
url The URL of the website you want to scan. Yes triss.dev
scan If set to true, it forces a new scan. If not provided or set to false, it retrieves the last scan result from the database. No true

Response Format

The API returns a JSON object with the following fields:

Field Description Type Example
url The scanned website's URL. String triss.dev
greenHost Indicates if the website is hosted on a green host. Boolean true
size The size of the website in bytes. Number 30311
sizeFormatted The formatted size of the website. String 29.6 KB
energiConsumption The energy consumption of the website. Number 1.3660912680156121e-5
co2 An object containing details about the CO2 emissions. Object -
co2.grams Estimated CO2 emissions in grams. Number 0.005880841491886818
co2.litres Estimated CO2 emissions in liters. Number 0.0032709240377874482
result An object containing performance scores and grades. Object -
result.sizeScore The size score of the website. Number 0.98
result.performanceScore The performance score of the website. Number 1
result.grade The overall grade of the website. Number 0.99
result.gradeFormatted The formatted grade of the website. String A+
timestamp The timestamp of the last scan. Number 1694932603

Response Example

{
    "url": "triss.dev",
    "greenHost": true,
    "size": 30357,
    "sizeFormatted": "29.65 KB",
    "energiConsumption": 1.3681644493137784e-5,
    "co2": {
        "grams": 0.005889766262056947,
        "litres": 0.003275887994956074
    },
    "result": {
        "sizeScore": 0.99,
        "performanceScore": 1,
        "grade": 1,
        "gradeFormatted": "A+"
    },
    "timestamp": 1695110052
}

Example Usage

To get the CO2 emission details of the website triss.dev:

cURL

curl "https://co2.observer/api/?key=[APIKEY]&url=triss.dev&scan=false"

WGET

wget -qO- "https://co2.observer/api/?key=[APIKEY]&url=triss.dev&scan=false"

Others

<?php
// Your API key
$apiKey = 'YOUR_API_KEY'; // Replace with your actual API key

// Domain to query
$domain = 'triss.dev'; // Replace with your actual domain

// Initialize new scan
$scan = false; // Set to true if you want to perform a new scan. Defaults to "false"

// The API endpoint you want to hit
$url = 'https://co2.observer/api/?key=' . $apiKey . '&url=' . $domain . '&scan=' . $scan;

// Initialize cURL session
$ch = curl_init();

// Set cURL options
curl_setopt($ch, CURLOPT_URL, $url);         // Set the URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Return the transfer as a string
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Optional: Disable SSL verification if needed

// Execute cURL session and store the response
$response = curl_exec($ch);

// Check for errors
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
} else {
    // Decode the JSON response
    $data = json_decode($response, true);

    // Use the data as needed
    print_r($data);
}

// Close cURL session
curl_close($ch);
?>
// Your API key
const apiKey = 'YOUR_API_KEY'; // Replace with your actual API key

// Domain to query
const domain = 'triss.dev'; // Replace with your actual domain

// Initialize new scan
const scan = false; // Set to true if you want to perform a new scan. Defaults to "false"

// The URL with your API key and other parameters
const url = `https://co2.observer/api/?key=${apiKey}&url=${domain}&scan=${scan}`;

// Use the Fetch API to get the data
fetch(url)
  .then(response => {
    if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response.json();
  })
  .then(data => {
    // Process your data here
    console.log(data);
  })
  .catch(error => {
    // Handle any errors here
    console.error('Fetch error:', error);
  });

async function fetchData() {
  try {
    const response = await fetch(url);
    if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`);
    }
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Fetch error:', error);
  }
}

fetchData();
// Your API key
const apiKey = 'YOUR_API_KEY'; // Replace with your actual API key

// Domain to query
const domain = 'triss.dev'; // Replace with your actual domain

// Initialize new scan
const scan = false; // Set to true if you want to perform a new scan. Defaults to "false"

// The URL with your API key and other parameters
const url = `https://co2.observer/api/?key=${apiKey}&url=${domain}&scan=${scan}`;

// Define the callback function
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) { // Check if request is complete
        if (xhr.status === 200) { // Check if status is OK
            // Parse the JSON response
            var data = JSON.parse(xhr.responseText);
            // Process the data
            console.log(data);
        } else {
            // Handle HTTP error
            console.error('XHR Error: ' + xhr.status);
        }
    }
};

// Open a GET request
xhr.open('GET', url);

// Send the request
xhr.send();
// Your API key
const apiKey = 'YOUR_API_KEY'; // Replace with your actual API key

// Domain to query
const domain = 'triss.dev'; // Replace with your actual domain

// Initialize new scan
const scan = false; // Set to true if you want to perform a new scan. Defaults to "false"

// The URL with your API key and other parameters
const url = `https://co2.observer/api/?key=${apiKey}&url=${domain}&scan=${scan}`;

https.get(url, (res) => {
    let data = '';

    // A chunk of data has been received.
    res.on('data', (chunk) => {
        data += chunk;
    });

    // The whole response has been received. Print out the result.
    res.on('end', () => {
        try {
            const jsonData = JSON.parse(data);
            console.log(jsonData);
        } catch (e) {
            console.error('Error parsing JSON:', e);
        }
    });

}).on('error', (err) => {
    console.error('Error:', err);
});
// TOML
[dependencies]
reqwest = "0.11"
serde_json = "1.0"
tokio = { version = "1", features = ["full"] }

// RUST
use reqwest;
use serde_json::Value;
use tokio;

#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
    // Your API key
    let api_key = 'YOUR_API_KEY'; // Replace with your actual API key

    // Domain to query
    let domain = 'triss.dev'; // Replace with your actual domain

    // Initialize new scan
    let scan = false; // Set to true if you want to perform a new scan. Defaults to "false"

    // The URL with your API key and other parameters
    let url = format!("https://co2.observer/api/?key={}&url={}&scan={}", api_key, domain, scan);

    // Make a GET request
    let res = reqwest::get(&url).await?;

    // Parse the response body as JSON
    let body = res.json::().await?;

    // Print the JSON data
    println!("{:#?}", body);

    Ok(())
}
package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    // API key
    apiKey := "YOUR_API_KEY" // Replace with your actual API key

    // Domain to query
    domain := "triss.dev" // Replace with your actual domain

    // Initialize new scan
    scan := false // Set to true if you want to perform a new scan. Defaults to false

    // The URL with your API key and other parameters
    url := fmt.Sprintf("https://co2.observer/api/?key=%s&url=%s&scan=%s", apiKey, domain, scan)

    // Make a GET request
    resp, err := http.Get(url)
    if err != nil {
        fmt.Printf("Error making request: %s\n", err)
        return
    }
    defer resp.Body.Close()

    // Read the response body
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Printf("Error reading response: %s\n", err)
        return
    }

    // A map to hold the JSON data
    var data map[string]interface{}

    // Unmarshal the JSON data
    if err := json.Unmarshal(body, &data); err != nil {
        fmt.Printf("Error decoding JSON: %s\n", err)
        return
    }

    // Print the data
    fmt.Println(data)
}
import requests

# Your API key
api_key = 'YOUR_API_KEY' #Replace with your actual API key

#Domain to query
domain = 'triss.dev' # Replace with your actual domain

# Initialize new scan
scan = false # Set to true if you want to perform a new scan. Defaults to "false"

# The URL with your API key and other parameters
url = f'https://co2.observer/api/?key={api_key}&url={url}&scan={scan}'

# Make a GET request
response = requests.get(url)

# Check if the request was successful
if response.status_code == 200:
    # Parse JSON response
    data = response.json()
    print(data)
else:
    print('Failed to retrieve data:', response.status_code)

Notes

  • API keys are available upon request. Contact us for more detailes.
  • Ensure that you use a valid API key for authentication.
  • You don't need to explicitly set the scan parameter to false; it will default to false if not specified.