Release notes July 2026

Multiple preferred datasets in boundary settings; Carbon+Alt+Delete now available in 11 languages; new dataset (Agri-footprint) and updates to many others; COE Performance Ladder report template; Multi-Factor Authentication (MFA); AI search in Factor Library improvements

More options for Preferred Datasets in boundaries

You can now select multiple Preferred Datasets within your boundaries, instead of being limited to a single choice. We have also changed the the behaviour so you now set preferred datasets per activity category, rather than factor category.

Spend-based datasets can now be selected as Preferred Datasets for Scope 3 Activity Categories, giving you more flexibility when activity-based data isn't available or practical to collect.

These changes are reflected across the Inventory, Import, and Request workflows, so your preferred dataset choices are applied consistently wherever you work with data. In a future update we will also add support for setting your custom factor libraries and Ecoinvent as preferred.

App now available in multiple languages

Carbon+Alt+Delete is now available in the following languages: Czech, Danish, Dutch, English, Finnish, French, German, Italian, Portuguese, Spanish, and Swedish.

You can switch languages from your account settings.

New datasets and dataset updates

We've added a new dataset and refreshed several existing ones with the latest available data:

  • New dataset: Agri-footprint (AFP 7 FLAG) More info here. Note that AFP will be available to every user to see the emission factors, however a resell agreement is required to actually use them.
  • GOV.UK updated to 2026
  • AIB updated to 2026
  • CO2e-emissiefactoren.nl updated to 2026
  • MITERD updated to v5

Please note that 2026 emissions might have changed due to the EF updates in AIB, GOV.UK, and CO2EF. Because of this we have created a new inventory snapshot found Reports section under the Inventory Snapshots tab.

CO2 Performance Ladder report template

We now support the CO2 Performance Ladder report template, making it easier to prepare and track your reporting against this certification scheme directly within the platform.

You can find the CO2 Performance Ladder report under the Reports section.

Multi-Factor Authentication (MFA)

Carbon+Alt+Delete now supports TOTP-based Multi-Factor Authentication (MFA), adding a vital secondary security layer to protect high-privilege accounts and local credentials, including cases where SSO coverage may be absent or unavailable.

TOTP (Time-based One-Time Password) generates a unique, temporary six-digit code by combining a shared secret key with the current time. Users can access these codes via authenticator apps (such as Google Authenticator), providing a dynamic second layer of security that expires every 30 seconds. Please note that MFA is currently enabled by each individual user in their account settings under the “Security tab”.

While SSO centralizes identity, internal MFA mitigates the risk of session hijacking and credential theft, helping our platform meet the "defense-in-depth" requirements expected in enterprise-grade security audits and compliance standards.

You will find detailed instructions regarding setting up MFA in this article.

Improved AI search in Factor Library

We've improved AI-powered search of emission factors in the Factor Library, focused on both relevance and performance. This includes the implementation of hybrid search to deliver more accurate results, along with a redesigned database structure that reduces recall issues and speeds up response times.

Minor updates & fixes

Updates

  • Element renamed to activity group in Boundaries > Activity Categories to better align with the rest of the app

Fixes

  • Fixed cases where importing transport data could cause import failures
  • Transport mode can now be mapped in step 3 even if skipped in step 2
  • Fixed start and end date being set to reporting period end date if not specified during import
  • "Unknown" detail from GOV.UK now correctly preserved when importing

API Updates

