Skip to main content

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_total on POST /v1/emission-factors/{category}/config-get-all now counts only the rows with no emission factor (config_source unmatched). A record that has a factor but is itself in error (record_status error) is no longer counted; its record_status is 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-all now lists records for which no emission factor could be found, with config_source unmatched, so a database can be chosen for them. Each row also returns record_status (the record’s own status, e.g. error), and the page returns errors_total, the number of rows in error across all pages.
  • Emission Factors: GET /v1/emission-factors/{category}/candidate-matches now returns activity_categories on each candidate, the requested categories the match applies to. PATCH /v1/emission-factors/{category}/config-update rejects a match from a different category with 422 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, with 422 CUSTOM_RECORD_REQUIRES_CO2E.
  • ⚠️ Emission Factors: PATCH /v1/emission-factors/employees/config-update (and config-update-by-filters) now returns processing_job_id instead of saved_ef_count / skipped_ef_count, like hotel_stays.
  • Fix: PATCH /v1/emission-factors/employees/config-update no 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’s failed_records (COMMUTE_MATCH_NOT_FOUND, with employee_name). 400 EF_SOURCE_NO_EMPLOYEE_MATCHES is 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/wastes finds the emission factor for a waste record.

September 29, 2026

API · Documentation
  • ⚠️ Wastes: POST /v2/wastes now accepts custom_ef_record_id and no longer accepts custom_emission_factor_id. Integrations that send custom_emission_factor_id must switch to custom_ef_record_id.
  • Wastes: POST /v2/wastes no longer applies admission control. A single POST now handles one or many waste records.
  • LCA: POST create on the v1 LCA endpoint now returns the ecoinvent matching job it started.
  • LCA: Recalibrated the ecoinvent match confidence thresholds. A match is now high at 0.60 and above and medium at 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 (also dcy categories) to manage My categories from the terminal: create, edit and delete datasets, fields and records. record create takes one --data object or a --file JSON array and reports each row’s result; record list supports --filter and --sort. Deletes ask for confirmation unless --yes is passed. Requires dcy auth login; API keys are rejected. Available from dcy v0.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_record and delete_dataset_record. Delete tools are annotated destructiveHint: 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-id header 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 return 404.
  • ⚠️ 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-partner header now returns 400 with error code UNKNOWN_PARTNER. Previously, it returned 500.
  • Transport: Bulk air and sea rows without coordinates now return a ZERO_RESULTS geocoding 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_co2e is 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_impacts row now records the full calculation (all multiplication factors) behind its impact value, for complete traceability.
  • Waste: The total count returned by GET /v1/wastes is now correctly scoped to project_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}/pause and POST /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-values accepts field=description (it returned 400), and POST /v1/emission-factors/{category}/config-get-all accepts a description list 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_unit field accepts lb and automatically converts to metric for emissions calculations.
  • Waste: POST /v1/pivot-table now 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_code and rd_code fields now correctly filter results in GET /v1/wastes responses.
  • 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-add now deduplicates organization_ids before processing.

September 21, 2026

API
  • Emission Factors: the coincidence returned by POST /v1/emission-factors/{category}/config-get-all is now the matched concept’s own stored label for the transport, transport_generation and use_of_product categories. 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 read maritime - Gasóleo instead of Marítimo - Gasóleo, and rows priced off DEFRA fuels read gas_oil instead 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/campaigns and 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, and PUT /v1/csrd/actions/{id}.
  • Purchases: GET /v1/emission-factors/purchases/unique-values now supports field=product_catalogue to retrieve the list of available product catalogue values for purchase emission factor filtering.
  • Wastes: GET /v1/emission-factors/wastes/config-get-all now returns LER (European Waste Catalogue) attributes and common waste type names in the response dataset.
  • Facilities: GET /v1/facilities/{id} now includes the organization_name field in single-facility responses.
  • Pivot Tables: POST /v1/pivot-table now validates that requested measure_id values 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 co2e value instead of incorrectly aggregating all greenhouse gas rows.
  • Transport Shipments: Shipment emissions aggregation now correctly sums only the co2e value instead of incorrectly aggregating all greenhouse gas rows.

September 16, 2026

