Repository navigation
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).
New
- EPC energy class
G(value7) onEE0, added last to itsenumValues— the Swedish scale runs A–G. Uploads,PATCHandcomp-dataaccept and return it. A new enum value at the end is additive; if your client switches exhaustively overEE0, add7.
New
-
warningson thePOST comp-uploadsandGET 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 amessageand either acode(a whole parameter) or anindexandsedisId(one row). An added field: existing clients are unaffected. See Writing data.
New
-
publishRequirements{ complete, missing }on thePATCH …/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 removesEA0orEB0from a shared value date is422(missingRequiredValue). - Two error codes for uploads.
pendingChanges(422onPOST comp-uploadswithsubmit: 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.
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,nullremoves the value, any other value is set (typed as forcomp-uploads). Values that are not shared are written at once:200withstatusapplied(orunchangedwhen 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 AcceptedwithstatuspendingandLocation. Sending the same patch again changes nothing, so noIdempotency-Keyis needed. -
GET /fastighetsbenchmark/property-units/{sedisId}/pending-changes— your changes of shared values that wait for Sedis, typed likecomp-datarows, withchange(set/remove) andreviewCommentwhen Sedis sent them back. -
DELETE /fastighetsbenchmark/property-units/{sedisId}/values/{valueDate}andDELETE /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 withPATCH.
See Writing data.
New
- An
Idempotency-Keyreused for a different request (another method, path or body) now answers422with typehttps://api.sedis.se/problems/idempotency-key-reused. Before, the first request's response was replayed. - A write limit: every method except
GET,HEADandOPTIONSalso 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).
New
-
excludedFromSedisObjects(boolean, defaultfalse) onPOSTandPUT /fastighetsbenchmark/property-unitsand on property-unit responses.truekeeps 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
PUTthat omits it sets it tofalse. - It can be set to
trueonly while none of the property unit's values has been reviewed and shared by Sedis — otherwise422withpointer#/excludedFromSedisObjectsand codeinvalidValue. Data already shared is withdrawn only by Sedis. - Setting it back to
falselets 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.
-
valueDateonGET /fastighetsbenchmark/comp-datais 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, soinfo.versiondoes not move. - The MCP tool
fastighetsbenchmark_get_comp_timeseriessays the same (@sedis/mcp1.2.0).
New
-
POST /fastighetsbenchmark/property-units— create a property unit;201with itssedisId,LocationandETag.409withexistingSedisIdwhen you already have one with that name. -
PUT /fastighetsbenchmark/property-units/{sedisId}— full replace of its attributes; the only way to rename. OptionalIf-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
Pointingeometry, withgeometryCrsCRS84 (default) or SWEREF 99 TM; coordinates always[x, y]. Checked against the municipality and country, never corrected. - Property units carry an
addressobject —streetNameAndNumber,postalCode,postalTown,countryCode(ISO 3166-1, new) — the same shape in requests and responses. The flatstreetNameAndNumber,postalCodeandpostalAddressresponse fields stay but are deprecated (removed in a future v3);postalAddressisaddress.postalTown. -
municipality.code(the official municipality code) on responses. -
GET /fastighetsbenchmark/municipalitiesandGET /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:
422Problem Details witherrors[]of{ pointer, code, detail }and stabletypeURIs underhttps://api.sedis.se/problems/(they resolve to Errors); new statuses412,413,422. -
/openapi/v2.jsonnow 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 (
sedisIdor exactname) andvalues; the address and designation members andtagValuesare gone — attributes change withPUT property-units. -
valuesare typed by the parameter'sdataType(number,true/false, enum integer,"yyyy-MM-dd"), replacingparameterValueswith "canonical decimals". -
Never creates a property unit. Strict: any broken rule →
422with every error, nothing saved — including the same property unit on two rows. - With
submit: true, every property unit must haveEA0andEB0on the value date. Until quarterly and half-yearly data is released, only 31 December is accepted. - The
201body is the upload resource (id,status,rows[]with each row'ssedisId), withLocation.
Fixed
- Problem responses are
application/problem+jsonon every endpoint (some400s were sent asapplication/json), and every problem carriestypeandtraceId. The extension members (traceId,invalidFields, …) are top-level members, as RFC 9457 defines them — this guide previously showed them nested underextensions.
- Responses are compressed with Brotli or gzip when the request sends
Accept-Encoding— for v2 and the v1 OData API alike. Clients that send noAccept-Encodingreceive byte-identical responses, soinfo.versionstays at2.0.0. See Query conventions → Response compression. - The C# example now enables
AutomaticDecompressiononHttpClient, which does not request compression by default.
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-Keyauthentication; 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-Languageoverride. - ETag /
If-None-Match→304on GET responses. - OpenAPI spec at
/openapi/v2.json(servers includehttps://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, …).
- English-default, with the locked field-name vocabulary (
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 (
bboxwith great-circle densification, point+radius, WKT) and opt-in GeoJSON output (SRID 4326). -
POST /{resource}/searchfor large geometry inputs. - Bidirectional tenant-filtered clone lineage —
belongsToJamforelseobjekt(reverse, on any Comp) andcontainsPropertyUnits(forward, on a Jämförelseobjekt) — plus thecontainingCompSedisIdscollection membership. - Two-call CompDatum time-series — self-describing via
dataType(decimal/boolean/enum/date, from the parameter code's first letter) with the matchingfigure/boolean/enum/datevalue member; the rawfigureis retained for boolean/enum transparency. CompParameter metadata carriesdataType+ (for enum codes) the discoverableenumValuesdomain — e.g.GET /parameters/EB0lists the property types. - Ingestion:
POST /samlingar(triggers recalc) andPOST /comp-uploads, with mandatoryIdempotency-Key(24 h replay window).
v1 status: unchanged. No deprecation date.
Note — versioning.
2.0.0is 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/v3for a breaking change. See API stability and versioning policy.