October 2026
October 2, 2026
API
- EU Taxonomy: New perimeter API to manage projects and activity decisions.
- Logistics: Recharges and requests now support editing of all their fields.
- Auth: A role’s dataset scope now refuses the sidecar of a native category.
- Fix: Consecutive invoices that share a boundary date are no longer flagged as overlapping during ingestion.
- Fix: Deleted invoices are no longer re-created from their original file.
- Fix: Corrected two impact units for ecoinvent 3.11 in LCA reports. The report builder now also states what the LCA holds.
October 1, 2026
API
- Emission Factors:
errors_totalonPOST /v1/emission-factors/{category}/config-get-allnow counts only the rows with no emission factor (config_sourceunmatched). A record that has a factor but is itself in error (record_statuserror) is no longer counted; itsrecord_statusis still returned.
September 2026
September 30, 2026
API · Documentation
- LCA: Automatic ecoinvent matching now proposes and applies market activities only.
- Emission Factors:
POST /v1/emission-factors/{category}/config-get-allnow lists records for which no emission factor could be found, withconfig_sourceunmatched, so a database can be chosen for them. Each row also returnsrecord_status(the record’s own status, e.g.error), and the page returnserrors_total, the number of rows in error across all pages. - Emission Factors:
GET /v1/emission-factors/{category}/candidate-matchesnow returnsactivity_categorieson each candidate, the requested categories the match applies to.PATCH /v1/emission-factors/{category}/config-updaterejects a match from a different category with422 CONCEPT_NOT_IN_CATEGORY. It also rejects a custom record that only has per-gas factors (CO2, CH4 or N2O) for a category that can only use CO2e, with422 CUSTOM_RECORD_REQUIRES_CO2E. - ⚠️ Emission Factors:
PATCH /v1/emission-factors/employees/config-update(andconfig-update-by-filters) now returnsprocessing_job_idinstead ofsaved_ef_count/skipped_ef_count, likehotel_stays. - Fix:
PATCH /v1/emission-factors/employees/config-updateno longer blocks the whole batch when the chosen database has no match for one commuting period. Uncovered periods keep their current factor and are listed in the processing job’sfailed_records(COMMUTE_MATCH_NOT_FOUND, withemployee_name).400 EF_SOURCE_NO_EMPLOYEE_MATCHESis returned only when no selected period is covered. - Fix: Saving an invoice no longer resets the scope 3 databases chosen on the emission factors screen.
- Fix: Changing an invoice’s dates no longer leaves it listed on the emission factors screen under years it no longer covers.
- Documentation: Clarified how
POST /v2/wastesfinds the emission factor for a waste record.
September 29, 2026
API · Documentation
- ⚠️ Wastes:
POST /v2/wastesnow acceptscustom_ef_record_idand no longer acceptscustom_emission_factor_id. Integrations that sendcustom_emission_factor_idmust switch tocustom_ef_record_id. - Wastes:
POST /v2/wastesno longer applies admission control. A singlePOSTnow handles one or many waste records. - LCA:
POSTcreate on the v1 LCA endpoint now returns the ecoinvent matching job it started. - LCA: Recalibrated the ecoinvent match confidence thresholds. A match is now
highat 0.60 and above andmediumat 0.50 and above. - Reports: A report’s language can now be changed after creation.
- Reporting suggestions: Word (
.docx) sources are now accepted. Each one is converted once to a frozen PDF. - Invoices: The invoice list and detail responses now return the uploaded file name.
- Fix: Invoices with overlapping periods but a different fuel are no longer flagged as duplicates during ingestion.
- Fix: Emission factor responses now show the config source for records without
conversion_steps. - Documentation: Documented the custom emission factors API (BETA) and linked it from the wastes documentation.
September 28, 2026
CLI · MCP · Documentation
- CLI: Added
dcy elastic(alsodcy categories) to manage My categories from the terminal: create, edit and delete datasets, fields and records.record createtakes one--dataobject or a--fileJSON array and reports each row’s result;record listsupports--filterand--sort. Deletes ask for confirmation unless--yesis passed. Requiresdcy auth login; API keys are rejected. Available fromdcyv0.0.127. - MCP: Added write tools for elastic data:
create_dataset,update_dataset,delete_dataset,add_dataset_fields,update_dataset_field,delete_dataset_field,create_dataset_records(up to 100 rows per call, with per-row results),update_dataset_recordanddelete_dataset_record. Delete tools are annotateddestructiveHint: true. They require the OAuth (remote) connection. - Documentation: Added the My Categories CLI page and documented the new elastic data write tools.
September 26, 2026
API
-
⚠️ Authentication: Requests that set the
x-organization-idheader are now rejected unless the caller is allowed to act as that organization. Previously, the header was not fully checked against the caller’s permissions. Integrations that switch between organizations must use credentials authorized for each target organization. -
⚠️ Reports: Every route that takes a
{report_id}is now scoped to the report’s project perimeter. Requests for reports outside the caller’s perimeter, including reports belonging to other organizations, now return404. -
⚠️ Projects: Project configuration changes that manage the perimeter now require permission to manage that perimeter. Organization links are now limited to organizations within the caller’s group. Requests that reference organizations outside the group return
404. - ⚠️ Reports: Dashboard comments and widget share projects are now authorized against the caller’s perimeter. Requests for resources outside it are rejected.
-
Security: Entity IDs passed in paths and request bodies are now validated against the caller’s organization across legacy routes. Requests that reference another organization’s resources are now rejected. Affected resources include:
- Emission factor overrides and emission factors
- Logistic hubs, transport, and purchases
- LCAs, including LCA IDs sent in request bodies
- Funds and ESG
- Validations, events, and data groups
- Destination IDs in request bodies
- Organization-ID routes, the sanitise-all operation, and
/emails
-
Support: Sending an unrecognized
x-partnerheader now returns400with error codeUNKNOWN_PARTNER. Previously, it returned500. -
Transport: Bulk air and sea rows without coordinates now return a
ZERO_RESULTSgeocoding status instead of failing with an internal error. - Transport: Maritime distances from the Canary and Balearic Islands to other countries are now calculated over sea routes. Distances and emissions for these shipments may change as a result.
- Facilities: The group view facility list now correctly counts the categories without data for each facility.
- FLAG: Updating land management data now recalculates emissions for the facilities and vehicles linked to the same family.
- Holdings: Deleting a single employee now clears the contract limit flag when the organization drops back under its limit.
September 25, 2026
API
- Datasets: The Social dataset now includes an Edad al salir (age at departure) field for departed employees.
- Datasets: The Social dataset now exposes the legacy pivot table’s social measures alongside its own, so reports built on the legacy pivot can be reproduced from the dataset.
- CSRD Reporting Suggestions: Generated suggestions now state data absences accurately and use tenses that match the reporting period. A new faithfulness check validates each suggestion against its source documents before it is returned.
- CSRD Reporting Suggestions: Document checks are more reliable. Runs now handle checks that finish late, documents that reference group entities, storage timeouts, failed source-reference lookups (retried), and corrupt profiles without failing the whole run.
- Transport: Shipment addresses extracted by OCR now fall back to an alternative geocoding strategy when the primary lookup fails. This reduces unresolved origins and destinations.
- Datasets: CH4 and N2O values are now read in actual tonnes. CO2 is now split into separate fossil and biogenic measures. Reported CH4 and N2O figures may change as a result.
- Invoices: Legacy water invoices are now priced in m³, regardless of the unit they were originally recorded in. This corrects emissions for water invoices stored in other units.
- Business Travel: Trips reviewed through OCR are now linked to their source file. Deleting the file now also removes its associated trips.
September 24, 2026
API
- ⚠️ Projects: Creating an Ecovadis project now requires a purchased Ecovadis framework plan. Organizations without the plan can no longer create Ecovadis projects.
- Projects: Ecovadis is now a full reporting framework, handled the same way as the other supported frameworks.
- Projects: New endpoints let you upload and delete a custom project image.
- Management Systems: Added an ISO 14001 legal register per facility (phase 1) for tracking applicable environmental legal requirements.
- Data Collection: Data collection tasks can now be shared across projects. This release also adds EINF eligibility and category coverage information for tasks.
- OCR: Transport invoices can now be read with OCR. OCR for business travel and transport is now fully active.
- Business Travel: Flight and train tickets can now be read with OCR to create business travel entries automatically.
- CSRD Reporting Suggestions: Each suggestion now includes the datapoint requirement it answers.
- CSRD Reporting Suggestions: Suggestions can now flag documents that describe a different entity or an older reporting period.
- CSRD Reporting Suggestions: Results are now delivered one by one as each is produced, rather than all at once when the run finishes.
- CSRD Reporting Suggestions: The run input now specifies the reporting framework, and each framework has its own profile.
- CSRD Reporting Suggestions: Suggestions are now written in report-ready language and generated from a more compact context.
- Datasets: The invoices and emissions datasets now support a scope 2 location-based reading alongside the market-based one.
-
Datasets: Activity
tons_co2eis now split into the activity’s own emissions and its scope 3 category 3 (upstream fuel- and energy-related) portion. - Datasets: Dataset visualizations are now scoped to their project, matching the behavior of the legacy pivot table.
- Waste: The default emission factor chain is now DEFRA → OCCC, with no fallback to Legacy factors. Gaps in OCCC are filled using equivalent factors from the matching hazard class. Some waste emissions may change as a result.
- Waste: Waste items extracted by OCR without a LER code are now queued for matching based on their description.
-
LCA: Every
piece_impactsrow now records the full calculation (all multiplication factors) behind its impact value, for complete traceability. -
Waste: The total count returned by
GET /v1/wastesis now correctly scoped toproject_id. - Invoices: The reviewed end date on fuel-delivery invoices is now preserved and no longer overwritten.
September 23, 2026
API
- CSRD Reporting Suggestions: Citation highlight rectangles are now resolved and returned for reporting suggestions, enabling precise visual anchoring of extracted content to source documents.
-
CSRD Reporting Suggestions: Suggestion runs can now be paused and resumed via
POST /v1/csrd/reporting-suggestions/runs/{id}/pauseandPOST /v1/csrd/reporting-suggestions/runs/{id}/resume. -
CSRD Reporting Suggestions: Stopped suggestion runs can now be deleted via
DELETE /v1/csrd/reporting-suggestions/runs/{id}. - CSRD: Citation validation now rejects sign flips and invented middle sections in citations with empty-edged ranges, ensuring citation integrity.
-
Emission Factors: the goods transport categories (
transport_distribution_downstream,transport_distribution_upstream) can now be filtered by description.GET /v1/emission-factors/{category}/unique-valuesacceptsfield=description(it returned 400), andPOST /v1/emission-factors/{category}/config-get-allaccepts adescriptionlist in the body (it was ignored). The description is the route name.
September 22, 2026
API
-
Transport: Weight units now support pounds (lbs) in addition to kilograms and metric tons. The
weight_unitfield acceptslband automatically converts to metric for emissions calculations. -
Waste:
POST /v1/pivot-tablenow splits waste CO2e emissions into separate measures for treatment emissions and collection transport emissions, providing granular breakdown of waste-related impacts. - Waste: Low-confidence emission factor matches are now applied to waste calculations while maintaining their flagged-for-review status, preventing calculation gaps while preserving data quality signals.
-
Waste: Column filters for
ler_codeandrd_codefields now correctly filter results inGET /v1/wastesresponses. - Vehicle Fleet: Vehicle data entry now uses native reading inputs instead of the PDF importer flow, streamlining data collection.
- Data Imports: Header column reranking during file imports now uses the Luna reranking model for improved accuracy.
-
Projects: Bulk-adding organizations to a project via
POST /v1/projects/{id}/organizations/bulk-addnow deduplicatesorganization_idsbefore processing.
September 21, 2026
API
- Emission Factors: the
coincidencereturned byPOST /v1/emission-factors/{category}/config-get-allis now the matched concept’s own stored label for thetransport,transport_generationanduse_of_productcategories. It used to be recomposed from the source’s table, and a column name shared by both sides of that join could shadow the source’s wording with one of Dcycle’s internal keys — MITECO vehicles readmaritime - Gasóleoinstead ofMarítimo - Gasóleo, and rows priced off DEFRA fuels readgas_oilinstead of the DEFRA fuel name. Rows whose concept had no recomposition rule were dropped from the response altogether; they are now returned. Other categories still recompose the string and are unchanged for now.
September 18, 2026
API
- Data Collection Campaigns: Task status is now automatically reconciled in both directions. When a task is marked complete in the data collection system, the underlying entity (e.g., invoice, consumption) is marked complete; conversely, when data is entered directly, the task status updates to reflect completion.
-
Data Collection Campaigns: Company strategy policy data can now be collected as a data collection task. Use with
POST /v1/data-collection/campaignsand related campaign endpoints. -
CSRD Goals & Actions: Goals and actions can now be linked to Impact, Risk & Opportunity (IRO) records, ESRS data points, and KPIs. Supported in
POST /v1/csrd/goals,PUT /v1/csrd/goals/{id},POST /v1/csrd/actions, andPUT /v1/csrd/actions/{id}. -
Purchases:
GET /v1/emission-factors/purchases/unique-valuesnow supportsfield=product_catalogueto retrieve the list of available product catalogue values for purchase emission factor filtering. -
Wastes:
GET /v1/emission-factors/wastes/config-get-allnow returns LER (European Waste Catalogue) attributes and common waste type names in the response dataset. -
Facilities:
GET /v1/facilities/{id}now includes theorganization_namefield in single-facility responses. -
Pivot Tables:
POST /v1/pivot-tablenow validates that requestedmeasure_idvalues are valid for the specified category and returns an error for invalid combinations. - Transport Routes: Route editing operations now properly preserve associated calculation configurations instead of orphaning them.
-
Employees: Employee commute emissions estimation now correctly sums only the
co2evalue instead of incorrectly aggregating all greenhouse gas rows. -
Transport Shipments: Shipment emissions aggregation now correctly sums only the
co2evalue instead of incorrectly aggregating all greenhouse gas rows.
September 16, 2026
API
-
Water Invoices: New
supplierfield now available on water invoice objects. Supported inGET /v1/invoices,POST /v1/invoices,PUT /v1/invoices/{id}, andPOST /v1/invoices/water/filter. -
District Heating Invoices: New
district_heat_and_steaminvoice type now supported, mapped to theheat_steam_and_coolingemissions category. Use withPOST /v1/invoicesand related invoice endpoints. -
Use-of-Product Consumptions: Bulk import now available via
POST /v1/imports/use-of-product-consumptions. Upload CSV files containing consumption data for B1 product-use calculations. -
Facilities:
GET /v1/facilitiesnow supports server-side column sorting. Passsort_byandsort_orderquery parameters to control result ordering. -
Data Collection Campaigns: Campaign tasks can now override assignees at the campaign level.
POST /v1/data-collection/campaignsandPUT /v1/data-collection/campaigns/{id}accept per-campaign assignee configuration, and tasks can be linked to specific projects.
September 15, 2026
API
- Wastes: the wastes emission-factor listing can now be narrowed by LER code. Pass
low_code(a list of exact European Waste Catalogue codes) in the body ofPOST /v1/emission-factors/wastes/config-get-all, and read the available codes for a year viaGET /v1/emission-factors/wastes/unique-values?field=low_code. Applies to both thewastesandwaste_transportcategories.
September 14, 2026
API · MCP
-
Water Invoices: New fields
water_meter_numberandwater_supply_pointnow available on water invoice objects (mirroring the electricity CUPS pattern). Supported inGET /v1/invoices,POST /v1/invoices,PUT /v1/invoices/{id}, import/export flows, OCR extraction, and completeness tracking. Both fields also available as filters viaPOST /v1/invoices/water/filter. -
LCA Dashboard:
GET /v1/lca/{id}/dashboardandGET /v1/lca/{id}/block-impactsnow returnimpacts_pendingboolean indicating when an async recalculation is in progress (e.g., for product-use B6/B7 or end-of-life C4 deferred jobs). Whentrue, displayed impacts may change on their own as the background job completes. -
Supplier Risk Assessment:
GET /v1/supplier-risk/dashboardreturns expanded v2 dataset including risk type distribution, heat map data (risk level × assessment status grid), collection funnel metrics (pending/in-progress/completed counts), and 12-month score history with month-over-month deltas. -
Waste Emissions: Waste transport calculations using DEFRA HGV freight factors now include per-gas breakdown (
co2,ch4,n2o,co2e) in emission detail responses, matching the granularity of ecoinvent factors. Previously onlyco2eaggregate was returned. - Electricity Invoice Steps: Invoice calculation steps for electricity now display DEFRA emission factor matches in the “Coincidencia” column for both production (generation/WTT) and transmission & distribution factors. Previously these matched correctly but rendered as ”-” in the steps table.
-
Copilot MCP: Dcycle MCP server’s view-contract registry adds three new queryable views —
business_travels(with computed CO2e per trip),purchase_suppliers(aggregated with emissions sum and purchase count), andemployees(with current commute emissions). Query via thedcycle_query_dataMCP tool withview_nameparameter.
September 11, 2026
API
- Leia Reports:
GET /v1/decarbonization-plans/{id}/report-artifactsnow includesartifact_versionfield on each report artifact, enabling clients to track version history and detect when reports are regenerated.
Documentation
-
⚠️ Logistics reference URLs renamed. Eight list pages moved from
get-*tolist-*— for example/api-reference/logistics/get-packagesis now/api-reference/logistics/list-packages. Redirects are in place, so saved links keep working, but update your bookmarks. Affected: clients, fuels, HOCs, hubs, packages, recharges, requests and TOCs.get-package(a single package) is unchanged. -
Corrections to earlier entries. Some notes published before today named routes and parameters that do not exist. The emission-factor custom-column filter is
custom_values, sent in the body ofPOST /v1/emission-factors/{category}/config-get-all— notsidecar_filters, and not aGET. TheGET /v2/unitsnote of 10 September claimed filtering, pagination and conversion examples the endpoint does not have:/v2/unitsreturns the whole catalog, unpaginated. -
Twelve endpoints that had no reference page now have one, among them
GET /v1/transports/counts,GET /v1/invoices/filter-options,GET /v1/hotel-stays/available-countries,GET /v1/vehicles/market_segments,POST /v1/employees/resend-surveyandPOST /v2/imports/{import_id}/unique-values.
September 10, 2026
API
-
Supplier Risk Assessment: New supplier document management endpoints —
POST /v1/suppliers/{id}/documentsuploads attachments with metadata,GET /v1/suppliers/{id}/documentslists them, andDELETE /v1/suppliers/{supplier_id}/documents/{id}removes them (row-authorized per organization). Supplier contacts can now be managed viaPUT /v1/suppliers/{id}with thecontactsfield (array of contact objects with name, email, phone, role). -
Data Collection Schedules:
POST /v1/data-collectionsandPUT /v1/data-collections/{id}now acceptperiod_start,period_end(the reporting period covered by the collection),send_time(scheduled delivery timestamp), andrecurrence(cron expression for recurring collections).GET /v1/data-collections/{id}returns these fields. -
CSRD Measurement Campaigns: ESRS projects can now be assigned a Data Management Activity (measurement campaign) via
PUT /v1/sot-v2/projects/{id}with themeasurement_campaign_idfield. The assigned campaign context is included inGET /v1/sot-v2/projects/{id}/output-dataresponses for BP1-04 and related datapoints. - Custom Emission Factors: Custom emission factors defined at a parent organization are now automatically available to all descendant organizations in the holding family. A child organization’s emission-factor listing includes the parent’s custom factors; previously they were scoped to the creating organization only.
-
Project Assistant (behind
ENABLE_PROJECT_ASSISTANTflag): NewPOST /v1/projects/{id}/assistant/chatendpoint provides read-only Q&A over project data (invoices, emissions, suppliers) — responses include citations and confidence scores. Conversations are ephemeral (not persisted). -
Purchases: Formula columns and dataset queries (
POST /v1/datasets/purchases/query) can now referencephysical_quantity(the purchased amount in physical units, separate from monetary value) — previously this field was present but unavailable to formula expressions. -
Employee Surveys:
POST /v1/employees/{id}/survey-responsesnow allows transport mode fields (vehicle_type,distance_km, etc.) to be omitted when the employee reports no commute — previously these were incorrectly marked as required. -
Formula Columns: Nested conditional expressions (
if(condition, if(...), ...)) are now validated at schema creation time and preserve correct calculation semantics when evaluating measure references inside branches — previously, deeply nested conditionals could produce incorrect aggregations. -
⚠️ Security: Removed unauthenticated operator endpoints from the public API —
GET /health/data-status,POST /notifications/cache/clear, and several debug routes now require authentication. Clients calling these endpoints without credentials will receive401 Unauthorized. -
Documentation: Added a GET /v2/units reference page — it documents the
typefilter, the whole (unpaginated) catalog and how to resolve a currency id. Invoices and purchases docs now link to/v2/unitsinstead of the legacy/api/v1/unitsendpoint.
September 9, 2026
API
- Datasets & Elastic Data: Formula columns extended with additional capabilities across multiple updates:
- Formula columns (
type: "formula"in elastic data fields) may now evaluate to text values in addition to numeric results — the return type is inferred from the expression tree. Text formulas supportifconditions over dimension values and string concatenation. - Sidecar formula columns (on related datasets or the category’s native sidecar) can reference the primary category’s own columns and read text values behind foreign-key references (e.g.,
[Unit.name]resolves to the unit’s display name, not its ID). - Row-mode formula metrics in
POST /v1/datasets/{id}/querynow support per-unit measure references when aggregating quantity fields. - Visualization schema responses (
GET /v1/datasets/{id}/schema) now include formula evaluation errors, condition branch values, and defaults from the visualization’s sidecar configuration.
- Formula columns (
- Purchases: the purchases emission-factor listing can be narrowed by its custom columns. The filter travels in the
custom_valuesmap in the body ofPOST /v1/emission-factors/purchases/config-get-all, not as one query parameter per column. - Pivot Tables: Added
telecommuting_daysandvehicle_occupancymeasures to the pivot table measure registry — available viaPOST /v1/pivot-table/queryfor employee commute and vehicle analysis. - CSRD Reporting: Added
POST /v1/sot-v2/projects/{id}/output-data/consolidateendpoint, which uses AI to consolidate multiple group member answers for a single CSRD datapoint into one recommended value with supporting rationale. Returns consolidated text, confidence score, and source attribution. - Copilot: Enhanced query planning with view contract support —
POST /v1/copilot/plannow accepts aview_contractschema describing available columns, types, and filterable dimensions per page (invoices, waste), and generates filters scoped to that schema. Confidence-level filtering added for invoices and waste queries (e.g.,confidence >= 0.8). - LCA: Fixed resource factor download to include ACV-derived (lifecycle assessment) resource factors that were previously omitted from the export.
September 9, 2026
API
- ⚠️ Waste transport emissions promoted to dedicated
waste_transportpipeline category with its own validated view, processing job entity, and DEFRA→ecoinvent sourcing — previously calculated inline with waste disposal. Existing waste invoices remain in thewastescategory; the split applies to new calculations and imports. - ⚠️ GdO redemptions now enforce a 100%-of-consumption cap —
POSTandPATCHvalidate that the sum of all redemptions for a (CUPS, year) pair cannot exceed the actual electricity consumption in kWh. Returns422withREDEMPTION_EXCEEDS_CONSUMPTIONwhen the cap is violated. - Energy: Added
GET /v1/energy/summaryendpoint returning kWh + original-unit totals (stationary, mobile, electricity, self-consumption) grouped by year/category/fuel/unit for a given organization and date range. Theend_datefilter is exclusive, and multi-year consumptions are attributed by year. See Energy. - GdO: Added
GET /v1/gdo-redemptions/pending-summaryendpoint returning all (CUPS, year) pairs across the organization family with electricity consumption not yet fully covered by GdO redemptions, ordered by remaining kWh. Powers the “Available to redeem” dialog. - Datasets: Added formula metrics — user-written expression trees over dataset numeric fields, evaluated per-row and aggregated (
mode: "row") or evaluated over already-aggregated measures (mode: "aggregate"). Supports arithmetic (+,-,*,/,**), functions (round,min,max), comparisons (=,!=,<,<=,>,>=), andif(condition, then, else)with text-literal or numeric tests. Row-mode formulas may reference dimensions in conditions (e.g.,if([Unit] = "G", weight / 1000, weight)); aggregate-mode formulas may nest row-mode formulas of the same request. Constants are bound as parameters; division guards against zero;NULLpropagates. Requested viaformula_metricsarray onPOST /v1/datasets/{id}/query. See Datasets Query. - Elastic Data: Added
formulacolumn type — a virtual column computed from the row’s other columns on every read (grid page, sort, filter, export, visualizations). Theoptions.exprfield stores a FormulaNode tree (same syntax as dataset formula metrics); read-only, standalone datasets only, never required, no default, no chaining. Referenced columns cannot be deleted, disabled, or recast while the formula exists (409). See Elastic Data Fields. - Elastic Data: Numeric columns of a referenced dataset (integer, decimal, quantity_unit, formula) are now exposed as row-level metrics of the host dataset, keyed
<relation>__<column>__value— a relation to a supplier’s emission-factor column can now be used in per-row formulas. The value is the referenced record’s number once per host row (a lookup);SUMcounts it per reference. Native entity FK columns lend NUMBER columns the same way. - Pivot Table: Added
telecommuting_days(total + average) andvehicle_occupancy(total + average) measures to theemployee_commutingpivot — telecommuting fromweekly_telecommutingdays/week, vehicle occupancy from carpool boolean (1 seat solo, 3 when true). Averages roll up correctly at every hierarchy level using hidden SUM/distinct-employee columns. See Pivot Table Config. - Pivot Table: Added
fuel_kwhandfuel_kwh_financialmeasures to the fuel-consumption pivot, exposing kWh conversions for stationary/mobile/electricity energy alongside the existing original-unit measures. Addedfuel_name_with_unithierarchy andsource_typedimension to the config endpoint. - Emission Factors:
POST /v1/emission-factors/{category}/config-get-allnow acceptscustom_valuesin its body — a{field_key: [values]}map that narrows the listing by the Elastic Data custom columns users add themselves (AND across keys, OR within a key). Only thepurchasesfilter schema declares it; other categories accept the field and ignore it silently rather than erroring. The companionGET /v1/emission-factors/{category}/custom-column-unique-valueslists a column’s distinct values for a year — that one does return400outsidepurchases. - Invoices: Invoices
GET /v1/invoiceslisting now filters the CO2e impact-sum columns by the custom columns the cells render — only impacts matching the sidecar filters selected for the row are summed. - Report Data: Added AI-consolidated group answers for CSRD datapoints —
POST /v1/report-data/{datapoint_id}/ai-group-answerreturns a synthesized answer from multiple facility/subsidiary responses. - Fixed CSRD datapoint listing ordering to respect the
sort_ordercolumn instead of returning datapoints in insertion order. - Fixed invoices
GET /v1/invoices/{id}coercing CUPSstart_date/end_datetodatebefore response validation — previously failed validation when the database returneddatetime. - Fixed confidence filter on invoices and waste listings guarding against non-object readings — previously crashed with
AttributeErrorwhen the reading was a scalar.
September 8, 2026
API · Docs
- ⚠️ CSRD: Swapped ESRS catalogue to the simplified-2026 standard —
sot_csrd_output_datanow contains 652 datapoints (down from 1546), and sustainability matters condensed from 90 legacy topics (versionesrs_2023) to 37 active topics (versionsimplified_2026) per EFRAG Appendix A. Existing double-materiality campaigns retain the legacy 90-topic list; new campaigns seed only the 37 active matters. The 27 CSRD auto-dashboard widgets have been remapped to 2026 datapoint codes; 14 widgets with no equivalent were removed. See CSRD. - ⚠️ Auth: Removed forced password-expiry policy —
loginandconfirm_mfa_loginno longer returnpassword_change_required, and theDAYS_PASSWORD_EXPIRESthreshold is gone. Users are never forced to change their password on login. Self-service password change and forgot-password reset are unaffected. See Auth. - ⚠️ Rate Limits: Account-wide rate limits (600/min burst, 900/min sustained per API key) are now enforced on dev and staging environments. Production remains in dry-run mode. Requests exceeding the limit return
429withUPSTREAM_RATE_LIMITEDin the response body. The logistics family is exempt from the public baseline. See Rate Limits. - Elastic Data: Formula columns may now evaluate to text — the same FormulaNode tree used for numeric formulas can return a text result via
ifconditionals comparing text columns. - Elastic Data: Sidecar formula columns may now reference the category’s own columns in their expressions — a purchases sidecar can reference
quantityorunit_pricefrom the purchases table itself, not just borrowed dimensions. - Elastic Data: Sidecar formulas may now read the texts behind the row’s foreign keys — if a purchase references a supplier, a formula can access the supplier’s name or country as a text dimension in conditions.
- Elastic Data: Added defaults in the visualization’s sidecar schema, formula errors as NULL with logging (instead of failing the query), and condition values (for
ifnodes) exposed on the schema endpoint. - Elastic Data: Sidecar per-unit measures are now available in row formulas — widgets can use normalized rates (e.g.,
emission_factor_per_kg) in custom calculations. - Fixed the emission-factor candidate-matches query (
GET /v1/emission-factors/{category}/candidate-matches) handlingdcycle_refrigerant_gasesrows lackingsource_id— previously crashed withAttributeError. - Fixed GWP conversion-factor deduplication across multi-row base periods — previously summed the same factor multiple times when a substance had multiple base-period rows.
- Fixed imports anonymous supplier uploads missing processing-job tracking and file association — processing job and file records are now created for the upload.
- Fixed LCA resource download excluding ACV-derived resource factors — the export now includes all factors.
- Docs: Published comprehensive rate-limits.mdx reference documenting the account-wide 600/min burst budget, token-bucket refill mechanics, logistics exclusion, and
UPSTREAM_RATE_LIMITEDresponse format.
August 2026
August 5, 2026
API · CLI
- CLI: Added
dcy organization-supplier(list/create/edit/delete) for the org-level supplier directory, anddcy ppwr packaging-unit supplier(list/add/remove) to assign PPWR packaging units to a supplier — one supplier per unit, enforced by the API with a409on conflict. See Organization Suppliers CLI. - API: Hotel stays custom columns now flow through CSV imports too — map an existing sidecar column to a file header, or declare a new one, completing the read/filter/import surface shipped August 4.
- API: Facilities inbound-email config gains automatic data-reminder emails —
PATCH /v1/facilities/{facility_id}/inbound-email/remindersets a reminder recipient (a free-form email, an existing org member, or both) and an optional threshold in days; a daily sweep emails facilities with no completed inbound data within that window. Setting a recipient email automatically allowlists it, so a plain reply lands back in the same inbound-email pipeline. - API: Added cascading delete for Datadis organization identifiers (NIF/CIF) —
GET /v1/datadis/organization-identifiers/{nif}/delete-previewshows what would be removed, andDELETE /v1/datadis/organization-identifiers/{nif}cascades to that identifier’s own-org supply contracts and invoices. - Fixed vehicle consumption delete endpoints (single, bulk, and bulk-by-filters) authorizing on the read perimeter instead of the write perimeter — a disabled organization’s consumptions were deletable even though its vehicle could not be updated. Cross-organization deletes authenticated with an API key now correctly return
403(CROSS_ORG_WRITE_REQUIRES_USER) instead of succeeding. - Fixed the electricity Scope 1 & 2 report (
POST /v2/download/scope-report) always generating one failed processing job alongside the successful one — the endpoint dispatched an unsupportedelectricity_lbevent that the handler has never supported. - Fixed
PATCH /v1/emission-factors/hotel_stays/config-updateblocking the whole batch when the chosen emission-factor source has no coverage for one stay’s country — uncovered stays now keep their existing config and are reported in the processing job’sfailed_recordsinstead of failing the request. - Fixed the multidb custom emission-factor pipeline further: the primary category was hardcoded to
stationaryregardless of invoice type, silently dropping the client-choice config for electricity/recharge/water/process invoices using a custom emission-factor database. - Fixed purchases
bulk-delete-by-filtersreturning a persistent409filter-hash mismatch whenever the preceding list request included asortparameter —sortno longer affects the filter hash, matching that it only controls display order. - Fixed imports auto-mapping for Spanish waste ledgers: 4-digit MITECO treatment subcodes (e.g.
R1201) now resolve to their parent operation code instead of falling through to manual mapping. - Fixed invoices and wastes custom-column creation accepting reserved grid keys (
edit,select,toc) — declaring a custom column with one of these names silently broke the shared facility-detail grid’s action column; it’s now rejected with422. - Fixed
POST /pivot_table/calculatesorting Scope 3 GHG categories lexicographically by label instead of numerically (Category 11 sorted before Category 2) — fixed backend-side so on-screen tables, Excel, and PDF exports are all consistent. - Fixed invoice create/update silently skipping the emission-factor config when a linked custom EF record had no available source for the invoice’s primary category — now fails fast with a
422(MULTIDB_CUSTOM_RECORD_INCOMPATIBLE_CATEGORY) instead of falling back to standard emissions unannounced. - Fixed the vehicles sheet in the Scope 1 & 2 report (
POST /v2/download/scope-report) shipping empty — a type mismatch oncurrency_unit_idraised on every row, and the export silently dropped each one rather than failing the job. - Fixed LCA transport (A2) impacts calculating as
0for portfolios whose transport was created via the API or older UI flows as a legacy “copy-piece” — those are now bridged into the current chain/leg model instead of being invisible to the calculation. - Raised the
facility_consumptionimport quantity limit from 50M to 10B. - Fixed hotel stay emission-factor configs only being created for a stay’s check-in year — a stay spanning a year boundary (e.g. Dec 28 – Jan 3) now gets configs for every year it touches.
August 4, 2026
API · CLI
- CLI: Added
dcy ppwr packaging-unit(list/show/create/edit/delete) anddcy ppwr packaging-unit sku(list/add/edit/delete) subcommands for managing PPWR packaging units and the SKUs they cover directly from the CLI. - CLI:
dcy file listnow shows alinked_packaging_unitscolumn — which PPWR packaging unit(s), if any, were created/applied from that file. - API: LCA calculation errors now also surface four transport (A2) data problems —
missing_transport_destination,missing_transport_origin,missing_transport_data, andmissing_transport_emission_factor— mirroring the silent-omission checks already in place for materials (A1). - API: Vehicle consumptions gain custom columns support —
custom_valuesis now returned on list, org-wide list, and detail responses, matching the existing purchases/employees/facilities behavior.POST /v2/vehicle_consumptions/migratenow returns409instead of silently dropping an org’s custom values on a cross-organization move. - API: Hotel stays gain custom columns support —
custom_valueson responses andcustom_column_schemason the list page, plus column-header filtering (filter_by/filter_match/filter_or_fields) onGET /hotel-stays, matching the filtering already available on purchases. - API: Transport routes gain custom columns support —
custom_valueson list/detail responses, sortable viasort_by, and mappable/declarable through CSV imports. - API:
employee_commutingimports now support custom columns — map an existingemployees_historicsidecar field to a file header, or declare a new one, through the imports API. - API: Purchases list now returns
custom_column_schemasunder group view, matching vehicles/vehicle-consumptions/hotel-stays/business-travels — a subsidiary’s custom column now renders under its own label instead of the holding’s. - Fixed cross-tenant authorization gaps on transport (climate) plan endpoints — reading, updating, or deleting another organization’s plan or measure is no longer possible for an authenticated caller outside that organization’s family.
- Fixed transport routes
sort_byaccepting any model attribute name (including relationships) and returning a500instead of only real, orderable columns. - Fixed PPWR packaging unit detail/update/delete endpoints (
GET/PATCH/DELETE /v2/ppwr/packaging-units/{id}) to enforce organization scoping, matching the existing SKU and substance-declaration sub-resource behavior. - Fixed a malformed
x-organization-idheader (non-UUID) on API-key authenticated requests returning a500instead of a401. - Fixed imports of the
facility_consumptionelectricity/heat/water/recharge sub-templates silently dropping mapped or declared custom columns instead of persisting them. - Fixed a
500error when submittingemployee_survey_emailsimports through the imports API. - Fixed the Scope 1 & 2 electricity/energy report (
POST /v2/download/scope-report) undercounting emissions for invoices whose billing period straddles the reporting-window boundary. - Fixed the multidb custom emission-factor pipeline: 3-gas (CO2/CH4/N2O) custom factors weren’t converting to CO2e (missing GWP conversion config), and only the primary category was processed for electricity/heat invoices, leaving secondary categories (location-based, generation, T&D) uncalculated.
start_dateon custom emission-factor versions (POST /v1/emission-factors/custom-databases/{database_id}/versions) is now optional, defaulting to1970-01-01like standard conversion factors. - Fixed custom-column filtering and sorting under group view (
consolidate_group) reading every row’s value from the header organization’s sidecar instead of the row’s own — a subsidiary’s custom-column value could silently drop out of a filtered result or sort as if empty. Affects purchases, vehicles, vehicle consumptions, business travels, facilities, wastes, hotel stays, invoices, employees, suppliers, and own workforce trainings. - Fixed dropped custom-column values during CSV imports going unreported — now surfaced via the processing job’s
job_metadata.failed_records, the same channel the Activity → Processing Jobs detail view already renders.
July 2026
July 27, 2026
API
- ⚠️ API:
DELETE /v2/elastic-data/datasets/{dataset_id}no longer returns204 No Content— it now returns200with a processing-job reference body, tracking the deletion asynchronously. See Elastic Data. - ⚠️ API: Purchases create endpoints drop the
multidbquery param — all organizations now route through the v2 conversion-factors pipeline unconditionally. - API: Elastic Data text→date/datetime column recasting now accepts day-first
DD/MM/YYYY(in addition to ISOYYYY-MM-DD), matching what the UI displays, and surfaces the expected format on a bad value. See Elastic Data. - Fixed the project task versions endpoint —
version_changes(what changed between versions) was never populated, and the most recent version was silently dropped from the list. - Fixed dataset visualization widgets rendering empty in project reports and their DOCX/PDF exports — they now resolve through the same query path as
POST /datasets/{key}/query.
July 24, 2026
API · MCP
- MCP: Expanded Elastic Dataset tools —
query_datasetgainssortandfiltersparams; addedget_dataset_record,list_dataset_groups(dataset folders), andlist_project_datasetstools. - API: Facilities
updateanddeletenow authorize across the whole accepted business family instead of the header org only — subsidiary facility rows are editable/deletable from the holding, mirroring howsold_productsalready works. Facility creation stays header-org only. - API: Logistic hub
update/deleteget the same family-wide authorization as facilities — subsidiary hub rows are editable/deletable under group view. - API: Transport (shipments/deliveries) bulk delete and own workforce bulk delete now follow the group view — family-scoped when
consolidate_groupis set, instead of only the header org. - API: Added Greenview hotel-stay emission factors for 227 additional countries (plus a missing Serbia match), broadening hotel stay CO2e coverage.
- Fixed LCA dashboard calculation errors listing the same underlying error multiple times per piece; block-scoped error codes are still preserved.
- Fixed OR-matching in Elastic Dataset record filters returning incorrect results.
July 23, 2026
API
- API: Vehicle consumption bulk delete (by IDs and by filters) now operates across the whole organization family when
consolidate_groupis set, instead of only the header org. Default behavior unchanged.
July 22, 2026
API
- ⚠️ API:
GET /v1/logistics/clientsno longer acceptsproject_id(the client list is now organization-wide, not project-scoped) and is now keyset-paginated via newsearch,last_client_name, andlimitparams — reads a dedicated lookup table instead of scanning the full logistics-requests history, fixing timeouts for large clients. - API: Added Scope 3 Category 13 (downstream leased assets) as a new GHG emission category (
downstream_leased) alongside the existing upstream-leased-assets category — accepted as acategoryvalue onPOST /historical-emissionsand invalidated_ti_all/get_total_impacts/get_greenhouse_gas_emissionsfilters. - API: Facilities list gains the same opt-in group view as business travels, vehicles, logistic hubs, transport, own workforce, and employees — a
consolidate_groupparam for holding-wide data. - API: LCA block responses now include
updated_by_nameandupdated_by_logo_urlfor the user who last updated a linked custom transport route. - API: Purchases list, totals, and count gain the same opt-in
consolidate_groupgroup view as the other modules — spans the org + descendants, each row enriched withorganization_id/name/logo. - API: Own workforce trainings paginated list gains the same opt-in
consolidate_groupgroup view as the accidents & absences list. - API: Employees
GET /v2/employeesgains asurvey_template_idfilter and now returns it in the response. - API: The emission-factors detail export now accepts
start_date/end_datein addition toyear. - Fixed the vehicle bulk-upload fuel-type dropdown excluding
battery_electric_vehicleandplug_in_hybrid_electric_vehicle, plus a related vehicle-type/fuel compatibility validation bug. - Fixed
DELETE /v1/projects/{project_id}still failing when the project had import sessions attached — sessions are now cleaned up first instead of only returning a409. - Fixed employee commuting CO2e (Scope 3 Cat. 7) to align with
total_impactsvalues, removing synthetic walking-employee rows that no longer matched the underlying calculation. - Fixed purchases bulk imports for v2 organizations — D&B supplier enrichment previously skipped them, leaving purchases unmatched to emission-factor configs and
product_nameempty. - Fixed CSV/XLSX header-row detection for files with sparse columns (filled only in the header row, never in data rows), which could misdetect the header on certain imports.
- Fixed purchases imports to resolve custom emission-factor groups and units defined on a parent organization — previously only descendant orgs were searched, blocking child-org imports.
- Fixed license plate matching during multi-org CSV imports to ignore hyphen/space formatting differences (normalizes to alphanumeric-only before comparing).
- Fixed heat invoice impact calculation falling through with no result when the v2 pipeline had no conversion steps — now falls back to the legacy emission-factor columns.
- Fixed the LCA scenario materials import template forcing material, supplier, and country into one combined dropdown value — the
material_idcolumn is nowmaterial_name, and each of the three now maps and validates independently. - API: Added a
product_name[]filter to the purchases list. - API: Purchase suppliers list (
GET /v1/purchases/suppliers) gains the same opt-inconsolidate_groupgroup view as the other modules. - API: Vehicle bulk delete (by IDs and by filters) now operates across the whole organization family when
consolidate_groupis set, instead of silently dropping subsidiary rows. Default behavior unchanged. - Fixed the business travel download export showing an emission factor from a frozen reference table instead of the one the calculation engine actually applied, so the exported factor and CO2e didn’t reconcile — the export now sources the factor and calculation chain from each trip’s own
conversion_steps, and adds aconversion_steps_detailcolumn showing the full multi-gas chain.
July 21, 2026
API
- API: PPWR packaging units gain an explicit
ppwr_categoryfield (Regulation (EU) 2025/40 Art. 3.1:sales/grouped/transport/e_commerce) — a user-set classification, never inferred, that now drives the gap and compliance engines instead of the legacypackaging_type. Also importable via aunit_ppwr_categoryCSV catalog column. - API: PPWR gap analysis adds category-conditioned obligations: Art. 24(1) void-space ratio cap for grouped/transport packaging (new
void_space_pctfield), Art. 25 + Annex V single-use plastic ban for grouped packaging (newis_single_usefield), and Art. 29 reuse-target advisories. - API: Added
POST /v2/ppwr/packaging-units/bulk-deletefor organization-scoped batch deletion of packaging units, and asearchquery param on the packaging units list endpoint for case-insensitive filtering by unit name or SKU reference. - API: Own workforce accidents & absences list and employee mobility surveys list (
GET /v2/employees) gain the same opt-in group view as business travels, vehicles, logistic hubs, and transport — aconsolidate_groupparam plusorganization_id[]filter for holding-wide data. - API: Added an opt-in
scope_to_project_organizationsquery param to the extended projects list — whentrue, projects owned by a parent/ancestor organization are only returned if the caller’s org is aproject_organizationsmember of that project. Defaults tofalse, unchanged behavior. - API: The logistics report export now includes
vehicle_license_plateandtrailer_license_platecolumns. - API: Added a bulk emission-factors export endpoint — queues an async export of emission-factor-detail records by organization(s), year, and category, with an
export_by_companyoption to produce a per-company ZIP instead of a combined workbook. - API: The business travel download export now includes the
passenger_numbercolumn (previously computed but omitted from the file). - API: Fixed integer fields above 2^53 being silently rounded during dataset ingestion — bare integer strings are now parsed exactly instead of routed through
float(). - API: Imports — custom-dataset column auto-mapping now recognizes a file header that contains every token of the field name plus an extra descriptive suffix (e.g. “Salario bruto oficina central” for field “Salario bruto”), reducing manual remapping. See
suggest-mapping. - Fixed incorrect PPWR Art. 7 recycled-content targets — the gap engine and the Declaration of Conformity resolver had disagreed with each other and with the regulation; both now read from one constants module.
- Fixed the PPWR supplier-survey template generator silently dropping questions for previously unmapped gap codes (e.g.
HEAVY_METALS_NON_COMPLIANT); itsgaps_addressedcount now matches the questions actually generated. - Fixed employee emissions calculated via the legacy path sometimes showing
co2e=0inGET /v2/employeesresponses even though the underlying emissions were non-zero.
July 20, 2026
API
- API: Added the Task Completion Assistant —
POST /v2/task-completion/projects/{project_id}/evaluatestreams (SSE) an AI-assisted evaluation of which project tasks are ready to be marked complete, combining deterministic data-presence signals with an LLM re-ask for ambiguous cases;POST /v2/task-completion/projects/{project_id}/completebulk-completes the selected tasks behind a server-side data-quality gate. Both support scoping to a subsidiary viaorganization_idand localized messages viaAccept-Language. - API: Logistic hubs list gains the same opt-in group view as business travels and vehicles — a
consolidate_groupparam (org + accepted descendants, each hub carrying its owning organization) and anorganization_id[]filter to scope it further. - API: Added an optional
request_datefield (YYYY-MM-DD) toPOST /v1/logistics/requestsand its bulk variant — distinct fromshipment_date, for customers who cross-reference logistics data against their own order-request date. - API: Employee survey custom fields support conditional branching — new
conditions(show child fields when a given option is selected) anddepends_on(link a field to a built-in step’s condition group) onCustomFieldSch. - API: Added bulk invoice splitting —
POST /v1/invoices/bulk-split-preview,bulk-split(by IDs), andbulk-split-by-filters. See invoices. - API: Transport (shipments/deliveries) list gains the same opt-in group view as business travels, vehicles, and logistic hubs — a
consolidate_groupparam with group-aware totals and anorganization_id[]filter. - Fixed vehicle consumption bulk uploads and CSV imports mishandling plates shared across organizations (fleet movements): auto-routing to the correct subsidiary now falls back correctly instead of rejecting the whole batch, and a plate genuinely ambiguous across multiple active orgs now requires an explicit organization instead of guessing one.
- Fixed a heat invoice impact miscalculation caused by an untyped UUID from a DB query; added missing standard gross-GJ conversion factors.
- Fixed
DELETE /v1/projects/{project_id}returning a500instead of a409when the project still has import sessions attached. - Fixed ROAD/RAIL logistics requests between separate landmasses (e.g. mainland Spain ↔ Canary Islands, Ibiza ↔ Mallorca) silently returning a near-zero, physically impossible distance instead of routing as maritime.
July 15, 2026
API · CLI
- API: Custom columns are now supported on eight more categories — employees, wastes, vehicles, business travels, invoices, invoice suppliers, facilities, and waste water treatments — matching the existing purchases behavior, with
custom_valuesnow returned on list/detail responses. Employees, wastes, business travels, and invoices also include custom columns in their downloaded exports. - API: Business travels and sold products list endpoints gain an opt-in
consolidate_groupquery param for a group-wide view across the header organization and its descendants — responses addorganization_name/organization_logo_url. Defaults tofalse, so existing callers are unaffected. - API: Added
GET /v1/company-lookup/match,/enrich, and/logo— a two-step Dun & Bradstreet company lookup (cheap name+country match, then a billable data enrich step) plus a Brandfetch logo suggestion, for the freemium onboarding flow. Restricted to accounts still in onboarding. - API:
GET /purchases/{id}/stepsnow returns an explicitsourcesarray per calculation period (source id, name, version), making calculation provenance explicit instead of implicit. - API: Added
non_currency_purchasesto the purchases unit-type enum, plus new ecoinvent unit options (kWh, MJ, ha) for custom emission factors. - API: Wastes gain a
provider_namefield (OCR-extracted service-provider name) on create, update, list, and detail. - API: Projects gain a
statusfield (active/archived); the extended projects list supports filtering by it. - API: LCA imports — direct material-to-process links now create connectable blocks matching the manual canvas; import summary counts (
total_inputs/total_output/total_blocks) are fixed from always returning zero; the dashboard now surfacesvalidation_errorsfor pieces that can’t compute; incompatible units raise a clearINCOMPATIBLE_UNITerror instead of silently corrupting piece data. - API: Imports — category-column value mappings are now remembered per organization/template across sessions;
mapping/suggestresponses addhistory_restored_count/stale_history_mapping_count. - API: Imports — vehicle bulk-upload fuel-type options now include electric, hybrid, and electric_renewable; large workbooks no longer error on
mapping/suggest(embedding requests are chunked under the model’s item limit). - API: Facilities creation now accepts
address_place_id/address_latitude/address_longitudefrom a Google Places result, skipping strict address validation that previously rejected valid rural/polígono addresses. - CLI: Added
dcy lca delete-materialanddcy lca bulk-delete-materials(aliasrm-materials) subcommands. See LCA CLI. - Fixed the v2 supplier-code
PATCHendpoint storing the wrong mapping ID for non-SIC (CNAE/NACE) codes, causing the assigned code to disappear on the nextGET; also fixed a404when assigning CNAE/NACE codes, since lookups only checked the SIC table. - Fixed
ChangePassword.old_passwordincorrectly enforcing an 8-character minimum, which raised an unhandled error for accounts with a legacy shorter password. - Fixed
CustomEmissionFactorDataEnergy.renewable_percentage— posting a custom energy emission factor without it no longer errors.
July 14, 2026
API · CLI
- API: Added
GET /v2/download/scope-report/{combustion,electricity,vehicles,recharge}per-category scope-report endpoints; Excel exports gaintotal_spendandcurrencycolumns. - API: Facilities list/detail responses now expose an
inbound_emailstatus field for the facility’s inbound-email onboarding state. - API: Imports — session creation accepts new routing-context parameters (
target_organization_id,measurement_campaign_id,lca_id,target_block_id) and a new anonymous suppliers import category. See imports. - API: Elastic Data — datasets can now be organized into folders (groups): new group CRUD endpoints and a
group_idfield on datasets. See datasets. - API: Elastic Data — schema inference (
POST /v2/elastic-data/inferences) accepts an optionaldataset_idto evolve an existing dataset’s schema instead of replacing it. - CLI: Fixed
dcy purchasesupplier commands —set-code,list, andexporthad incorrect download-path routing, broken pagination across all matches, and country-matching bugs; CSV parsing and export are also hardened against ragged rows and formula injection. - Fixed
GET /v2/vehicle_consumptionsand the facility wastes list returning a server error on an invalidsortvalue — both now fall back to the default order; the wastes list also gains previously-ignored sortable columns (description,total_km_to_waste_center,identification_name,updated_at). - Fixed
PATCH /v1/purchases/{id}(and the vehicle/invoice equivalents) crashing on a validcustom_emission_factor_iddue to a UUID/string type mismatch. - Fixed a spurious validation error on emission-factor config updates when
record_idscontained duplicates.
July 13, 2026
API
- API: Added a native Category 11 electricity audit export for sold products — a per product × country × period CSV with the emission-factor formula, source, and database used.
- API: PPWR gap-analysis endpoints (
/v2/ppwr/) now localize gap descriptions and required actions via theAccept-Languageheader (Spanish supported, English default). - Fixed a geocoding bug where addresses ending in an ISO alpha-2 country code (e.g. “Barcelona, ES”) could resolve to the wrong country, producing incorrect distances for business travel, logistics, and facility data.
- Fixed exports for custom emission factors showing “Unknown” instead of the emission-factor group name in the Provider column.
- Fixed the employees “unique values” endpoint not surfacing
telecommutingas awork_modelvalue alongsidehybrid.
July 10, 2026
API · MCP
- MCP: Added
create_vehicle,update_vehicle,create_employee, andupdate_employeewrite tools for managing vehicles and employees programmatically — supports type, ownership, license plate, country, situation, status, and partial updates. - MCP: Added
create_invoiceandupdate_invoicewrite tools for managing invoices programmatically, with type and status validation. - MCP: Added
create_logistics_requestwrite tool for creating logistics requests programmatically, with category, TOC, load unit, and subcontractor type validation. - MCP: Added
get_workforce_contractsread tool — exposes employee contract history filtered byown_workforce_id, returning start/end dates for contract period tracking. See workforce. - MCP: Added
get_workforce_remunerationstool to retrieve salary and compensation records for a given workforce contract, including amount, currency, and period dates. Completes the workforce tool set. - MCP: Added
list_double_materialitytool — retrieve CSRD Double Materiality assessment topics with optionalyear,lang, andmaterialfilters (docs). - MCP: Added
list_csrd_irostool — retrieve CSRD IROs (Impacts, Risks, and Opportunities) for a given year (docs). - MCP: Added
get_csrd_output_datatool — retrieve ESRS disclosure requirements grouped by code, with optional date range filters (docs). - MCP: Added
list_measurement_campaignstool — retrieve measurement campaigns (reporting periods) for an organization (docs). - MCP: Added
list_csrd_survey_resultstool — retrieve CSRD stakeholder survey results with impact and financial materiality scores, filterable byyearandlang(docs). - MCP: Added 6 PPWR packaging compliance tools —
list_packaging_units,get_packaging_unit,get_packaging_compliance,get_project_compliance,get_packaging_gaps, andget_ppwr_dashboard. Evaluate EU packaging regulation compliance at unit and project level, identify gaps, and view dashboard metrics. All use/v2/ppwr/routes. See PPWR. - API: Added optional
surface_area(numeric) andsurface_area_unit(string) fields to facility create, update, and read schemas (/v2/facilities/). Also available on waste water facility creation. Both fields are version-tracked. - MCP: Added
list_waste_water_treatmentsandget_waste_water_treatmenttools — query Scope 1 waste water treatment records by facility with date range, status, and CO2e status filters. See waste water. - MCP: Added
list_sold_products,get_sold_product_periods, andget_sold_product_period_emissionstools — access Scope 3 Category 11 (use of sold products) data including product catalog, reporting periods, and per-period emission breakdowns. See sold products. - Fixed
POST /v1/employees/csvrejecting multi-column CSVs (e.g. Organization + Email) with aFILE_PARSE_ERROR— the CSV branch now picks the email column the same way the Excel branch does.
July 9, 2026
MCP
- MCP: Added five new write tools for Scope 3 data entry —
create_purchase(purchased goods & services),create_business_travel(employee travel with origin/destination or manual distance),create_hotel_stay(accommodation withnightsorcheck_out_date),create_transport(multi-leg shipments with per-section transport mode), andcreate_waste(waste generated in operations — Scope 3 Category 5). All include client-side enum validation and async CO2e calculation. - MCP: Added
update_purchasewrite tool for partial updates to existing purchases — supportsproduct_name,quantity,unit_id,purchase_date,expense_type,description,recycled, andcustom_emission_factor_idfields with client-sideexpense_typevalidation. - MCP: Added
update_business_travelwrite tool for partial updates to business travel records — supportstransport_type, dates, origin/destination,distance_km, vehicle details, and trip metadata with client-side enum validation. - MCP: Added
update_hotel_staywrite tool for partial updates to hotel stay records — supports dates, country, hotel name/address, and room count with automatic CO2e recalculation. - MCP: Added
update_transportwrite tool for replacing transport records — accepts a fullsectionsarray with per-leg transport mode, validatestransport_type,travel_method, andfrequencyenums. - MCP: Added
update_wastewrite tool for partial updates to waste records (Scope 3 Category 5) — supportsidentification_name,base_quantity, dates,destination,total_km_to_waste_center, and emission factor fields with automatic CO2e recalculation. - MCP: All Scope 3 write tools are now complete — 5 create tools and 5 update tools covering purchases, business travels, hotel stays, transports, and wastes.
- MCP: Added
create_decarb_targetwrite tool for creating reduction targets within decarbonization plans — supportsscope(1-3),target_type(absolute/intensity),base_year,target_year,base_emissions, andreduction_percentagewith client-side validation. - MCP: Added
create_decarb_actionwrite tool for creating concrete decarbonization initiatives linked to reduction targets — supportstitle,target_id,estimated_co2e_reduction,estimated_cost,payback_period_months,priority(quick_win/medium_term/long_term), andinitiative_typewith client-side validation. - MCP: Added
create_projectwrite tool for creating ESG projects — supportsname,responsible_user_id,project_type(17 framework types including carbon_footprint, iso_14064, lca, esrs),methodology, and date fields with client-side validation. - MCP: Added
create_project_taskwrite tool for creating tasks within projects — supportstitle,assigned_to,due_date,stage(pending/in_progress/completed),category,tags, and subtask nesting viaparent_task_idwith client-sidestagevalidation. - MCP: Added
submit_kpi_responsewrite tool for submitting values to Custom KPI campaigns — supports numeric, text, date, and select-type KPIs with optionalfacility_idscoping. Each entry requires akpi_idand the matching value field (value_numeric,value_text,value_date, oroption_id). - MCP: Added data entry workflow guidance to the server’s
_INSTRUCTIONSprompt — LLMs now receive step-by-step chains for each write tool and a reminder to confirm with users before creating records. - MCP: Added
list_workforceread tool — the first tool covering the ESG social pillar (own workforce / employees). Exposes demographics, employment categories, contract dates, locations, and nationality. See workforce. - MCP: Added
list_workforce_absenteeismsread tool — exposes workforce absenteeism and workplace accident records. Each record is either an absenteeism (hours lost) or an accident (date + context), covering ESRS health & safety social disclosures. See workforce. - MCP: Added
list_workforce_trainingsread tool — exposes workforce training records (type, hours, dates, description) for ESG social disclosures. See workforce.
July 8, 2026
API · MCP
- API: Added
nightsparameter to hotel stay create and update endpoints as an alternative tocheck_out_date— whennightsis provided withcheck_in_date, the checkout date is derived automatically. Eithercheck_out_dateornightsmust be supplied on creation. - API: Added
custom_valuesresponse field to purchase list, detail, create, and update endpoints — returns elastic-data custom column values as a key-value dictionary. Purchase list sorting now also supports custom column keys. - MCP: Added
create_facilityandupdate_facilityas the first write tools for the MCP server — AI assistants can now create facilities with all standard fields and update existing ones with partial payloads and client-side status validation. - API: Added
GET /v2/elastic-data/datasets/{dataset_id}/records/{record_id}endpoint to retrieve individual dataset records by ID.
July 7, 2026
API · CLI · Documentation
- API: Added consolidated reporting endpoints —
POST /v1/total-impacts/purchases/reportreturns product-level purchase emissions ranked by CO2e, andPOST /v1/total-impacts/hotel-staysreturns hotel-stay emissions (Scope 3 Category 6) with monthly buckets and weighted totals. - API: Added header row auto-detection for tabular imports — the
header_rowparameter andheader_row_candidatesresponse field let API consumers handle files with title rows above the actual column headers. - ⚠️ CLI: Resolved flag shorthand collisions — removed
-yfrom--year/--registration-year(now means--yes) and-vfrom--verboseon vehicle diagnose/upload (now means HTTP debug). Use the long forms--yearand--verboseinstead. - CLI: Extended shell tab-completion to purchase, shipment, widget, import, and file-reading commands — widget supports two-level completion (project ID → widget ID). Also auto-registered
--project-idand--file-idflag completions across all commands that accept them. - CLI: Routed all human-facing messages (cancellation notices, empty-result warnings, validation errors, verbose output) to stderr —
--jsonoutput on stdout is now reliably parseable via pipes. - Documentation: Restructured CLI docs — split large pages into standalone command pages for facilities, vehicles, employees, invoices, purchases, transport, and 10+ more commands.
July 6, 2026
API · CLI · MCP
- Added land use change (
land_use_change) as a new GHG emission category across API, MCP, and historical emissions (Scope 1 — LULUCF). The MCPget_greenhouse_gas_emissionstool now acceptscategory='land_use_change'. - CLI: Added shell tab-completion for positional arguments on facility, vehicle, employee, file, project, hub, transport, and member commands — IDs are suggested with human-readable names or license plates.
- CLI: Changed
invoice list --sizedefault from100to50to align with all other list commands. - MCP: Fixed prompt templates (
carbon_footprint_summary,fleet_report,logistics_overview) to default year to the previous calendar year instead of hardcoded2024.
July 5, 2026
CLI
- CLI: Added SIGTERM handling for clean shutdown in containers — the CLI now exits gracefully with code 143 when stopped by Docker, Kubernetes, or systemd.
- Documentation: Expanded CLI docs with exit codes reference, structured JSON error output format,
auth status --checkfor credential validation, automatic retry behavior,--jsonshorthand,dcy doctorexit codes, andconfig unset/setvalidation.
July 4, 2026
MCP · Documentation
- MCP: Added client-side enum validation to 14 tools — catches invalid
status,ownership,situation,transport_type,category,framework,impact_category, and other enum parameters before API calls with clear error messages instead of silent empty results. - MCP: Enriched docstrings for 9 tools with GHG scope context and usage hints, improving LLM tool discovery for
list_vehicles,list_employees,list_transports,list_files,get_recent_activities,list_logistics_hubs,get_logistics_report,get_custom_kpi, andget_kpi_campaign_values. - MCP: Fixed incorrect enum values in vehicles, hotel stays, transports, and business travels tool documentation.
- MCP: Added Gemini CLI configuration to the MCP quickstart guide.
- Documentation: API response field accuracy sweep — fixed types, nullability, and missing fields across 20+ endpoint pages. Added cross-links between API, CLI, and MCP documentation.
July 3, 2026
API · MCP · Documentation
- API: Added async logistics report export endpoint
GET /v1/logistics/report/export— queues a background job to generate a detailed row-per-leg export (CSV, Excel, or JSON with optional per-client ZIP) and emails a download link when ready. - MCP: Added initial client-side enum validation and enriched tool docstrings for better LLM self-correction and tool selection.
- MCP: Expanded
_INSTRUCTIONSwith workflow guidance and best practices for multi-step analysis. - Documentation: Removed 56 internal/UI-only endpoint pages from public API docs — the developer center now shows only endpoints useful for external API consumers.
- Documentation: Fixed API base URLs from
/api/v1/to/v1/and improved the API introduction with versioning and rate limit information. - Documentation: Enriched CLI documentation across all command pages with output examples, flag tables, JSON examples, and missing subcommands.
- Documentation: Elevated 8+ MCP tool pages with response examples, parameter fixes, and scope guidance.
July 2, 2026
Documentation
- Documentation: Added Common Errors sections to all API endpoint pages with error codes, descriptions, and resolution guidance.
- Documentation: Added LCA endpoint pages —
create-from-json,create-from-excel,validate,impacts,export-xlsx, anddashboard. - Documentation: Added imports endpoint pages for
column-valuesanderror-groups.
July 1, 2026
Documentation
- Documentation: Added endpoint pages for imports module (lifecycle, mapping, validation, rows), custom KPI (datasets, definitions, assignments), dashboards, sold products, historical emissions, and logistics navigation pages.
June 2026
June 30, 2026
API · MCP
- MCP: Expanded toolset from 21 to 45 tools — added 24 new read-only tools across facilities detail, wastes, hotel stays, transports, logistics (clients/hubs/report/summary), files, historical emissions, total impacts, emission factors, projects, dashboards, decarbonization plans, KPI datasets/campaigns/assignments, LCA block/piece impacts + validation, elastic data, and compliance.
- API: Added Elastic Data field/record CRUD endpoints with type-aware filtering and sorting — new
POST/PATCH/DELETEfor fields and records with operator grammar for typed queries. - API: Added LCA ecoinvent activity linking — three new endpoints for searching ecoinvent 3.11 activities (
GET /v1/lca/ecoinvent/activities), resolving locations (GET /v1/lca/ecoinvent/activity-locations), and linking materials to impact sources (POST /v1/lca/materials/{id}/link).
June 29, 2026
API · MCP
- API: Exposed LCA portfolio and dashboard via public API —
GET /lca/portfolioandGET /lca/portfolio/{lca_id}/dashboardnow accept API key authentication alongside JWT. - MCP: Added LCA tools —
list_lcasfor querying portfolios andget_lca_dashboardfor EN 15804 environmental impact results.
June 15, 2026
API
- API: Added employees bulk delete endpoints — delete by IDs (
POST /v1/employees/bulk-delete) and by filters (POST /v1/employees/bulk-delete-by-filters).
June 8, 2026
API
- API: Added custom KPI Excel download endpoint (
GET /v1/custom-kpi/datasets/{id}/download) for programmatic data export. - API: Added
GET /v1/invoices/totalsendpoint for aggregated invoice metrics. - API: Added
filter_byparameter toGET /v1/purchasesfor server-side per-column filtering.
June 1, 2026
MCP
- MCP: Fixed Clerk SSO token support in the MCP OAuth authentication flow.
May 2026
May 9, 2026
API · Documentation
- API: Added logistics fuel recharges endpoints —
POST /v1/logistics/rechargesandPOST /v1/logistics/recharges/bulkfor recording fleet fuel consumption. - Documentation: Added Security & Compliance page covering API key lifecycle, data protection, access control, and incident response.
May 5, 2026
MCP
- MCP: Added Manus streamableHttp configuration to MCP quickstart.
May 4, 2026
Documentation
- Documentation: Added GHG Protocol data requirements guide.
- Documentation: Added Scope 3 Category 11 — Use of Sold Products guide.
April 2026
April 23, 2026
API
- API: Added
POST /v1/invoices/recalculatefor async invoice recalculation with email notification. - API: Added new filter parameters and
filter-optionsendpoint to invoices.
April 22, 2026
API · MCP
- API: Exposed
total_energy_kwhon vehicle consumption endpoints. - API: Added
GET /v1/waste-efsendpoint for querying waste emission factors. - MCP: Added
get_greenhouse_gas_emissionstool to MCP emissions page.
April 17, 2026
API
- API: Added wastes list, detail, bulk-delete, and unique-values endpoints.
April 16, 2026
CLI · Documentation
- ⚠️ CLI: Renamed CLI binary from
dcycletodcy— all commands now use thedcyprefix. - Documentation: Completed
dcyCLI command coverage in developer center docs. - Documentation: Added ISO 14001 management systems guide.
April 8, 2026
API · MCP
- API: Added Imports module —
GET /v2/imports/sessionsfor listing and filtering import sessions, plus provider-backed options endpoint. - MCP: Added remote mode setup for VS Code, ChatGPT, and Copilot Studio to MCP quickstart.
April 7, 2026
Documentation
- Documentation: Added Imports section to the developer center.
April 6, 2026
MCP
- MCP: Added Copilot Studio, ChatGPT, and Gemini CLI configuration guides to MCP quickstart.
April 1, 2026
MCP
- MCP: Launched remote MCP server at
mcp.dcycle.io— no local installation required.
March 2026
March 31, 2026
API
- API: Added autonomous file upload flow —
POST /v1/files/uploadandPOST /v1/files/processfor programmatic document upload with AI-powered extraction and retry support.
January 2026
January 30, 2026
CLI · MCP · Documentation
- CLI: Launched Dcycle CLI documentation — authentication, organizations, emissions data, logistics, and assets commands.
- CLI: Added workflow examples — CI/CD pipeline, multi-org reporting, and logistics automation.
- MCP: Launched MCP Server documentation — overview, quickstart, and tool reference pages for organizations, facilities, vehicles, emissions, and resources.
- Documentation: Added automation guides — reporting pipelines, multi-organization management, and AI-assisted analysis.
January 12, 2026
Documentation
- Documentation: Added ISO 14064 documentation structure with category-by-category emission guides.
January 11, 2026
API
- API: Updated API key authentication to include user attribution on API key requests.
December 2025
December 23, 2025
API
December 11, 2025
API
- API: Added endpoint documentation for business travels and employees.
December 3, 2025
Documentation
- Documentation: Added GHG Protocol Scope 3 guides — Category 1 through Category 9, covering purchased goods, capital goods, fuel & energy, upstream transport, waste, business travel, employee commuting, and downstream transport.
December 2, 2025
API
- API: Added logistics package and client endpoint pages with traceability parameter documentation.
November 2025
November 20, 2025
API · Documentation
- Launched the Dcycle Developer Center at code.dcycle.io — the central hub for API, CLI, and MCP documentation.
- API: Published initial API reference for logistics (calculate shipment, upload CSV, get TOCs, get report), vehicles, and facilities.
- Documentation: Published introduction, quickstart, and authentication guides.