API
  • Water Invoices: New supplier field now available on water invoice objects. Supported in GET /v1/invoices, POST /v1/invoices, PUT /v1/invoices/{id}, and POST /v1/invoices/water/filter.
  • District Heating Invoices: New district_heat_and_steam invoice type now supported, mapped to the heat_steam_and_cooling emissions category. Use with POST /v1/invoices and 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/facilities now supports server-side column sorting. Pass sort_by and sort_order query parameters to control result ordering.
  • Data Collection Campaigns: Campaign tasks can now override assignees at the campaign level. POST /v1/data-collection/campaigns and PUT /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 of POST /v1/emission-factors/wastes/config-get-all, and read the available codes for a year via GET /v1/emission-factors/wastes/unique-values?field=low_code. Applies to both the wastes and waste_transport categories.

September 14, 2026

API · MCP
  • Water Invoices: New fields water_meter_number and water_supply_point now available on water invoice objects (mirroring the electricity CUPS pattern). Supported in GET /v1/invoices, POST /v1/invoices, PUT /v1/invoices/{id}, import/export flows, OCR extraction, and completeness tracking. Both fields also available as filters via POST /v1/invoices/water/filter.
  • LCA Dashboard: GET /v1/lca/{id}/dashboard and GET /v1/lca/{id}/block-impacts now return impacts_pending boolean indicating when an async recalculation is in progress (e.g., for product-use B6/B7 or end-of-life C4 deferred jobs). When true, displayed impacts may change on their own as the background job completes.
  • Supplier Risk Assessment: GET /v1/supplier-risk/dashboard returns 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 only co2e aggregate 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), and employees (with current commute emissions). Query via the dcycle_query_data MCP tool with view_name parameter.

September 11, 2026

API
  • Leia Reports: GET /v1/decarbonization-plans/{id}/report-artifacts now includes artifact_version field on each report artifact, enabling clients to track version history and detect when reports are regenerated.
Documentation

September 10, 2026

API
  • Supplier Risk Assessment: New supplier document management endpoints — POST /v1/suppliers/{id}/documents uploads attachments with metadata, GET /v1/suppliers/{id}/documents lists them, and DELETE /v1/suppliers/{supplier_id}/documents/{id} removes them (row-authorized per organization). Supplier contacts can now be managed via PUT /v1/suppliers/{id} with the contacts field (array of contact objects with name, email, phone, role).
  • Data Collection Schedules: POST /v1/data-collections and PUT /v1/data-collections/{id} now accept period_start, period_end (the reporting period covered by the collection), send_time (scheduled delivery timestamp), and recurrence (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 the measurement_campaign_id field. The assigned campaign context is included in GET /v1/sot-v2/projects/{id}/output-data responses 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_ASSISTANT flag): New POST /v1/projects/{id}/assistant/chat endpoint 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 reference physical_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-responses now 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 receive 401 Unauthorized.
  • Documentation: Added a GET /v2/units reference page — it documents the type filter, the whole (unpaginated) catalog and how to resolve a currency id. Invoices and purchases docs now link to /v2/units instead of the legacy /api/v1/units endpoint.

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 support if conditions 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}/query now 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.
  • Purchases: the purchases emission-factor listing can be narrowed by its custom columns. The filter travels in the custom_values map in the body of POST /v1/emission-factors/purchases/config-get-all, not as one query parameter per column.
  • Pivot Tables: Added telecommuting_days and vehicle_occupancy measures to the pivot table measure registry — available via POST /v1/pivot-table/query for employee commute and vehicle analysis.
  • CSRD Reporting: Added POST /v1/sot-v2/projects/{id}/output-data/consolidate endpoint, 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/plan now accepts a view_contract schema 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_transport pipeline category with its own validated view, processing job entity, and DEFRA→ecoinvent sourcing — previously calculated inline with waste disposal. Existing waste invoices remain in the wastes category; the split applies to new calculations and imports.
  • ⚠️ GdO redemptions now enforce a 100%-of-consumption cap — POST and PATCH validate that the sum of all redemptions for a (CUPS, year) pair cannot exceed the actual electricity consumption in kWh. Returns 422 with REDEMPTION_EXCEEDS_CONSUMPTION when the cap is violated.
  • Energy: Added GET /v1/energy/summary endpoint returning kWh + original-unit totals (stationary, mobile, electricity, self-consumption) grouped by year/category/fuel/unit for a given organization and date range. The end_date filter is exclusive, and multi-year consumptions are attributed by year. See Energy.
  • GdO: Added GET /v1/gdo-redemptions/pending-summary endpoint 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 (=, !=, <, <=, >, >=), and if(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; NULL propagates. Requested via formula_metrics array on POST /v1/datasets/{id}/query. See Datasets Query.
  • Elastic Data: Added formula column type — a virtual column computed from the row’s other columns on every read (grid page, sort, filter, export, visualizations). The options.expr field 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); SUM counts it per reference. Native entity FK columns lend NUMBER columns the same way.
  • Pivot Table: Added telecommuting_days (total + average) and vehicle_occupancy (total + average) measures to the employee_commuting pivot — telecommuting from weekly_telecommuting days/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_kwh and fuel_kwh_financial measures to the fuel-consumption pivot, exposing kWh conversions for stationary/mobile/electricity energy alongside the existing original-unit measures. Added fuel_name_with_unit hierarchy and source_type dimension to the config endpoint.
  • Emission Factors: POST /v1/emission-factors/{category}/config-get-all now accepts custom_values in 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 the purchases filter schema declares it; other categories accept the field and ignore it silently rather than erroring. The companion GET /v1/emission-factors/{category}/custom-column-unique-values lists a column’s distinct values for a year — that one does return 400 outside purchases.
  • Invoices: Invoices GET /v1/invoices listing 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-answer returns a synthesized answer from multiple facility/subsidiary responses.
  • Fixed CSRD datapoint listing ordering to respect the sort_order column instead of returning datapoints in insertion order.
  • Fixed invoices GET /v1/invoices/{id} coercing CUPS start_date/end_date to date before response validation — previously failed validation when the database returned datetime.
  • Fixed confidence filter on invoices and waste listings guarding against non-object readings — previously crashed with AttributeError when the reading was a scalar.

