Get LCA Dashboard
const options = {
method: 'GET',
headers: {'x-api-key': '<x-api-key>', 'x-organization-id': '<x-organization-id>'}
};
fetch('https://api.dcycle.io/lca/portfolio/{lca_id}/dashboard', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.dcycle.io/lca/portfolio/{lca_id}/dashboard"
headers = {
"x-api-key": "<x-api-key>",
"x-organization-id": "<x-organization-id>"
}
response = requests.get(url, headers=headers)
print(response.text)curl --request GET \
--url https://api.dcycle.io/lca/portfolio/{lca_id}/dashboard \
--header 'x-api-key: <x-api-key>' \
--header 'x-organization-id: <x-organization-id>'{
"meta": {
"lca_id": "<string>",
"product_name": "<string>",
"methodology_id": "<string>",
"functional_unit_value": 123,
"functional_unit_id": "<string>",
"view": "<string>",
"selected_output_product_id": {},
"allocation_method": {},
"output_products": {
"output_product_id": "<string>",
"name": {},
"quantity": 123,
"unit_id": {},
"allocation_factor": 123
}
},
"stages": {
"stage": "<string>",
"phase": "<string>",
"label": "<string>",
"categories": {
"impact_category": "<string>",
"impact_value": 123,
"impact_unit": {},
"top_contributors": {
"block_id": {},
"block_name": "<string>",
"impact_value": 123
}
}
},
"is_stale": true,
"impacts_pending": true,
"validation_errors": {
"code": "<string>",
"detail": "<string>",
"pieces": {
"piece_id": {},
"piece_name": "<string>"
}
},
"calculation_warnings": {
"impact_category": "<string>",
"detail": "<string>"
}
}Get LCA Dashboard
Retrieve environmental impact results for an LCA, broken down by EN 15804 life cycle stages
GET
/
lca
/
portfolio
/
{lca_id}
/
dashboard
Get LCA Dashboard
const options = {
method: 'GET',
headers: {'x-api-key': '<x-api-key>', 'x-organization-id': '<x-organization-id>'}
};
fetch('https://api.dcycle.io/lca/portfolio/{lca_id}/dashboard', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.dcycle.io/lca/portfolio/{lca_id}/dashboard"
headers = {
"x-api-key": "<x-api-key>",
"x-organization-id": "<x-organization-id>"
}
response = requests.get(url, headers=headers)
print(response.text)curl --request GET \
--url https://api.dcycle.io/lca/portfolio/{lca_id}/dashboard \
--header 'x-api-key: <x-api-key>' \
--header 'x-organization-id: <x-organization-id>'{
"meta": {
"lca_id": "<string>",
"product_name": "<string>",
"methodology_id": "<string>",
"functional_unit_value": 123,
"functional_unit_id": "<string>",
"view": "<string>",
"selected_output_product_id": {},
"allocation_method": {},
"output_products": {
"output_product_id": "<string>",
"name": {},
"quantity": 123,
"unit_id": {},
"allocation_factor": 123
}
},
"stages": {
"stage": "<string>",
"phase": "<string>",
"label": "<string>",
"categories": {
"impact_category": "<string>",
"impact_value": 123,
"impact_unit": {},
"top_contributors": {
"block_id": {},
"block_name": "<string>",
"impact_value": 123
}
}
},
"is_stale": true,
"impacts_pending": true,
"validation_errors": {
"code": "<string>",
"detail": "<string>",
"pieces": {
"piece_id": {},
"piece_name": "<string>"
}
},
"calculation_warnings": {
"impact_category": "<string>",
"detail": "<string>"
}
}Retrieve the calculated environmental impact results for a specific LCA, organized by EN 15804 life cycle stages (A1–A4, B6, B7). Each stage contains impact values across all selected impact categories.
Request
Path Parameters
uuid
required
The UUID of the LCA portfolioExample:
a1b2c3d4-e5f6-7890-abcd-ef1234567890Headers
string
required
Your API key for authenticationExample:
sk_live_1234567890abcdefstring
required
Your organization UUIDExample:
a8315ef3-dd50-43f8-b7ce-d839e68d51faQuery Parameters
string
default:"system"
Allocation view for co-product LCAs.Available values:
system— Total system impact (default)product_total— Impact allocated to a specific co-product (requiresoutput_product_id)product_unit— Per-unit impact of a co-product (requiresoutput_product_id)
uuid
UUID of the output product for co-product allocation views (
product_total or product_unit). Required when view is not system.Example: bf800281-bcc7-42f4-81e4-8ec9abb9745eResponse
object
LCA metadata and dashboard configuration
Show Meta Object
Show Meta Object
string
LCA portfolio UUID
string
LCA product name
string
Methodology UUID
number
Functional unit quantity
string
Functional unit identifier
string
Active view:
system, product_total, or product_unitstring | null
Co-product UUID selected for allocation views
string | null
Allocation method (
null = uniform 1/N)array[object]
Array of life cycle stage results
Show Stage Object
Show Stage Object
string
EN 15804 stage code:
A1, A2, A3, A4, B6, B7string
Life cycle phase:
Production or Downstreamstring
Human-readable stage description (e.g.,
"Raw material supply")array[object]
Impact values per category for this stage
Show Category Impact Object
Show Category Impact Object
string
Impact category identifier (e.g.,
climate_change, acidification)number
Calculated impact value
string | null
Unit of measurement (e.g.,
"kg CO2-Eq", "kg SO2-Eq")boolean
Whether the results may be outdated and need recalculation.
true means the impacts returned here are the previous ones: the LCA changed while they were
being recalculated, so that recalculation was discarded. Nothing is wrong with the values — they
are the last consistent ones — but they do not yet reflect the latest edits. Read this endpoint
again, or call POST /lca/portfolio/{lca_id}/recalculate to force a full recalculation.An LCA that simply has no completed product chain yet is not reported here: that is an
unfinished LCA rather than a stale one, and it surfaces through validation_errors.GET /lca/portfolio/{lca_id}/block-impacts reports its own is_stale for the same reason. The
two endpoints are separate requests, so use the flag that came back alongside the numbers you
are displaying.boolean
Whether a deferred recalculation is still running.Product-use (B6/B7) and end-of-life (C4) edits hand their recomputation to an async job. While
that job works,
impacts_pending is true: the numbers returned are the previous ones, they
will change on their own, and there is nothing to ask for. Show progress, not a call to action.Distribution and transport do not set this flag — their own /status endpoints report those
operations.It is not the same as is_stale. Stale means a recalculation was discarded because the LCA
changed while it was being computed; pending means one is under way. Both can be true at
once — they have different causes, and each is evaluated across all of the LCA’s blocks. When
they are, treat impacts_pending as the more useful thing to show: something is happening and
the numbers will move on their own.Reported on block-impacts too, for the same reason is_stale is.array[object]
Structural validation issues detected before calculation
array[object]
Example
curl -X GET "https://api.dcycle.io/lca/portfolio/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dashboard?view=system" \
-H "x-api-key: ${DCYCLE_API_KEY}" \
-H "x-organization-id: ${DCYCLE_ORG_ID}"
import requests
import os
headers = {
"x-api-key": os.getenv("DCYCLE_API_KEY"),
"x-organization-id": os.getenv("DCYCLE_ORG_ID")
}
lca_id = "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
response = requests.get(
f"https://api.dcycle.io/lca/portfolio/{lca_id}/dashboard",
headers=headers,
params={"view": "system"}
)
dashboard = response.json()
for stage in dashboard["stages"]:
print(f"\n{stage['stage']} - {stage['label']} ({stage['phase']})")
for cat in stage["categories"]:
if cat["impact_value"] is not None:
print(f" {cat['impact_category']}: {cat['impact_value']} {cat['impact_unit']}")
const axios = require('axios');
const headers = {
'x-api-key': process.env.DCYCLE_API_KEY,
'x-organization-id': process.env.DCYCLE_ORG_ID
};
const lcaId = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890';
axios.get(`https://api.dcycle.io/lca/portfolio/${lcaId}/dashboard`, {
headers,
params: { view: 'system' }
})
.then(response => {
response.data.stages.forEach(stage => {
console.log(`\n${stage.stage} - ${stage.label} (${stage.phase})`);
stage.categories.forEach(cat => {
if (cat.impact_value !== null) {
console.log(` ${cat.impact_category}: ${cat.impact_value} ${cat.impact_unit}`);
}
});
});
});
Successful Response
{
"meta": {
"lca_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"product_name": "Ceramic Tile 60x60",
"methodology_id": "d4e5f6a7-b8c9-0123-def0-456789012345",
"functional_unit_value": 1000.0,
"functional_unit_id": "c1d2e3f4-a5b6-7890-cdef-ab1234567890",
"view": "system",
"selected_output_product_id": null,
"allocation_method": null,
"output_products": [
{
"output_product_id": "bf800281-bcc7-42f4-81e4-8ec9abb9745e",
"name": "Ceramic Tile 60x60",
"quantity": 1000.0,
"unit_id": "c1d2e3f4-a5b6-7890-cdef-ab1234567890",
"allocation_factor": 1.0
}
]
},
"stages": [
{
"stage": "A1",
"phase": "Production",
"label": "Raw material supply",
"categories": [
{
"impact_category": "climate_change",
"impact_value": 245.67,
"impact_unit": "kg CO2-Eq",
"top_contributors": [
{
"block_id": "e5f6a7b8-c9d0-1234-ef01-567890123456",
"block_name": "Portland cement",
"impact_value": 180.2
}
]
},
{
"impact_category": "acidification",
"impact_value": 1.23,
"impact_unit": "mol H+-Eq",
"top_contributors": [
{
"block_id": "e5f6a7b8-c9d0-1234-ef01-567890123456",
"block_name": "Portland cement",
"impact_value": 0.95
}
]
}
]
},
{
"stage": "A2",
"phase": "Production",
"label": "Transport to manufacturer",
"categories": [
{
"impact_category": "climate_change",
"impact_value": 18.45,
"impact_unit": "kg CO2-Eq",
"top_contributors": [
{
"block_id": "f6a7b8c9-d0e1-2345-f012-678901234567",
"block_name": "Truck transport 28t",
"impact_value": 18.45
}
]
}
]
},
{
"stage": "A3",
"phase": "Production",
"label": "Manufacturing",
"categories": [
{
"impact_category": "climate_change",
"impact_value": 95.12,
"impact_unit": "kg CO2-Eq",
"top_contributors": [
{
"block_id": "a7b8c9d0-e1f2-3456-0123-789012345678",
"block_name": "Kiln firing",
"impact_value": 95.12
}
]
}
]
},
{
"stage": "A4",
"phase": "Downstream",
"label": "Distribution",
"categories": [
{
"impact_category": "climate_change",
"impact_value": 12.34,
"impact_unit": "kg CO2-Eq",
"top_contributors": []
}
]
},
{
"stage": "B6",
"phase": "Downstream",
"label": "Operational energy use",
"categories": [
{
"impact_category": "climate_change",
"impact_value": 0.0,
"impact_unit": "kg CO2-Eq",
"top_contributors": []
}
]
},
{
"stage": "B7",
"phase": "Downstream",
"label": "Operational water use",
"categories": [
{
"impact_category": "climate_change",
"impact_value": 0.0,
"impact_unit": "kg CO2-Eq",
"top_contributors": []
}
]
}
],
"is_stale": false,
"impacts_pending": false,
"validation_errors": [],
"calculation_warnings": []
}
Co-Product Allocation Example
For LCAs with multiple output products, use theview and output_product_id parameters to see allocated impacts:
# Per-unit impact for a specific co-product
curl -X GET "https://api.dcycle.io/lca/portfolio/{lca_id}/dashboard?view=product_unit&output_product_id={product_id}" \
-H "x-api-key: ${DCYCLE_API_KEY}" \
-H "x-organization-id: ${DCYCLE_ORG_ID}"
Common Errors
404 Not Found
Cause: LCA does not exist or does not belong to the specified organization{
"code": "NOT_FOUND",
"detail": "LCA not found"
}
422 Validation Error
Cause:product_total or product_unit view requested without output_product_id
{
"detail": "output_product_id is required for product_total and product_unit views"
}
Related Endpoints
List LCA Portfolios
Retrieve all LCA portfolios
LCA Overview
LCA API introduction and concepts
Was this page helpful?