What's New

  • POST /accounts/v1/mfa/disable/confirm - Post Mfa Disable Confirm
  • POST /accounts/v1/mfa/disable/initiate - Post Mfa Disable Initiate
  • POST /accounts/v1/mfa/setup/confirm - Post Mfa Setup Confirm
  • POST /accounts/v1/mfa/setup/initiate - Post Mfa Setup Initiate
  • GET /accounts/v1/security - Get Security Status
  • POST /activities/v1/activity-categories/{activity_category_id}/duplicate - Post Activity Category Duplicate
  • GET /auth/mfa/sso-reauth - Get Mfa Sso Reauth
  • POST /auth/mfa/verify - Post Mfa Verify
  • GET /emission-factors/v2/dataset-version-preferences-by-activity/recalculation-status - List active preference recalculation tasks (v2)
  • GET /emission-factors/v2/dataset-version-preferences-by-activity - Get preferred dataset versions per activity category (v2)
  • PUT /emission-factors/v2/dataset-version-preferences-by-activity - Update preferred dataset versions per activity category (v2)
  • GET /emission-factors/v2/datasets - Get Datasets
  • GET /emission-factors/v2/attributes - Get Emission Factor Attributes
  • GET /emission-factors/v2/keywords - Get Emission Factor Keywords
  • GET /emission-factors/v2/units - Get Emission Factor Units

What's Deleted

None

What's Deprecated

  • GET /emission-factors/v1/datasets - Deprecation: 2026-12-28 - Sunset: 2027-03-28
  • GET /emission-factors/v1/attributes - Deprecation: 2026-12-28 - Sunset: 2027-03-28
  • GET /emission-factors/v1/keywords - Deprecation: 2026-12-28 - Sunset: 2027-03-28
  • GET /emission-factors/v1/units - Deprecation: 2026-12-28 - Sunset: 2027-03-28
  • POST /activities/v1/activity-categories - Deprecation: 2026-12-28 - Sunset: 2027-03-28
  • GET /emission-factors/v1/datasets/status - Deprecation: 2026-12-28 - Sunset: 2027-03-28
  • PUT /emission-factors/v1/datasets/preference - Deprecation: 2026-12-28 - Sunset: 2027-03-28