September 8, 2026

API · Docs
  • ⚠️ CSRD: Swapped ESRS catalogue to the simplified-2026 standard — sot_csrd_output_data now contains 652 datapoints (down from 1546), and sustainability matters condensed from 90 legacy topics (version esrs_2023) to 37 active topics (version simplified_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 — login and confirm_mfa_login no longer return password_change_required, and the DAYS_PASSWORD_EXPIRES threshold 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 429 with UPSTREAM_RATE_LIMITED in 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 if conditionals comparing text columns.
  • Elastic Data: Sidecar formula columns may now reference the category’s own columns in their expressions — a purchases sidecar can reference quantity or unit_price from 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 if nodes) 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) handling dcycle_refrigerant_gases rows lacking source_id — previously crashed with AttributeError.
  • 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_LIMITED response format.

August 2026

August 5, 2026

API · CLI
  • CLI: Added dcy organization-supplier (list/create/edit/delete) for the org-level supplier directory, and dcy ppwr packaging-unit supplier (list/add/remove) to assign PPWR packaging units to a supplier — one supplier per unit, enforced by the API with a 409 on 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/reminder sets 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-preview shows what would be removed, and DELETE /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 unsupported electricity_lb event that the handler has never supported.
  • Fixed PATCH /v1/emission-factors/hotel_stays/config-update blocking 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’s failed_records instead of failing the request.
  • Fixed the multidb custom emission-factor pipeline further: the primary category was hardcoded to stationary regardless 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-filters returning a persistent 409 filter-hash mismatch whenever the preceding list request included a sort parameter — sort no 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 with 422.
  • Fixed POST /pivot_table/calculate sorting 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 on currency_unit_id raised on every row, and the export silently dropped each one rather than failing the job.
  • Fixed LCA transport (A2) impacts calculating as 0 for 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_consumption import 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) and dcy 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 list now shows a linked_packaging_units column — 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, and missing_transport_emission_factor — mirroring the silent-omission checks already in place for materials (A1).
  • API: Vehicle consumptions gain custom columns support — custom_values is now returned on list, org-wide list, and detail responses, matching the existing purchases/employees/facilities behavior. POST /v2/vehicle_consumptions/migrate now returns 409 instead of silently dropping an org’s custom values on a cross-organization move.
  • API: Hotel stays gain custom columns support — custom_values on responses and custom_column_schemas on the list page, plus column-header filtering (filter_by/filter_match/filter_or_fields) on GET /hotel-stays, matching the filtering already available on purchases.
  • API: Transport routes gain custom columns support — custom_values on list/detail responses, sortable via sort_by, and mappable/declarable through CSV imports.
  • API: employee_commuting imports now support custom columns — map an existing employees_historic sidecar field to a file header, or declare a new one, through the imports API.
  • API: Purchases list now returns custom_column_schemas under 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_by accepting any model attribute name (including relationships) and returning a 500 instead 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-id header (non-UUID) on API-key authenticated requests returning a 500 instead of a 401.
  • Fixed imports of the facility_consumption electricity/heat/water/recharge sub-templates silently dropping mapped or declared custom columns instead of persisting them.
  • Fixed a 500 error when submitting employee_survey_emails imports 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_date on custom emission-factor versions (POST /v1/emission-factors/custom-databases/{database_id}/versions) is now optional, defaulting to 1970-01-01 like 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 returns 204 No Content — it now returns 200 with a processing-job reference body, tracking the deletion asynchronously. See Elastic Data.
  • ⚠️ API: Purchases create endpoints drop the multidb query 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 ISO YYYY-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_dataset gains sort and filters params; added get_dataset_record, list_dataset_groups (dataset folders), and list_project_datasets tools.
  • API: Facilities update and delete now authorize across the whole accepted business family instead of the header org only — subsidiary facility rows are editable/deletable from the holding, mirroring how sold_products already works. Facility creation stays header-org only.
  • API: Logistic hub update/delete get 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_group is 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_group is set, instead of only the header org. Default behavior unchanged.

