import { Head } from "zudoku/components";

<Head>

<meta
  name="keywords"
  content="openccf, carbon footprint api, emission clustering api, scope 1 2 3 emissions engine, rest api clustering, carbon accounting automation, carbonsutra api"
/>
<meta
  property="og:title"
  content="Data Interoperatbility - OpenCCF through CarbonSutra"
/>
<meta
  property="og:description"
  content="Group, log, and retrieve carbon emission calculations in OpenCCF format"
/>
<meta property="og:type" content="website" />

</Head>

# OpenCCF - Open Corporate Carbon Footprint

[OpenCCF](https://openccf.org/) is a common, machine-readable structure for exchanging GHG Protocol-aligned carbon footprints between systems: open, CC0, and framework-agnostic.

CarbonSutra provides native OpenCCF outputs, letting you turn estimation data into this sophisticated and globally recognized reporting standards with a single API call. Instead of dealing with custom formatting programs, messy spreadsheets or locked-in datasets across Scope 1, 2, and 3 emissions, the calculations are mapped automatically. This removes manual data entry and lets you easily move your carbon inventory across enterprise tools.

This update makes audits much faster for sustainability managers, accountants, and auditors. CarbonSutra already provides clear, step-by-step explanations for every calculation. Formatting this transparent data into the OpenCCF standard allows you to send verified carbon totals straight into ESG, registries, and compliance reports like CSRD or GHG Protocol without losing context.

For software developers and tech teams, CarbonSutra becomes a simple, plug-and-play carbon engine. You can keep using our zero-storage clustering feature to group transaction batches under custom tags without building extra database structures. Your software can now deliver standard-compliant ESG outputs instantly, saving backend development time and simplifying supply chain tracking.

## Getting output in OpenCCF format

Internally, the API for OpenCCF uses the [clustering](https://carbonsutra.com/clustering) functionality in which the developer eliminates the need to store emission calculation results by assigning a self-declared tag to it. These tags are called cluster names and they can be added to any calculation within CarbonSutra. The endpoint: /cluster-data accepts this tag and gives the output of all calculations in granular format in JSON. OpenCCF's API invokes the same API internally.

Hence, there are two inputs for OpenCCF:

1. Cluster Name - which is used to group all emission calculations in the report
2. Report Configuration - An optional field of header data in JSON format which will be used in OpenCCF's output.

Both these are passed to /openccf endpoint to get the result in a YAML format, as specified by OpenCCF's data model.

The report configuration has following fields:

- `report_id`: `<Report identifier>`
- `company_name`: `<Legal or trading name of reporting company>`
- `region`: `<Location of the reporting entity, as an ISO 3166-1 country code, like "GB" or "US">`
- `period_start`: `<Reporting period start date in YYYY-MM-DD>`
- `period_end`: `<Reporting period ending date in YYYY-MM-DD>`
- `horizon`: `<Specify methodology used to calculate CO2 equivalencies. Values are GWP20, GWP100 (default) or GWP500>`
- `report_status`: `<Incomplete, Self-completed, Third-party completed or Third-party audited>`

An example of this field in JSON is:

```json
{
  "cluster_name": "KrugerBrent-H1-2026",
  "report_config": {
    "report_id": "KB-Asia26-Part-1",
    "company_name": "Kruger-Brent Manufacturing Asia-Pacific",
    "region": "AU",
    "period_start": "2026-01-01",
    "period_end": "2026-06-30",
    "horizon": "GWP100",
    "report_status": "Self-completed"
  }
}
```

The data in report configuration serves as the information in header fields of OpenCCF. CarbonSutra's internal smart matching algorithm works here too. For example, the report status of 'completed by third party' will result in expected "THIRD-PARTY COMPLETED' and horizon value of ' = 100' will output the correct GWP100.

## Complete example of OpenCCF

Assume that the above report configuration is passed along with the cluster name of "KrugerBrent-Paints-Q1" which has 3 emission calculations as follows:

```
{
  "data": [
    {
      "id": "c827ad3b-d5e5-0049-0573-dc6641529553",
      "type": "estimate-travel-flight",
      "cluster_name": "KrugerBrent-H1-2026",
      "attributes": {
        "type": "estimate-travel-flight",
        "add_rf": "Y",
        "co2e_gm": 3905288,
        "co2e_kg": 3905.29,
        "co2e_lb": 8609.68,
        "co2e_mt": 3.91,
        "airport_to": "London Heathrow Airport",
        "round_trip": "Y",
        "include_wtt": "Y",
        "airport_from": "San Francisco International Airport",
        "flight_class": "Premium",
        "iata_airport_to": "LHR",
        "iata_airport_from": "SFO",
        "number_of_passengers": 1
      },
      "estimated_at": "2026-09-29 08:07:37"
    },
    {
      "id": "d6b65ff2-d911-0f23-d23a-ef8a863a1480",
      "type": "estimate-freight",
      "cluster_name": "KrugerBrent-H1-2026",
      "attributes": {
        "type": "estimate-freight",
        "co2e_gm": 89600,
        "co2e_kg": 89.6,
        "co2e_lb": 197.53,
        "co2e_mt": 0.09,
        "distance_value": 2000,
        "freight_weight": 5600,
        "transport_mode": "DeepSea"
      },
      "estimated_at": "2026-09-29 08:09:36"
    },
    {
      "id": "adcf3cbb-46b8-1b52-9051-6b3ad6ac8d79",
      "type": "estimate-electricity",
      "cluster_name": "KrugerBrent-H1-2026",
      "attributes": {
        "type": "estimate-electricity",
        "co2e_gm": 500456000,
        "co2e_kg": 500456,
        "co2e_lb": 1103315.31,
        "co2e_mt": 500.46,
        "country_name": "India",
        "electricity_unit": "MWh",
        "electricity_value": 800
      },
      "estimated_at": "2026-09-29 08:13:08"
    },
    {
      "id": "aefd154c-52c3-fb03-8699-6eb2df75d8b9",
      "type": "estimate-hotel-stay",
      "cluster_name": "KrugerBrent-H1-2026",
      "attributes": {
        "type": "estimate-hotel-stay",
        "co2e_gm": 364320,
        "co2e_kg": 364.32,
        "co2e_lb": 803.19,
        "co2e_mt": 0.36,
        "country": "India",
        "city_name": "Mumbai",
        "hotel_rating": 4,
        "number_of_rooms": 1,
        "number_of_nights": 6
      },
      "estimated_at": "2026-09-29 08:14:06"
    }
  ],
  "success": true,
  "status": 200
}
```

Combining the entered report configuration and the fetched details by cluster name of "KrugerBrent-Paints-Q1", the final output in YAML format is:

```
reportID: KB-ASIA26-PART-1
schemaVersion: "1.0.0"
companyName: KRUGER-BRENT MANUFACTURING ASIA-PACIFIC
primaryRegion: AU
reportingPeriodStart: '2026-01-01'
reportingPeriodEnd: '2026-06-30'
totalNetEmissionsLocationBasedKgCO2e: 504815.21
gwpHorizon: GWP100
reportStatus: SELF_COMPLETED
emissionsLines:
  - scope: SCOPE_3
    category: Category 6 Business Travel
    lineStatus: COMPLETE
    emissionsQuantityKgCO2e: 3905.29
    emissionOrigin: NOT SPECIFIED
    accountingType: EMISSION
    region: AU
  - scope: SCOPE_3
    category: Category 4 Upstream Transportation and Distribution
    lineStatus: COMPLETE
    emissionsQuantityKgCO2e: 89.6
    emissionOrigin: NOT SPECIFIED
    accountingType: EMISSION
    region: AU
  - scope: SCOPE_2
    category: ELECTRICITY_LOCATION_BASED
    lineStatus: COMPLETE
    emissionsQuantityKgCO2e: 500456.0
    emissionOrigin: NOT SPECIFIED
    accountingType: EMISSION
    region: AU
  - scope: SCOPE_3
    category: GHG Protocol category (1-15)
    lineStatus: COMPLETE
    emissionsQuantityKgCO2e: 364.32
    emissionOrigin: NOT SPECIFIED
    accountingType: EMISSION
    region: AU
```