What's Changed

  • POST /auth/token
    • Response
      • Changed response: [200] — Successful Response
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: access_token   (object)
      • Missing property: token_type   (object)
      • Missing property: refresh_token   (object)
  • POST /auth/verify-email
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: email_user   (object)
      • Added property: email   (string, format: email, optional)
  • POST /documents/v1/documents
  • GET /emission-factors/v1/datasets
  • GET /emission-factors/v1/attributes
  • GET /emission-factors/v1/keywords
  • GET /emission-factors/v1/units
  • POST /emission-factors/v1/datasets/additional-info
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: dataset_ids   (object)
      • Added property: datasetIds   (array, optional)
  • POST /entities/v1/entities/count-attachments-comments
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: entity_ids   (object)
      • Added property: entityIds   (array, optional)
  • POST /measurements/v1/inventory-lines/count-attachments-comments
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: measurement_ids   (object)
      • Added property: measurementIds   (array, optional)
  • GET /reports/v1/reports/{report_id}/presigned-url
  • POST /requests/v1/request-items/count-attachments-comments
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: request_item_ids   (object)
      • Added property: requestItemIds   (array, optional)
  • POST /requests/v1/request-items/autogenerate
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: reporting_period_id   (object)
      • Missing property: keep_existing_request_items   (object)
      • Missing property: all_location_specific   (object)
      • Added property: reportingPeriodId   (string, format: uuid, optional)
      • Added property: keepOldItems   (boolean, optional)
      • Added property: allLocationSpecific   (boolean, optional)
        • Default value: False  
  • DELETE /requests/v1/data-landing-pages/supporting-documents
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: document_id   (object)
      • Added property: documentId   (string, format: uuid, optional)
  • POST /requests/v1/data-landing-pages/data-documents/pre-signed-write
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: file_name   (object)
      • Added property: fileName   (string, optional)
  • POST /requests/v1/data-landing-pages/supporting-documents/pre-signed-write
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: file_name   (object)
      • Added property: fileName   (string, optional)
  • POST /tags/v1/options/batch
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: option_creates   (object)
      • Added property: options   (array, optional)
  • POST /value-mappings/v1/value-mappings/batch
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: value_mapping_creates   (object)
      • Added property: valueMappings   (array, optional)
  • GET /accounts/v1/users/{user_id}
    • Response
      • Changed response: [200] — Successful Response
      • Changed body: application/json  
      • Added property: loginSecurity   (, optional)
  • POST /accounts/v1/user-roles
    • Request
      • Changed body: application/json  
      • Changed property type: userRole   (['string']   → ['string']  )
        • Enum values changed: added EXPERT, READ_ONLY, READ_ONLY_LIMITED, CAD_ADMIN, ADMIN  
        • Default value changed: EXPERT   → None  
    • Response
      • Changed response: [200] — Successful Response
      • Schema incompatible
      • Changed body: application/json  
  • POST /activities/v1/activity-categories
  • GET /emission-factors/v1/datasets/status
  • PATCH /emission-factors/v1/emission-factors/{emission_factor_id}/uncertainty
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: emission_factor_uncertainty_id   (object)
      • Added property: uncertaintyId   (string, format: uuid, optional)
  • POST /emission-factors/v1/emission-factors/{emission_factor_id}/duplicate
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: dataset_id   (object)
      • Added property: datasetId   (string, format: uuid, optional)
  • PUT /emission-factors/v1/datasets/preference
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: dataset_id   (object)
      • Added property: datasetId   (string, format: uuid, optional)
  • PATCH /measurements/v1/measurement-imports/{measurement_import_id}/status
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: entity_status   (object)
      • Added property: status   (, optional)
  • PUT /product-footprints/v1/allocation-keys/{allocation_key_id}/status
    • Response
      • Changed response: [400] — Allocation key status cannot be updated
  • POST /reports/v1/reports
    • Request
      • Changed body: application/json  
      • Changed property type: reportType   (['string']   → ['string']  )
        • Enum values changed: added CO2_PERFORMANCE_LADDER  
  • GET /requests/v1/request-items/{request_item_id}
    • Response
      • Changed response: [200] — Successful Response
      • Changed body: application/json  
      • Added property: datasetVersionId   (string, null, format: uuid, optional)
  • PUT /requests/v1/request-items/{request_item_id}
    • Request
      • Changed body: application/json  
      • Added property: datasetVersionId   (string, null, format: uuid, optional)
    • Response
      • Changed response: [200] — Successful Response
      • Changed body: application/json  
      • Added property: datasetVersionId   (string, null, format: uuid, optional)
  • POST /requests/v1/request-items
    • Request
      • Changed body: application/json  
      • Added property: datasetVersionId   (string, null, format: uuid, optional)
    • Response
      • Changed response: [200] — Successful Response
      • Changed body: application/json  
      • Added property: datasetVersionId   (string, null, format: uuid, optional)
  • PUT /requests/v1/request-items/{request_item_id}/send-emails
    • Response
      • Changed response: [200] — Successful Response
      • Changed body: application/json  
      • Added property: datasetVersionId   (string, null, format: uuid, optional)
  • PUT /requests/v1/request-items/{request_item_id}/status
    • Response
      • Changed response: [200] — Successful Response
      • Changed body: application/json  
      • Added property: datasetVersionId   (string, null, format: uuid, optional)
  • PATCH /requests/v1/request-items/{request_item_id}/template-document
    • Request
      • Changed body: application/json  
      • Missing property: template_document_id   (object)
      • Added property: templateDocumentId   (string, null, format: uuid, optional)
    • Response
      • Changed response: [200] — Successful Response
      • Changed body: application/json  
      • Added property: datasetVersionId   (string, null, format: uuid, optional)
  • PATCH /requests/v1/data-landing-pages/request-items/status
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: request_item_status   (object)
      • Added property: requestItemStatus   (, optional)
    • Response
      • Changed response: [200] — Successful Response
      • Changed body: application/json  
      • Added property: datasetVersionId   (string, null, format: uuid, optional)
  • PUT /value-mappings/v1/value-mappings/{value_mapping_id}
  • PUT /measurements/v1/inventory-lines/{measurement_id}/remove-status
    • Request
      • Schema incompatible
      • Changed body: application/json  
      • Missing property: status_code_value   (object)
      • Added property: entity   (integer, optional)
Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.