July 22, 2026

API
  • ⚠️ API: GET /v1/logistics/clients no longer accepts project_id (the client list is now organization-wide, not project-scoped) and is now keyset-paginated via new search, last_client_name, and limit params — 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 a category value on POST /historical-emissions and in validated_ti_all/get_total_impacts/get_greenhouse_gas_emissions filters.
  • API: Facilities list gains the same opt-in group view as business travels, vehicles, logistic hubs, transport, own workforce, and employees — a consolidate_group param for holding-wide data.
  • API: LCA block responses now include updated_by_name and updated_by_logo_url for the user who last updated a linked custom transport route.
  • API: Purchases list, totals, and count gain the same opt-in consolidate_group group view as the other modules — spans the org + descendants, each row enriched with organization_id/name/logo.
  • API: Own workforce trainings paginated list gains the same opt-in consolidate_group group view as the accidents & absences list.
  • API: Employees GET /v2/employees gains a survey_template_id filter and now returns it in the response.
  • API: The emission-factors detail export now accepts start_date/end_date in addition to year.
  • Fixed the vehicle bulk-upload fuel-type dropdown excluding battery_electric_vehicle and plug_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 a 409.
  • Fixed employee commuting CO2e (Scope 3 Cat. 7) to align with total_impacts values, 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_name empty.
  • 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_id column is now material_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-in consolidate_group group view as the other modules.
  • API: Vehicle bulk delete (by IDs and by filters) now operates across the whole organization family when consolidate_group is 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 a conversion_steps_detail column showing the full multi-gas chain.

July 21, 2026

