curl --request GET \
--url https://api.emidat.com/v2/product-instances/{id}/lca-results \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.emidat.com/v2/product-instances/{id}/lca-results"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.emidat.com/v2/product-instances/{id}/lca-results', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.emidat.com/v2/product-instances/{id}/lca-results",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.emidat.com/v2/product-instances/{id}/lca-results"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.emidat.com/v2/product-instances/{id}/lca-results")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.emidat.com/v2/product-instances/{id}/lca-results")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"product_instance_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job": {
"status": "queued",
"err_code": "<string>"
},
"results": [
{
"year": 2025,
"blocked_by": [
{
"err_code": "missing_input",
"kind": "production_data",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"lca_results": {
"en15804a2_result": {
"impact_summary": {
"a1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a1_a3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a5": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b5": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b6": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b7": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"d": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
]
},
"impacts_per_source": [
{
"name": "Hackschnitzel, TestPlant (Wood chips)",
"impacts_total": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"impacts_transport": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"type": "raw_materials"
}
],
"biogenic_carbon_content_kg_c": 0.494,
"biogenic_carbon_content_packaging_kg_c": 0
},
"en15804a2_secondary_databases": [
"ecoinvent-3.10"
],
"en15804a2_pcrs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "NPCR Part A:2021",
"name": "NPCR Part A Construction products and services",
"short_name": "NPCR Part A:2021",
"reference_for_bibliography": [
"<string>"
],
"author": "EPD Global",
"type": "Part A"
}
],
"iso21930_result": {
"impact_summary": {
"a1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a1_a3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a5": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b5": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b6": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b7": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"d": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
]
},
"impacts_per_source": [
{
"name": "Hackschnitzel, TestPlant (Wood chips)",
"impacts_total": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"impacts_transport": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"type": "raw_materials"
}
],
"biogenic_carbon_content_kg_c": 0.494,
"biogenic_carbon_content_packaging_kg_c": 0
},
"iso21930_secondary_databases": [
"ecoinvent-3.10"
],
"iso21930_pcrs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "NPCR Part A:2021",
"name": "NPCR Part A Construction products and services",
"short_name": "NPCR Part A:2021",
"reference_for_bibliography": [
"<string>"
],
"author": "EPD Global",
"type": "Part A"
}
],
"background_database_name": "ecoinvent",
"background_database_version": "3.10",
"background_database_system_model": "EN15804",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}
]
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}Get LCA results
Returns the computed LCA for the instance, one entry per reportable
production year — see LcaResults.results for which years those are, and
why an instance can legitimately have none.
The instance is modelled with the default scenario for its material
type, not with the scenario of any catalog product it is linked to.
Each year carries characterized results under EN 15804+A2 and ISO 21930 —
impacts per life-cycle module (A1–A3, A4, A5, C1–C4, D, …), a per-source
breakdown, biogenic carbon content, and the background-data provenance.
job reports the state of the last lca-update, and is the only thing
that says whether to keep polling: while it is queued or processing
the results are mid-replacement and results comes back empty, but an
empty results on its own does not imply a job is running. A year that
cannot be computed lists everything standing in the way under
blocked_by.
curl --request GET \
--url https://api.emidat.com/v2/product-instances/{id}/lca-results \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.emidat.com/v2/product-instances/{id}/lca-results"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.emidat.com/v2/product-instances/{id}/lca-results', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.emidat.com/v2/product-instances/{id}/lca-results",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.emidat.com/v2/product-instances/{id}/lca-results"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.emidat.com/v2/product-instances/{id}/lca-results")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.emidat.com/v2/product-instances/{id}/lca-results")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"product_instance_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job": {
"status": "queued",
"err_code": "<string>"
},
"results": [
{
"year": 2025,
"blocked_by": [
{
"err_code": "missing_input",
"kind": "production_data",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"lca_results": {
"en15804a2_result": {
"impact_summary": {
"a1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a1_a3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a5": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b5": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b6": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b7": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"d": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
]
},
"impacts_per_source": [
{
"name": "Hackschnitzel, TestPlant (Wood chips)",
"impacts_total": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"impacts_transport": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"type": "raw_materials"
}
],
"biogenic_carbon_content_kg_c": 0.494,
"biogenic_carbon_content_packaging_kg_c": 0
},
"en15804a2_secondary_databases": [
"ecoinvent-3.10"
],
"en15804a2_pcrs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "NPCR Part A:2021",
"name": "NPCR Part A Construction products and services",
"short_name": "NPCR Part A:2021",
"reference_for_bibliography": [
"<string>"
],
"author": "EPD Global",
"type": "Part A"
}
],
"iso21930_result": {
"impact_summary": {
"a1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a1_a3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"a5": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b5": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b6": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"b7": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c1": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c2": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c3": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"c4": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"d": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
]
},
"impacts_per_source": [
{
"name": "Hackschnitzel, TestPlant (Wood chips)",
"impacts_total": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"impacts_transport": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"type": "raw_materials"
}
],
"biogenic_carbon_content_kg_c": 0.494,
"biogenic_carbon_content_packaging_kg_c": 0
},
"iso21930_secondary_databases": [
"ecoinvent-3.10"
],
"iso21930_pcrs": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "NPCR Part A:2021",
"name": "NPCR Part A Construction products and services",
"short_name": "NPCR Part A:2021",
"reference_for_bibliography": [
"<string>"
],
"author": "EPD Global",
"type": "Part A"
}
],
"background_database_name": "ecoinvent",
"background_database_version": "3.10",
"background_database_system_model": "EN15804",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}
]
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}Authorizations
Per-manufacturer API key in the X-API-Key header, format
emidat-{key_id}-{secret} where key_id is a random public handle.
Issued by an owner in the Emidat
dashboard; carries its own permission scopes, optional plant
restrictions, and optional expiry. A revoked, expired, or unknown key
returns 401. See the Authentication guide for details.
Path Parameters
The instance's Emidat UUID.
Response
LCA results.
LCA results for a product instance, one entry per reportable production year.
State of the recompute triggered by POST /v2/product-instances/{id}/lca-update.
Recompute runs in the background, so this is how you tell finished
results from in-flight ones.
Show child attributes
Show child attributes
One entry per reportable production year, ascending.
Reportable years run from produced_from to produced_to. An
open-ended instance (produced_to: null) is instead capped at the
last year production data can be entered for — the current calendar
year.
Two consequences worth handling explicitly:
- The current calendar year is reportable as soon as its production data is entered. Because the year is not over, that result covers only the part of the year entered so far.
- Years lying in a future calendar year are listed when an
explicit
produced_tocovers them, but stay blocked by amissing_inputblocker of kindproduction_datauntil that year arrives and its production data is entered. They are not pending computation.
Do not read emptiness as "a job is running": while job.status is
queued or processing this array is emptied because the stored
results are mid-replacement, but it is equally empty when there is
nothing to report. job.status is the only signal for whether to
keep polling — poll while it is queued or processing, and stop
once it reaches completed, failed, or idle, whatever results
holds.
Show child attributes
Show child attributes