Skip to content

Changelog

Fredrik Dettner edited this page Oct 14, 2026 · 11 revisions

Changelog

This changelog tracks the API contract version (the OpenAPI info.version), which is independent of the Sedis deployable release version. Every v2.x change ships with an entry here in the same pull request as the code (see API stability and versioning policy).

2.5.1 — energy class G (October 2026)

New

  • EPC energy class G (value 7) on EE0, added last to its enumValues — the Swedish scale runs A–G. Uploads, PATCH and comp-data accept and return it. A new enum value at the end is additive; if your client switches exhaustively over EE0, add 7.

2.5.0 — remarks on uploads (October 2026)

New

  • warnings on the POST comp-uploads and GET comp-uploads/{id} responses: remarks that do not stop the upload but that Sedis's review will look at — a parameter that moved by the same factor on most property units against their earlier value date (often a wrong unit), a missing opening market value, a gap in the series. Each has a message and either a code (a whole parameter) or an index and sedisId (one row). An added field: existing clients are unaffected. See Writing data.

2.4.1 — uploads never overwrite your newer changes (October 2026)

New

  • publishRequirements { complete, missing } on the PATCH …/values/{valueDate} response: whether the value date has what it takes to be shared — a property classification (EA0) and a property type (EB0). Data that is not shared may be incomplete. A patch that removes EA0 or EB0 from a shared value date is 422 (missingRequiredValue).
  • Two error codes for uploads. pendingChanges (422 on POST comp-uploads with submit: true): changes of a shared value date wait for Sedis's review, so the same values cannot also be submitted. changedAfterUpload: a submitted upload is not published when you changed or removed the same property unit's values at that date through the API afterwards; upload again. See Errors.

2.4.0 — changing values, removing data, and Sedis's review (October 2026)

New

  • PATCH /fastighetsbenchmark/property-units/{sedisId}/values/{valueDate} — change some of a property unit's values at one value date, as a JSON Merge Patch (Content-Type: application/merge-patch+json): a code you leave out is unchanged, null removes the value, any other value is set (typed as for comp-uploads). Values that are not shared are written at once: 200 with status applied (or unchanged when everything was already stored). Values Sedis has shared — they count in the Sedis objects other customers compare with — are not changed until Sedis has reviewed the change: 202 Accepted with status pending and Location. Sending the same patch again changes nothing, so no Idempotency-Key is needed.
  • GET /fastighetsbenchmark/property-units/{sedisId}/pending-changes — your changes of shared values that wait for Sedis, typed like comp-data rows, with change (set/remove) and reviewComment when Sedis sent them back.
  • DELETE /fastighetsbenchmark/property-units/{sedisId}/values/{valueDate} and DELETE /fastighetsbenchmark/property-units/{sedisId} — remove values or a property unit that is not shared: 204.
  • New problem type https://api.sedis.se/problems/shared-data (409): shared data cannot be withdrawn through the API — contact Sedis support. A shared value can still be corrected with PATCH.

See Writing data.

2.3.0 — safer retries and a write limit (October 2026)

New

  • An Idempotency-Key reused for a different request (another method, path or body) now answers 422 with type https://api.sedis.se/problems/idempotency-key-reused. Before, the first request's response was replayed.
  • A write limit: every method except GET, HEAD and OPTIONS also counts against 60 writes per minute per API key and product, on every tier → 429 + Retry-After. See Rate limits.

Changed

  • Idempotency-Keys are kept across restarts and server instances; the 24-hour replay window and the per-customer scope are unchanged. A key may be at most 255 characters (longer → 400).

2.2.0 — excluding a property unit from Sedis objects (October 2026)

New

  • excludedFromSedisObjects (boolean, default false) on POST and PUT /fastighetsbenchmark/property-units and on property-unit responses. true keeps the property unit out of every Sedis object and jämförelseobjekt: its values are still yours to analyse and can still be submitted and reviewed, but they are never counted in a benchmark.
  • As with every field, a PUT that omits it sets it to false.
  • It can be set to true only while none of the property unit's values has been reviewed and shared by Sedis — otherwise 422 with pointer #/excludedFromSedisObjects and code invalidValue. Data already shared is withdrawn only by Sedis.
  • Setting it back to false lets the shared values count again once Sedis has recalculated the Sedis objects.
  • The lineage of a Sedis object (which property units it contains) leaves out excluded property units.

Documentation — quarterly value dates (October 2026, no contract change)

  • valueDate on GET /fastighetsbenchmark/comp-data is documented as the end of any quarter, not only 31 December: a property unit can have more than one row per year. Until quarterly and half-yearly data is released, only 31 December is returned. Flows on a date other than 31 December cover the 12 months ending on it. See CompDatum — the time-series. The shape is unchanged, so info.version does not move.
  • The MCP tool fastighetsbenchmark_get_comp_timeseries says the same (@sedis/mcp 1.2.0).

2.1.0 — writing property units and values (October 2026)

