# Changelog

> What changed in the integration API and in this documentation.

New entries are at the top. The history is also available as an [RSS feed](https://passport.kabin.sh/docs/en/changelog/rss.xml).

## 0.10.0

_2026-10-24 · API · Contract · Integrations_

Integrations can now bring units in and follow changes without scanning everything.

- A third key scope, `import`: a key with it uploads, maps and validates spreadsheet imports of units
  ([`createImport`](https://passport.kabin.sh/docs/en/api-reference/imports/create-import), [`getImport`](https://passport.kabin.sh/docs/en/api-reference/imports/get-import),
  [`listImports`](https://passport.kabin.sh/docs/en/api-reference/imports/list-imports),
  [`updateImportMapping`](https://passport.kabin.sh/docs/en/api-reference/imports/update-import-mapping),
  [`validateImport`](https://passport.kabin.sh/docs/en/api-reference/imports/validate-import)). Committing the import and approving its
  values stay with members in the portal. An import staged with a key names it in `created_by_api_key`; `created_by`
  is then absent.
- Import presets: `preset` on `createImport` and `updateImportMapping` maps the columns of a known ERP export by
  their headers.
- The change feed [`listChanges`](https://passport.kabin.sh/docs/en/api-reference/changes/list-changes) (scope `read`): the organisation's
  changes oldest first, without values, actors or personal data, safe to poll with a stored cursor.
- New [integration guides](https://passport.kabin.sh/docs/en/integrations): the security model, five workflows, iPaaS, standards and a page
  per ERP system from the ERP registry, with how and when each interface was checked.

## Developer documentation

_2026-10-24 · Documentation_

The developer documentation moves to `/docs/` and replaces the former `/api-docs` page (which now redirects to
the API reference).

- Getting started, concepts, guides and recipes in German and English.
- The API reference is generated from the published contract, with a playground, code samples in cURL,
  JavaScript, Python and Go, and the contract to download ([JSON](https://passport.kabin.sh/docs/openapi.json),
  [YAML](https://passport.kabin.sh/docs/openapi.yaml)).
- Every page is available as Markdown (the page's address plus `.md`), along with
  [`llms.txt`](https://passport.kabin.sh/docs/en/llms.txt) and [`llms-full.txt`](https://passport.kabin.sh/docs/en/llms-full.txt) for language models.

## 0.9.0

_2026-10-24 · API · Contract_

Addresses follow the format of their European country. All changes are compatible.

- `Address` gains `extra_line` (the second address line: building, floor, c/o) and `region` (the administrative
  area, where the country's format has one). Both are optional and appear in the facilities of
  [`listFacilities`](https://passport.kabin.sh/docs/en/api-reference/facilities/list-facilities) and in the operator's public profile in
  passports.
- `listFacilities` also returns `place_id` and `confirmed_source`: how a member entered the address (by hand, from
  the address search or confirmed by the address check). They never appear in signed snapshots or public passports.
- The new problem code `address_lookup_unavailable` (`503`) belongs to the portal's address search, which does not
  accept API keys.

## 0.8.0

_2026-10-24 · API · Contract_

Only the part of the contract that integrations can use is published now: the 32 operations that accept an API
key and the 5 public passport reads. Sign-in, sessions, key management and every other portal operation are no
longer in `/api/v1/openapi.json` and `.yaml`; they may change without notice.

- Organisation API keys (`Authorization: Bearer bp_live_…`) with the scopes `read` and `condition`. Owners
  create keys in the portal; a key has a viewer's rights.
- With `condition`, battery management systems and service partners report condition data
  (`updateCondition`) and lifecycle events (`createLifecycleEvent`).
- Limits: 600 requests per minute for all keys of an organisation together, 30 attempts per 15 minutes for
  unknown keys, 300 public reads per minute and address; `429` with `Retry-After`.