API
  • API: PPWR packaging units gain an explicit ppwr_category field (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 legacy packaging_type. Also importable via a unit_ppwr_category CSV catalog column.
  • API: PPWR gap analysis adds category-conditioned obligations: Art. 24(1) void-space ratio cap for grouped/transport packaging (new void_space_pct field), Art. 25 + Annex V single-use plastic ban for grouped packaging (new is_single_use field), and Art. 29 reuse-target advisories.
  • API: Added POST /v2/ppwr/packaging-units/bulk-delete for organization-scoped batch deletion of packaging units, and a search query 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 — a consolidate_group param plus organization_id[] filter for holding-wide data.
  • API: Added an opt-in scope_to_project_organizations query param to the extended projects list — when true, projects owned by a parent/ancestor organization are only returned if the caller’s org is a project_organizations member of that project. Defaults to false, unchanged behavior.
  • API: The logistics report export now includes vehicle_license_plate and trailer_license_plate columns.
  • 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_company option to produce a per-company ZIP instead of a combined workbook.
  • API: The business travel download export now includes the passenger_number column (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); its gaps_addressed count now matches the questions actually generated.
  • Fixed employee emissions calculated via the legacy path sometimes showing co2e=0 in GET /v2/employees responses 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}/evaluate streams (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}/complete bulk-completes the selected tasks behind a server-side data-quality gate. Both support scoping to a subsidiary via organization_id and localized messages via Accept-Language.
  • API: Logistic hubs list gains the same opt-in group view as business travels and vehicles — a consolidate_group param (org + accepted descendants, each hub carrying its owning organization) and an organization_id[] filter to scope it further.
  • API: Added an optional request_date field (YYYY-MM-DD) to POST /v1/logistics/requests and its bulk variant — distinct from shipment_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) and depends_on (link a field to a built-in step’s condition group) on CustomFieldSch.
  • API: Added bulk invoice splitting — POST /v1/invoices/bulk-split-preview, bulk-split (by IDs), and bulk-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_group param with group-aware totals and an organization_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 a 500 instead of a 409 when 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_values now 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_group query param for a group-wide view across the header organization and its descendants — responses add organization_name/organization_logo_url. Defaults to false, 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}/steps now returns an explicit sources array per calculation period (source id, name, version), making calculation provenance explicit instead of implicit.
  • API: Added non_currency_purchases to the purchases unit-type enum, plus new ecoinvent unit options (kWh, MJ, ha) for custom emission factors.
  • API: Wastes gain a provider_name field (OCR-extracted service-provider name) on create, update, list, and detail.
  • API: Projects gain a status field (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 surfaces validation_errors for pieces that can’t compute; incompatible units raise a clear INCOMPATIBLE_UNIT error instead of silently corrupting piece data.
  • API: Imports — category-column value mappings are now remembered per organization/template across sessions; mapping/suggest responses add history_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_longitude from a Google Places result, skipping strict address validation that previously rejected valid rural/polígono addresses.
  • CLI: Added dcy lca delete-material and dcy lca bulk-delete-materials (alias rm-materials) subcommands. See LCA CLI.
  • Fixed the v2 supplier-code PATCH endpoint storing the wrong mapping ID for non-SIC (CNAE/NACE) codes, causing the assigned code to disappear on the next GET; also fixed a 404 when assigning CNAE/NACE codes, since lookups only checked the SIC table.
  • Fixed ChangePassword.old_password incorrectly 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 gain total_spend and currency columns.
  • API: Facilities list/detail responses now expose an inbound_email status 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_id field on datasets. See datasets.
  • API: Elastic Data — schema inference (POST /v2/elastic-data/inferences) accepts an optional dataset_id to evolve an existing dataset’s schema instead of replacing it.
  • CLI: Fixed dcy purchase supplier commands — set-code, list, and export had 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_consumptions and the facility wastes list returning a server error on an invalid sort value — 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 valid custom_emission_factor_id due to a UUID/string type mismatch.
  • Fixed a spurious validation error on emission-factor config updates when record_ids contained 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 the Accept-Language header (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 telecommuting as a work_model value alongside hybrid.

July 10, 2026

API · MCP
  • MCP: Added create_vehicle, update_vehicle, create_employee, and update_employee write tools for managing vehicles and employees programmatically — supports type, ownership, license plate, country, situation, status, and partial updates.
  • MCP: Added create_invoice and update_invoice write tools for managing invoices programmatically, with type and status validation.
  • MCP: Added create_logistics_request write tool for creating logistics requests programmatically, with category, TOC, load unit, and subcontractor type validation.
  • MCP: Added get_workforce_contracts read tool — exposes employee contract history filtered by own_workforce_id, returning start/end dates for contract period tracking. See workforce.
  • MCP: Added get_workforce_remunerations tool 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_materiality tool — retrieve CSRD Double Materiality assessment topics with optional year, lang, and material filters (docs).
  • MCP: Added list_csrd_iros tool — retrieve CSRD IROs (Impacts, Risks, and Opportunities) for a given year (docs).
  • MCP: Added get_csrd_output_data tool — retrieve ESRS disclosure requirements grouped by code, with optional date range filters (docs).
  • MCP: Added list_measurement_campaigns tool — retrieve measurement campaigns (reporting periods) for an organization (docs).
  • MCP: Added list_csrd_survey_results tool — retrieve CSRD stakeholder survey results with impact and financial materiality scores, filterable by year and lang (docs).
  • MCP: Added 6 PPWR packaging compliance tools — list_packaging_units, get_packaging_unit, get_packaging_compliance, get_project_compliance, get_packaging_gaps, and get_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) and surface_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_treatments and get_waste_water_treatment tools — 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, and get_sold_product_period_emissions tools — 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/csv rejecting multi-column CSVs (e.g. Organization + Email) with a FILE_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 with nights or check_out_date), create_transport (multi-leg shipments with per-section transport mode), and create_waste (waste generated in operations — Scope 3 Category 5). All include client-side enum validation and async CO2e calculation.
  • MCP: Added update_purchase write tool for partial updates to existing purchases — supports product_name, quantity, unit_id, purchase_date, expense_type, description, recycled, and custom_emission_factor_id fields with client-side expense_type validation.
  • MCP: Added update_business_travel write tool for partial updates to business travel records — supports transport_type, dates, origin/destination, distance_km, vehicle details, and trip metadata with client-side enum validation.
  • MCP: Added update_hotel_stay write tool for partial updates to hotel stay records — supports dates, country, hotel name/address, and room count with automatic CO2e recalculation.
  • MCP: Added update_transport write tool for replacing transport records — accepts a full sections array with per-leg transport mode, validates transport_type, travel_method, and frequency enums.
  • MCP: Added update_waste write tool for partial updates to waste records (Scope 3 Category 5) — supports identification_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_target write tool for creating reduction targets within decarbonization plans — supports scope (1-3), target_type (absolute/intensity), base_year, target_year, base_emissions, and reduction_percentage with client-side validation.
  • MCP: Added create_decarb_action write tool for creating concrete decarbonization initiatives linked to reduction targets — supports title, target_id, estimated_co2e_reduction, estimated_cost, payback_period_months, priority (quick_win/medium_term/long_term), and initiative_type with client-side validation.
  • MCP: Added create_project write tool for creating ESG projects — supports name, 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_task write tool for creating tasks within projects — supports title, assigned_to, due_date, stage (pending/in_progress/completed), category, tags, and subtask nesting via parent_task_id with client-side stage validation.
  • MCP: Added submit_kpi_response write tool for submitting values to Custom KPI campaigns — supports numeric, text, date, and select-type KPIs with optional facility_id scoping. Each entry requires a kpi_id and the matching value field (value_numeric, value_text, value_date, or option_id).
  • MCP: Added data entry workflow guidance to the server’s _INSTRUCTIONS prompt — LLMs now receive step-by-step chains for each write tool and a reminder to confirm with users before creating records.
  • MCP: Added list_workforce read 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_absenteeisms read 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_trainings read tool — exposes workforce training records (type, hours, dates, description) for ESG social disclosures. See workforce.

