Skip to main content

API changelog

This page lists changes to the Integration API (/api/v1) and to the public passport data (/api/dpp, JSON-LD) that an integration can see. Changes are additive, with one exception: a field the Battery Regulation requires us to correct may be retired in place. Each such retirement is listed here with the field that replaces it. Any other breaking change would ship as /v2.

For the changes to the platform as a whole, see the changelog.

v0.99.22​

Retired field: critical_raw_materials_none_declared (breaking, 2026-10-24)​

Applies to the EV, LMT, Industrial, Stationary and SLI battery templates.

  • The field critical_raw_materials_none_declared is retired. The field critical_raw_materials_none_present_declared replaces it. It means that the manufacturer declares no critical raw material is present, at any concentration.
  • Sending the old field returns UNKNOWN_FIELD: a row error on CSV import and a 422 FIELD_VALIDATION_ERROR on the API (see Errors and conventions).
  • In JSON-LD, the term dpp:criticalRawMaterialsNoneDeclared is retired. dpp:criticalRawMaterialsNonePresentDeclared replaces it.

What to change in an integration:

  1. Map your ERP column to critical_raw_materials_none_present_declared. A mapping that targets the old field is refused.
  2. Remove the old field from anything you send back, including formData you read from the API and write again.
  3. If you read the JSON-LD, read the new term.
  4. A declaration is not carried over. A product that had the old value set to true has to make the new declaration again.

The hazardous-substances declaration (hazardous_substances_none_declared, dpp:hazardousSubstancesNoneDeclared) is unchanged.

New publish gap kind: brand_operator_role_invalid​

GET /api/v1/products/{id}/gate and GET /api/v1/products/{id}/readiness can return a gap of kind brand_operator_role_invalid, with resolver operator-ui and detail.reason of not_set or distributor. It applies to every battery category and to no other category.

  • not_set: the product's brand has no economic operator role. A person sets it on the brand, on the Branding page of the Company Portal.
  • distributor: a brand cannot publish a battery as a distributor. The product has to move to a brand with another role in the product wizard.

No integration change is needed: kind is an open string by contract, and a kind you do not know is routed to a person. The gap cannot be closed over the API.

Passport data​

  • GET /api/dpp/{slug} gains dataController: { name, address, email } or null. See DPP overview.
  • JSON-LD dpp:economicOperators items now require a name (an item without one is not listed) and can carry contactPoint with a telephone, and url. See JSON-LD format.

Document download​

GET /api/v1/documents/{id}/download can answer 502 DOWNLOAD_FAILED for a file whose malware check is not complete or did not pass. Only a file that is still being checked is worth retrying, and only later. Do not retry an infected file, or one whose check failed. See Document download refusals.

GDPR​

GET /api/v1/gdpr/access and GET /api/v1/gdpr/portability now return company.legalEntities[] and company.brands[]. See GDPR and data.

v0.99.21​

  • Battery units. GET and POST /api/v1/products/{id}/units list and create the battery units of a published model. See The wizard flow.
  • File fields take a document id. A field of type: file takes the id of a document your company already holds. A document id that cannot be used is refused with FILE_REFERENCE_UNRESOLVED. GET /api/v1/categories/{code}/schema returns an evidence object on a file field that the certificate registry knows. See File fields.
  • Erasure deadline. POST /api/v1/gdpr/erase returns deadlineRule (one_calendar_month). slaDays is deprecated: deadlineAt is the deadline. See GDPR and data.

2026-08-01​

New publish gap kind registry_registration_missing (resolver operator-ui) on GET /gate and GET /readiness. The gap kind was added on this date and stays inactive until 18 February 2027. It appears only for battery categories in EU DPP scope, only from that date, and only while the product has no production registration in the EU DPP Registry. No integration change is needed today.

Was this page helpful?