New

  • POST /fastighetsbenchmark/property-units — create a property unit; 201 with its sedisId, Location and ETag. 409 with existingSedisId when you already have one with that name.
  • PUT /fastighetsbenchmark/property-units/{sedisId} — full replace of its attributes; the only way to rename. Optional If-Match → 412 Precondition Failed.
  • GET /fastighetsbenchmark/property-units?name= — exact lookup by your own name for a property unit.
  • Property units can carry a location you send: GeoJSON Point in geometry, with geometryCrs CRS84 (default) or SWEREF 99 TM; coordinates always [x, y]. Checked against the municipality and country, never corrected.
  • Property units carry an address object — streetNameAndNumber, postalCode, postalTown, countryCode (ISO 3166-1, new) — the same shape in requests and responses. The flat streetNameAndNumber, postalCode and postalAddress response fields stay but are deprecated (removed in a future v3); postalAddress is address.postalTown.
  • municipality.code (the official municipality code) on responses.
  • GET /fastighetsbenchmark/municipalities and GET /fastighetsbenchmark/property-types (+ /{id}) — the reference data writes take ids from.
  • GET /fastighetsbenchmark/comp-uploads/{id} — where an upload is and which property unit each row matched.
  • Write errors: 422 Problem Details with errors[] of { pointer, code, detail } and stable type URIs under https://api.sedis.se/problems/ (they resolve to Errors); new statuses 412, 413, 422.
  • /openapi/v2.json now describes every field of every schema.

Changed — POST /fastighetsbenchmark/comp-uploads (changed in place)

This endpoint had never been called by any customer, so it was changed in place instead of under /v3 — an exception to the stability policy, recorded here.

  • Rows carry only identity (sedisId or exact name) and values; the address and designation members and tagValues are gone — attributes change with PUT property-units.
  • values are typed by the parameter's dataType (number, true/false, enum integer, "yyyy-MM-dd"), replacing parameterValues with "canonical decimals".
  • Never creates a property unit. Strict: any broken rule → 422 with every error, nothing saved — including the same property unit on two rows.
  • With submit: true, every property unit must have EA0 and EB0 on the value date. Until quarterly and half-yearly data is released, only 31 December is accepted.
  • The 201 body is the upload resource (id, status, rows[] with each row's sedisId), with Location.

Fixed

  • Problem responses are application/problem+json on every endpoint (some 400s were sent as application/json), and every problem carries type and traceId. The extension members (traceId, invalidFields, …) are top-level members, as RFC 9457 defines them — this guide previously showed them nested under extensions.

Platform — response compression (September 2026, no contract change)

  • Responses are compressed with Brotli or gzip when the request sends Accept-Encoding — for v2 and the v1 OData API alike. Clients that send no Accept-Encoding receive byte-identical responses, so info.version stays at 2.0.0. See Query conventions → Response compression.
  • The C# example now enables AutomaticDecompression on HttpClient, which does not request compression by default.

2.0.0 — initial v2 release (2026-05-29)

The first public release of the Partner API v2 — a REST + JSON surface running in parallel with the unchanged v1 OData/REST API.

Platform

  • X-Api-Key authentication; multiple keys per customer; rotation overlap; prefix-only display; revocation.
  • Bare JSON envelope { data, page, pageSize, totalCount, totalPages }; camelCase fields.
  • Pagination (1-indexed, default 50, max 500, silent clamp with Sedis-Page-Size-Clamped), ?sort=, sparse ?fields=, ?count=false.
  • Strict RFC 7807 errors with extensions.traceId / invalidFields / rateLimitRemaining.
  • Per-key sliding-window rate limiting (429 + Retry-After).
  • English-default localization with ?lang=sv / Accept-Language override.
  • ETag / If-None-Match → 304 on GET responses.
  • OpenAPI spec at /openapi/v2.json (servers include https://api.sedis.se).

Bolagsanalys

  • GET /bolagsanalys/companies, /parameters, /data — the v1 OData company, parameter, and quarterly-data surface re-expressed as REST + camelCase

    • English-default, with the locked field-name vocabulary (companyId, groupName, quarterId, parameterCode, lastUpdatedUtc, …).

Fastighetsbenchmark (new — no v1 equivalent)

  • Read resources: property-units, samlingar, jamforelseobjekt, reference-zones, parameters, comp-data. (The Sedis-owned SedisObjekt aggregate is not a fetchable resource — reached only via the clone lineage; customer-owned non-clone zones carry no membership and are not exposed.)
  • Hard multi-tenant isolation (default-deny, 404-not-403) on your own data; shared Sedis reference data.
  • Geometry filters (bbox with great-circle densification, point+radius, WKT) and opt-in GeoJSON output (SRID 4326).
  • POST /{resource}/search for large geometry inputs.
  • Bidirectional tenant-filtered clone lineage — belongsToJamforelseobjekt (reverse, on any Comp) and containsPropertyUnits (forward, on a Jämförelseobjekt) — plus the containingCompSedisIds collection membership.
  • Two-call CompDatum time-series — self-describing via dataType (decimal/boolean/enum/date, from the parameter code's first letter) with the matching figure/boolean/enum/date value member; the raw figure is retained for boolean/enum transparency. CompParameter metadata carries dataType + (for enum codes) the discoverable enumValues domain — e.g. GET /parameters/EB0 lists the property types.
  • Ingestion: POST /samlingar (triggers recalc) and POST /comp-uploads, with mandatory Idempotency-Key (24 h replay window).

v1 status: unchanged. No deprecation date.


Note — versioning. 2.0.0 is the API contract version surfaced in the OpenAPI document and in this guide's PDF filename (Sedis-PartnerAPI_v2.0.0.pdf). It is not the Sedis application/deployable version, which advances on its own cadence (GitVersion) without implying an API change. The contract version bumps only when the API contract itself changes — additively within v2.x, or to /v3 for a breaking change. See API stability and versioning policy.

Clone this wiki locally