July 8, 2026

API · MCP
  • API: Added nights parameter to hotel stay create and update endpoints as an alternative to check_out_date — when nights is provided with check_in_date, the checkout date is derived automatically. Either check_out_date or nights must be supplied on creation.
  • API: Added custom_values response 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_facility and update_facility as 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/report returns product-level purchase emissions ranked by CO2e, and POST /v1/total-impacts/hotel-stays returns hotel-stay emissions (Scope 3 Category 6) with monthly buckets and weighted totals.
  • API: Added header row auto-detection for tabular imports — the header_row parameter and header_row_candidates response field let API consumers handle files with title rows above the actual column headers.
  • ⚠️ CLI: Resolved flag shorthand collisions — removed -y from --year/--registration-year (now means --yes) and -v from --verbose on vehicle diagnose/upload (now means HTTP debug). Use the long forms --year and --verbose instead.
  • 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-id and --file-id flag completions across all commands that accept them.
  • CLI: Routed all human-facing messages (cancellation notices, empty-result warnings, validation errors, verbose output) to stderr — --json output 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 MCP get_greenhouse_gas_emissions tool now accepts category='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 --size default from 100 to 50 to 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 hardcoded 2024.

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 --check for credential validation, automatic retry behavior, --json shorthand, dcy doctor exit codes, and config unset/set validation.

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, and get_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 _INSTRUCTIONS with 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, and dashboard.
  • Documentation: Added imports endpoint pages for column-values and error-groups.

July 1, 2026

Documentation

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/DELETE for 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/portfolio and GET /lca/portfolio/{lca_id}/dashboard now accept API key authentication alongside JWT.
  • MCP: Added LCA tools — list_lcas for querying portfolios and get_lca_dashboard for 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/totals endpoint for aggregated invoice metrics.
  • API: Added filter_by parameter to GET /v1/purchases for 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/recharges and POST /v1/logistics/recharges/bulk for recording fleet fuel consumption.
  • Documentation: Added Security & Compliance page covering API key lifecycle, data protection, access control, and incident response.

May 5, 2026

MCP

May 4, 2026

Documentation

April 2026

April 23, 2026

API
  • API: Added POST /v1/invoices/recalculate for async invoice recalculation with email notification.
  • API: Added new filter parameters and filter-options endpoint to invoices.

April 22, 2026

API · MCP
  • API: Exposed total_energy_kwh on vehicle consumption endpoints.
  • API: Added GET /v1/waste-efs endpoint for querying waste emission factors.
  • MCP: Added get_greenhouse_gas_emissions tool 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 dcycle to dcy — all commands now use the dcy prefix.
  • Documentation: Completed dcy CLI 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/sessions for 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/upload and POST /v1/files/process for programmatic document upload with AI-powered extraction and retry support.

January 2026

January 30, 2026

CLI · MCP · Documentation

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

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

November 2025

November 20, 2025

API · Documentation