Changelog

Follow up on the latest improvements and updates.

RSS

This update exposes C.Scale's bill of materials-based LCA calculation service and includes a number of small improvements to unit handling in the roofing endpoints.
BoM-based whole life carbon engine
The new
api/calculate/bom
endpoint performs whole life carbon calculations on a set of material quantities ("takeoffs") together with background material data. This endpoint isolates the calculations which transform building quantities into results by life cycle stage and across time. Currently, one item is one takeoff. In the coming weeks, we're adding more support for assemblies.
Roofing conversion improvements
This update includes a number of improvements to unit conversions in the roofing carbon intensities endpoints.
This hotfix resolves an issue in the
/calculate
endpoints where emissions values remained constant when using the descriptive roofing schema, even when different specification levels were selected. Emissions now correctly respond to changes in specification.
Updated Interiors Scope
To reconcile top-down and bottom-up interiors calculations moving through our stack, we have removed equipment (IT and AV) from the Interiors scope. This represents a change in scope of this assessment to better match C.Scale's early-phase assessments with the current state of play in LCA practice.
Additionally, we now use a "single-sided" wall assembly in the default calculation to avoid the possibility of double-counting.
Together, these changes lower the carbon footprint of interiors for top-down ("simple") assessments by as much as 40%, reconciling early-phase estimates with the scope most commonly modeled in the high-resolution LCA.
Expand EPD Coverage
The EPD database now includes deeper support for product EPDs from more categories. The updated models now include better support for category-specific fields and improved mapping and handling of unit fields.
Small Fixes
A minor bug fix where the design phase was not showing properly in the DDx PDF. Thanks to an attentive user for catching this!
An improvement in how we expose area estimations for interiors. No changes in calculation here; only an update in how data is exposed in the response. Again, flagged thanks to an attentive user.
This update includes a minor expansion of the interiors data, more detail in the EPD model, and the capability to model retrofits happening in years other than the first year of analysis.
Additional Interiors Data
We have added additional data on wall assemblies as well as correcting some of the naming on single-sided assemblies previously in the assemblies DB.
Expand EPD Data Model
The industry-wide EPD model was expanded to additional fields.
Decouple
year_completion
from the beginning of the analysis
In this update, the user can pass
year_completion
to describe when the project is completed as a separate parameter from
year_analysis_start
. This allows better modeling of future retrofits by allowing users to model benchmark energy use for a building pre-retrofit, then model the retrofit in the given year.

new

General Updates

New Features!

Backend updates

2.51.02: Expanded refrigerant and interiors data

This update includes expansions to two of our background datasets - refrigerants and assemblies. No changes to the calculation.
New refrigerants data
In addition to widening the list of refrigerants available, we are now exposing more data on each. The composition of a refrigerant and its ASHRAE 34 Safety Class are both now exposed via API.
New interiors assemblies
The new update expands the list of floor, ceiling, and wall assemblies available in the interiors endpoints.
This PR includes a few small updates and changes to the API, most of which won't be visible to users.
Improve
/benchmarks
Previously, the benchmark for 30-year analysis did not properly exclude C phases in the reference set. Additionally, the message did not include any indication of the project name or scenario. These have been corrected. As a bonus, "A1-A3, A4, A5" is now being reformatted to "A1-A5".
MLops upgrades
Miscellaneous upgrades to out MLops, mostly arranging furniture for something bigger coming soon.
Interiors bug fixes
Previously, the API was grouping duplicate materials passed into an assembly. These fields are now de-aggregated, and will be passed correctly through from the request to the response.
This PR represents a ground-up rebuild of all our roofing assemblies so that material takeoffs all happen live in each calculation, rather than being "pre-packaged." With this, we built a fair amount of infrastructure to knit together our bill of materials-based LCA tooling with our lightweight analysis.
Roofing Configuration
With this release, a user can configure a roofing assembly from nine different roofing types:
  • Built-Up Roofing (BUR)
  • Modified Bitumen
  • Standing Seam Metal Roofing
  • Ballasted Single-Ply EPDM
  • Adhered Single-Ply EPDM
  • Single-Ply TPO
  • Clay Tile
  • Asphalt Shingles
  • PVC Membrane
For each of these roof assemblies, we calculate takeoffs down to the fasteners. The description of the assembly is passed back to the user in the
component_description
field.
By declaring an R-value (or RSI, depending on the unit system), we calculate insulation takeoffs. The user can declare one of six insulation types:
  • Expanded polystyrene (EPS) insulation
  • Extruded polystyrene (XPS) insulation
  • Polyisocyanurate (PIR) insulation
  • Mineral wool insulation, high-density
  • Mineral wool insulation, low-density
  • Fiberglass blanket insulation (faced)
Handling Performance Drag
The expanded API functionality introduces computational overhead that impacts response times. This release includes corresponding infrastructure updates to increase Lambda memory allocation, addressing immediate performance requirements. As a longer-term optimization, we're evaluating whether to extract computationally intensive operations into dedicated endpoints to improve overall system responsiveness.
CLF Benchmarking
There are new endpoints which benchmark results against the results of the CLF wbLCA benchmark study. These endpoints return the percentile of the current project in the benchmark set and a short description of the benchmark and the scope of comparison. When representing these benchmarks to users, we recommend using this text directly.
benchmark_type: embodied_carbon_intensity,
benchmark_set: CLFv2,
percentile: 67,
description: This project's embodied carbon intensity is at the 67th percentile of the Carbon Leadership Forum's WBLCA Benchmark Study (v2, 2025). This benchmark comparison includes only the 243 projects for which there is comparable data in the study, including emissions from structure, enclosure, and interiors across stages A1-A3, A4, B4-B5, and C2-C4.
Changes in results
This bottom-up refactor to the roofing assemblies has
lowered
the carbon intensities of the roofing assemblies. This is mainly due to enforcing the exclusion of all structure and finish materials from our library of roofing details, and by allowing the roofing R-value to depend on climate zone in the absence of user inputs (our previous model assumed a relatively higher insulating value, which wasn't parameterized). Across our test set, we see the following changes to envelope emissions overall:
  • Max
    : -13.4%
  • Mean
    : - 10.3%
  • Min
    : -6.3%
This is a patch update with minor improvements to how the API ingests, calculates, and returns data for building assemblies.
Improve unit handling
This update moves some code over from our bill of materials-based LCA repo to improve how units are declared and interpreted. Parts of the API still use implicit units. Allowing explicit unit declarations also supports our use of more complex units (e.g., thermal resistivity) for performing insulation takeoffs.
Total Emissions by Assembly
In the responses for each assembly, we how return total (A-C) emissions for that assembly. This wa a request related to improving visualization of these impacts.
Improve Assemblies Validation
The endpoints which return carbon intensities by assembly now validate the passed ID against a list of valid IDs. Previously, a user could pass silly strings and potentially trip an uncaught error.
This is a small but mighty PR to improve how the model handles unit conversion for some interiors assemblies.
Additionally, C.Scale is adjusting our generic FFE (furniture, fixtures, and equipment) carbon intensity estimates downward to reconcile its scope with the new bottom-up (assemblies and material-based) model. This update reduces C.Scale's estimates for interiors by 3 - 13%, depending on building form.
This patch release makes a number of minor updates to the interiors model:
  • Corrects unit errors for "count" items (doors and furniture)
  • Updates
    carbon_intensity
    to only include A1-A3
  • Added
    condition
    parameter to
    /api/carbon-intensities/interior-assemblies
    so that reuse or salvage is properly accounted for
  • Updates
    emissions_by_element
    to
    emissions_by_takeoff
    within the response for each space
Load More