{"openapi":"3.0.3","info":{"title":"Placepoint Unified API","description":"Unified gateway for Norwegian property, company, and geospatial data","version":"0.1.121"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://auth.placepoint.no/realms/placepoint/protocol/openid-connect/token","scopes":{"property:read":"Cadastre, buildings, addresses, ownership","company:read":"Company info, roles, tenant analysis","valuation:read":"AVM estimates, price history","listings:read":"Finn.no ads, new builds, rentals","risk:read":"Flood, landslide, quick clay risk","geo:read":"FKB map layers, terrain data","seafront:read":"Seafront facts per parcel from the nautical charts (restricted)","roof:read":"Takmål and Veggmål: roof and wall models per building from FKB (restricted, sold separately)","energy:read":"Energy certificates A-G","search:read":"Unified search","analysis:read":"Area aggregates, transactions, market activity","area:read":"Area statistics: population, households, housing, income and wealth per kommune or grunnkrets (SSB via Geodata)","enova:read":"Enova energy attest PDFs","plans:read":"Reguleringsplaner / development plans (Combify)","se-properties:read":"Swedish properties — fastigheter, taxering, ownership (Combify)","se-companies:read":"Swedish companies — employees, accounts, contact, address history"}}}}},"schemas":{}},"paths":{"/":{"get":{"summary":"API host front door","tags":["operational"],"description":"This is the API host — there is no website here. Returns pointers to /discovery, the OpenAPI spec, the developer docs and the product page. No auth required, not metered.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"discovery":{"type":"string"},"openapi":{"type":"string"},"docs":{"type":"string"},"product":{"type":"string"}}}}}}}}},"/health":{"get":{"summary":"Health check","tags":["operational"],"description":"Liveness probe. No auth required. Returns 200 when the gateway process is up — does not check backend reachability.\n\n`version` is the image tag actually running and `commit` the git SHA it was built from, so \"is that change live?\" is answerable without comparing build timestamps to merge timestamps. Both read `dev` / are absent outside a built image.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"version":{"type":"string","description":"Image tag, e.g. 0.1.89. `dev` when not a built image."},"commit":{"type":"string","description":"Short git SHA the image was built from. Absent outside a built image."},"builtAt":{"type":"string","description":"ISO instant the image was built. Absent outside a built image."},"timestamp":{"type":"string"}}}}}}}}},"/specs/{product}/openapi.json":{"get":{"tags":["specs"],"parameters":[{"schema":{"type":"string","example":"property"},"in":"path","name":"product","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/reference/ids":{"get":{"tags":["reference"],"description":"Canonical business-key reference. Lists every ID type the gateway understands, with a working example and the routes that produce values for it.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/reference/ids.md":{"get":{"tags":["reference"],"description":"Markdown reference for the gateway's canonical business keys (NMA, orgnr, finn-code, etc.). Twin of /reference/ids (JSON).","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/specs/{product}/ai-context.md":{"get":{"tags":["specs"],"parameters":[{"schema":{"type":"string","example":"property"},"in":"path","name":"product","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/discovery/":{"get":{"tags":["discovery"],"description":"AI-native API catalog. Returns all products; if a JWT is present its scopes are echoed back so callers can see what they're authorised for.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/auth/github/start":{"get":{"tags":["auth"],"description":"Begin GitHub OAuth — sets a state cookie + redirects to github.com.","parameters":[{"schema":{"type":"string"},"in":"query","name":"return_to","required":false,"description":"URL to bounce back to with #token=... in the fragment. Defaults to docs.placepoint.no."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/auth/github/callback":{"get":{"tags":["auth"],"description":"GitHub OAuth callback — internal. Exchanges code, mints token, redirects to docs.","parameters":[{"schema":{"type":"string"},"in":"query","name":"code","required":false},{"schema":{"type":"string"},"in":"query","name":"state","required":false},{"schema":{"type":"string"},"in":"query","name":"error","required":false},{"schema":{"type":"string"},"in":"query","name":"error_description","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/auth/token":{"post":{"summary":"Mint an access token","tags":["auth"],"description":"Client-credentials grant: `grant_type=client_credentials` with `client_id` and `client_secret` in a form body or as HTTP Basic, optionally `scope`. `grant_type=password` with `username` and `password` is accepted too, with the same client id and secret. Answers `access_token`, `token_type`, `expires_in` and `scope`; a failed grant answers 400 with an RFC 6749 error.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"grant_type":{"type":"string","example":"client_credentials"},"client_id":{"type":"string"},"client_secret":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"scope":{"type":"string","example":"property:read company:read"}},"example":{"grant_type":"client_credentials","client_id":"","client_secret":"","username":"","password":"","scope":"property:read company:read"}},"example":{"grant_type":"client_credentials","client_id":"","client_secret":"","username":"","password":"","scope":"property:read company:read"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/annual-report/{year}":{"get":{"summary":"Annual report (årsredovisning) as iXBRL/XHTML","tags":["se-companies"],"description":"The digitally filed annual report from Bolagsverket, rendered as XHTML in the browser. Coverage: ~71% of active aktiebolag, digital filings from 2020 onward. Returns 404 when the company did not file digitally for that year. The response is the original iXBRL document with inline CSS — it renders as a multi-page annual report (förvaltningsberättelse, resultaträkning, balansräkning, noter, underskrifter). This route is unauthenticated — the data is public domain from Bolagsverket.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish 10-digit org number"},{"schema":{"type":"integer","example":2026},"in":"path","name":"year","required":true,"description":"Accounting year (e.g. 2024)"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/usage/":{"get":{"tags":["usage"],"description":"Calling token's usage. Period (since boot) + history (last 30d, JSONL-backed) including bytes, errors, breakdown by product/path/day.","parameters":[{"schema":{"type":"string","example":"2020-01-01"},"in":"query","name":"from","required":false,"description":"Start date (YYYY-MM-DD), inclusive. Defaults to 30 days ago."},{"schema":{"type":"string","example":"2026-12-31"},"in":"query","name":"to","required":false,"description":"End date (YYYY-MM-DD), inclusive. Defaults to today."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/auth/me":{"get":{"tags":["auth"],"description":"Return the calling token's identity + customer record summary (free tier shows daily limit).","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/resolve/property":{"get":{"tags":["resolve"],"description":"Resolve a property NMA → { nma, propertyId }. PropertyId is the integer cadastreId expected by v2-core-db and Newsec.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"nma","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/resolve/company":{"get":{"tags":["resolve"],"description":"Validate / canonicalise an orgnr. Returns { orgnr } if valid; 400 otherwise. Reserved for future Newsec UUID enrichment.","parameters":[{"schema":{"type":"string","example":"977074010"},"in":"query","name":"orgnr","required":true,"description":"9-digit Norwegian organisation number"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/search":{"get":{"tags":["property"],"parameters":[{"schema":{"type":"string","example":"Karl Johans gate 1"},"in":"query","name":"q","required":true,"description":"Address text (e.g. 'Storgata 1 Oslo')"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"pageSize","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/addresses/{id}":{"get":{"tags":["property"],"description":"Get property by NMA id (e.g. 0301-1-2-0-0)","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/buildings/{id}":{"get":{"tags":["property"],"description":"Get building information for a property by NMA id","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/units/{id}":{"get":{"tags":["property"],"description":"Get dwelling units (boenheter) for a property by NMA id","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/owners/{id}":{"get":{"tags":["property"],"description":"Get current owners of a property by NMA id","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/transactions/{id}":{"get":{"tags":["property"],"description":"Get transaction/price history for a property by NMA id","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/cadastres/{id}":{"get":{"tags":["property"],"description":"Get full property summary (area, geometry, buildings count etc.) by NMA id","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/cadastres/{id}/plots":{"get":{"summary":"The teiger (cadastral parcels) a property is made of","tags":["property"],"description":"One item per teig on the matrikkelenhet, largest first, from Kartverket's eiendomskart. A matrikkelenhet is frequently more than one parcel — 274 772 of them are — which is why this is a list and why summing `registeredAreaM2` is the honest way to get the property's total plot area. `registeredAreaM2` is Kartverket's stored figure and `computedAreaM2` ours, recomputed on the geography; a few m² of disagreement is normal. `dominantLandUse` is the AR5 land-use class covering most of the teig, with `dominantLandUsePct` its share and `landUseComposition` the full breakdown — a teig under 100 % is mixed. `disputedBoundary` marks a border in dispute, `sharedWithOtherCadastres` a teig several matrikkelenheter share, so the same parcel can appear on more than one property. `meta.buildingNumbers` lists the bygningsnummer registered on the unit — feed one to GET /geo/buildings/{id}/footprint. Pass `geometry=true` for GeoJSON on each item. A seksjon with no teig of its own falls back to the base matrikkelenhet, reported in `meta.resolvedFrom`. 404 = no teig on this NMA.","parameters":[{"schema":{"type":"boolean","default":false},"in":"query","name":"geometry","required":false,"description":"Include each teig's polygon as GeoJSON (WGS84). Off by default — the geometry is large."},{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/cadastres/{id}/addresses":{"get":{"summary":"Addresses registered on a property","tags":["property"],"description":"Every address display registered on the matrikkelenhet, with coordinates, from v2-core-db. The gateway resolves the NMA to the integer cadastreId first (PropCloud /property/summary, cached 24 h), so an NMA that PropCloud does not know answers 404 here even when the address exists elsewhere. Returns 200 with an empty list when the property is known but carries no registered address — an unaddressed plot is ordinary. Identical data to the older GET /property/panel/{nma}/addresses, which stays for existing callers.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/panel/{nma}/addresses":{"get":{"tags":["property"],"description":"Get address display info for a property by NMA (v2-core-db; gateway resolves NMA → integer cadastreId).","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/panel/{nma}/utilization":{"get":{"tags":["property"],"description":"Get plot utilization (BYA%, BRA) for a property by NMA (v2-core-db; gateway resolves NMA → integer cadastreId).","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/panel/{nma}/newsec-info":{"get":{"tags":["property"],"description":"Newsec base property data — buildings, areas, summary. Resolves NMA → integer cadastreId internally.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/panel/{nma}/energy":{"get":{"tags":["property","energy"],"description":"Enova energy certificates (energiattest A–G) by NMA, via Newsec.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/panel/{nma}/breeam":{"get":{"tags":["property"],"description":"BREEAM-NOR and BREEAM In-Use sustainability certificates by NMA, via Newsec.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/panel/{nma}/newsec-transactions":{"get":{"tags":["property"],"description":"Newsec transaction history by NMA — registered sales with prices, dates, types.","parameters":[{"schema":{"type":"integer","default":0},"in":"query","name":"cursor","required":false},{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/panel/{nma}/ownership-tree":{"get":{"tags":["property"],"description":"Newsec ownership tree by NMA — corporate hierarchy that ultimately owns the property.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/panel/{nma}/newsec-tenants":{"get":{"tags":["property"],"description":"Newsec commercial tenant list by NMA — employee counts, NACE codes, move-in dates.","parameters":[{"schema":{"type":"integer","default":0},"in":"query","name":"cursor","required":false},{"schema":{"type":"boolean","default":false},"in":"query","name":"showEmpty","required":false,"description":"Include tenants with no employees"},{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/{nma}/tenants":{"get":{"tags":["property"],"description":"Current tenants/lessees for a property by NMA — companies registered at the cadastre's addresses, with employees, NACE, move-in date (v2-core-db). Each item carries matchConfidence (exact/normalized/fuzzy/external-source); meta.coverageStatus separates 'no tenants matched' (no-match-low-confidence) from a positively matched register answer (register-matched). Items with matchConfidence=external-source are businesses OBSERVED at the location via open sources (Mattilsynet inspections, Overture Maps places, the chains' own store locators) but NOT registered at the address in Enhetsregisteret — which is exactly why register matching alone missed them. For these, organization.name is the observed store/POI name and organisasjonsnummer may be null; it is set when we could resolve the operating company (often a differently-named franchisee, e.g. the REMA store 'REMA 1000 ÅNDALSNES' operated by Espen Vangen Handel AS). Fields like employeeCount/movedInAt are null unless register-backed. When employeeCount is null, estimatedEmployees {estimate, lower, upper, method, modelVersion} gives a MODEL-BASED p10-p90 interval (stratified register quantiles by chain, NACE, allocated floor area and building type; ~89% holdout coverage) — an estimate for risk exposure, never register data; unmanned concepts (fuel automat stations) are fixed at 0-2. Each item also carries role: 'occupant' (default) or a not-an-occupying-business tag — 'real-estate' (NACE 68.2x utleie-SPV/landlord), 'holding' (64.2x), 'property-entity' (sameie/borettslag), 'association' (FLI) — register-correct address matches kept for completeness; filter on role='occupant' for the physical tenant list. When a parent company and its own sub-units are registered at the same property, employeeCount is the sub-units' site-level sum, not the whole-company figure, and organization.locationName carries that sub-unit's name — often the store/branch name with the chain in it (e.g. organization.name 'APE APOTEK AS' with locationName 'APOTEK 1 TEMPE'). locationName is null when no such sub-unit is registered here, and may equal organization.name when the sub-unit shares the parent's name; use it as the display name for the business at the location.","parameters":[{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100,"example":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"boolean","default":true},"in":"query","name":"showEmpty","required":false,"description":"Include tenants with no registered employees (sole proprietorships etc.). Default true — set false to mirror the Newsec Maps default."},{"schema":{"type":"boolean","default":false},"in":"query","name":"includeFamily","required":false,"description":"Widen the lookup from the single matrikkel unit to its whole family — the base cadastre (snr 0) and every section under the same kommune-gnr-bnr — and return the union, deduplicated per company. Tenants are registered against WHICHEVER unit the source used, so a section and its base can hold different halves of the same building's tenant list: on Brennerigata 8 in Gjøvik, 3407-67-1538-0-53 alone returns 4 tenants and the family returns 8. Default false keeps the single-unit contract; set true when you want everything at the address and do not know which unit the register used."},{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/{nma}/energy-label":{"get":{"tags":["property","energy"],"description":"Latest Enova energy label (energimerke) for a property by NMA, from Placepoint's own Enova replica in v2-core-db — no Newsec licence required. Newest attest by date of rating; use /properties/{nma}/energy-labels for the full history. Items: `{type:\"energyLabel\", attestNumber, source, level, issuedAt, registrationType, energyRating (A–G), heatingRating (Green/Lightgreen/Yellow/Orange/Red), deliveredEnergyKWhM2Year, correctedDeliveredEnergyKWhM2Year, cadastre:{id,cadastreNumber,matrikkelId}, building:{id,buildingNumber,builtYear,areaM2,enovaCategory}, housingUnit:{id,unitNumber}, address:{streetAddress,postalCode,postalDistrict}, organisasjonsnummer, document:{storage,url,downloadPath}}`. **level** says what the attest covers — `housingUnit` (one apartment, bruksenhetsnummer in housingUnit.unitNumber), `building` (one building on the cadastre) or `cadastre` (the whole matrikkelenhet). A property with several buildings usually has several attests at different levels; do NOT present one of them as \"the property's energy rating\" without saying which unit or building it belongs to. **energyRating** A–G is the letter (energikarakter); **heatingRating** is the separate oppvarmingskarakter traffic light, Green = mostly renewable heating, Red = mostly electricity/fossil — the two are independent, a building can be A/Red. **deliveredEnergyKWhM2Year** is beregnet levert energi per m² per year; the `corrected` variant is the TEK17 climate-corrected figure used to set the letter. **document** is null when we hold no PDF (~36% of attests). When present, `storage:\"enova\"` gives a direct non-expiring `url`; `storage:\"placepoint-lake\"` means the PDF is a legacy scan in our lake and `url` is null — fetch it via `downloadPath` (GET /enova/pdf/{attestNumber}, scope enova:read), which mints a 15-minute signed link. **source** `pdf_scrape` rows come from OCR of old attest PDFs and have more null fields than `api` rows. **Section roll-up:** attests on an eierseksjonssameie are registered on the individual seksjoner, not on the grunneiendom, so passing the base NMA returns the attests of the base AND of all its child sections — each item's `cadastre.cadastreNumber` tells you which seksjon it actually belongs to, and it will often differ from the NMA you asked for. Passing a seksjon's own NMA returns just that seksjon (a leaf has no children). The stored key is the matrikkel's CURRENT number — the ETL rewrites a pre-reform key through the 2020/2024 kommune-reform map — so pass today's NMA, not the number printed on the attest. A 3-digit municipality prefix (`301-…`) is zero-padded for you. ~4% of attests never resolved to a cadastre at all and are reachable only by attest number. 404 = no attest on this cadastre or any of its sections. That is not the same as \"the building is unrated\": an NMA that is not in the matrikkel at all, and an attest whose cadastre key never resolved, both look like this too.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 1804-30-426-0-4"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/{nma}/energy-labels":{"get":{"tags":["property","energy"],"description":"Every Enova energy label ever registered on a property, newest first — from Placepoint's own Enova replica in v2-core-db, no Newsec licence required. One item per attest, so a cadastre with several buildings, seksjoner or apartments returns several; group on `cadastre.cadastreNumber` / `building.buildingNumber` / `housingUnit.unitNumber` before comparing ratings over time. Near-duplicate attests are collapsed in the database — the same certificate can exist twice with no shared id (a NewSecMaps UUID and an Enova A-number), so one row per (seksjon, unit, rating day, rating) survives, preferring the more authoritative source. Items: `{type:\"energyLabel\", attestNumber, source, level, issuedAt, registrationType, energyRating (A–G), heatingRating (Green/Lightgreen/Yellow/Orange/Red), deliveredEnergyKWhM2Year, correctedDeliveredEnergyKWhM2Year, cadastre:{id,cadastreNumber,matrikkelId}, building:{id,buildingNumber,builtYear,areaM2,enovaCategory}, housingUnit:{id,unitNumber}, address:{streetAddress,postalCode,postalDistrict}, organisasjonsnummer, document:{storage,url,downloadPath}}`. **level** says what the attest covers — `housingUnit` (one apartment, bruksenhetsnummer in housingUnit.unitNumber), `building` (one building on the cadastre) or `cadastre` (the whole matrikkelenhet). A property with several buildings usually has several attests at different levels; do NOT present one of them as \"the property's energy rating\" without saying which unit or building it belongs to. **energyRating** A–G is the letter (energikarakter); **heatingRating** is the separate oppvarmingskarakter traffic light, Green = mostly renewable heating, Red = mostly electricity/fossil — the two are independent, a building can be A/Red. **deliveredEnergyKWhM2Year** is beregnet levert energi per m² per year; the `corrected` variant is the TEK17 climate-corrected figure used to set the letter. **document** is null when we hold no PDF (~36% of attests). When present, `storage:\"enova\"` gives a direct non-expiring `url`; `storage:\"placepoint-lake\"` means the PDF is a legacy scan in our lake and `url` is null — fetch it via `downloadPath` (GET /enova/pdf/{attestNumber}, scope enova:read), which mints a 15-minute signed link. **source** `pdf_scrape` rows come from OCR of old attest PDFs and have more null fields than `api` rows. **Section roll-up:** attests on an eierseksjonssameie are registered on the individual seksjoner, not on the grunneiendom, so passing the base NMA returns the attests of the base AND of all its child sections — each item's `cadastre.cadastreNumber` tells you which seksjon it actually belongs to, and it will often differ from the NMA you asked for. Passing a seksjon's own NMA returns just that seksjon (a leaf has no children). The stored key is the matrikkel's CURRENT number — the ETL rewrites a pre-reform key through the 2020/2024 kommune-reform map — so pass today's NMA, not the number printed on the attest. A 3-digit municipality prefix (`301-…`) is zero-padded for you. ~4% of attests never resolved to a cadastre at all and are reachable only by attest number. Returns 200 with an empty list when the cadastre exists but has no attests.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 1804-30-426-0-4"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/{nma}/value-estimate":{"get":{"tags":["property"],"description":"ML/AI value estimate for a property by NMA, from Placepoint's own property.ValueEstimates table in v2-core-db. Returns all units with estimates on the cadastre (or its base via section fallback). Scope `residential-value:read` — not included in `[\"all\"]` because the underlying data is proprietary. Items: `{type:\"valueEstimate\", cadastre:{cadastreNumber,matrikkelId}, unitId, estimateType, currency, value:{estimate,lower,upper}, rent:{monthlyEstimate,monthlyLower,monthlyUpper}, confidence:{bar,uncertaintyPercent}, model:{version,estimatedAt,snapshotDate,source}, matchedOn}`. **Section fallback:** when the exact NMA has no estimate, the proc falls back to the base cadastre (seksjonsnummer 0) and returns all units on it. `matchedOn` tells you whether the hit was direct (`cadastreNumber`) or via the base (`cadastreNumberBase`). Each item's `cadastre.cadastreNumber` is the actual seksjon, not necessarily the one you asked for. **confidence.bar** is 1–3, higher = more certain. **uncertaintyPercent** is MAPE per cluster, not per unit — 98.9% of units land at +/-5%. Both reflect model-level precision, not property-level accuracy. 404 = no estimate on this cadastre or any of its sections.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Kartverket NMA, e.g. 0301-225-257-0-2"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/value-estimates/units/{unitId}":{"get":{"tags":["property"],"description":"ML/AI value estimate for a single housing unit by its PropCloud unit id. Returns exactly one item or 404. Scope `residential-value:read`. Items: `{type:\"valueEstimate\", cadastre:{cadastreNumber,matrikkelId}, unitId, estimateType, currency, value:{estimate,lower,upper}, rent:{monthlyEstimate,monthlyLower,monthlyUpper}, confidence:{bar,uncertaintyPercent}, model:{version,estimatedAt,snapshotDate,source}, matchedOn}`. **confidence.bar** is 1–3, higher = more certain. **uncertaintyPercent** is MAPE per cluster, not per unit — 98.9% of units land at +/-5%. Both reflect model-level precision, not property-level accuracy.","parameters":[{"schema":{"type":"string"},"in":"path","name":"unitId","required":true,"description":"PropCloud unit id, e.g. 570863745"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/energy-labels/{attestNumber}":{"get":{"tags":["property","energy"],"description":"One Enova energy label by attest number, from Placepoint's own Enova replica in v2-core-db. This is the only way to reach the ~4% of attests whose cadastre key never resolved to a matrikkelenhet. Attest numbers come from /properties/{nma}/energy-label(s) or from the attest itself. Items: `{type:\"energyLabel\", attestNumber, source, level, issuedAt, registrationType, energyRating (A–G), heatingRating (Green/Lightgreen/Yellow/Orange/Red), deliveredEnergyKWhM2Year, correctedDeliveredEnergyKWhM2Year, cadastre:{id,cadastreNumber,matrikkelId}, building:{id,buildingNumber,builtYear,areaM2,enovaCategory}, housingUnit:{id,unitNumber}, address:{streetAddress,postalCode,postalDistrict}, organisasjonsnummer, document:{storage,url,downloadPath}}`. **level** says what the attest covers — `housingUnit` (one apartment, bruksenhetsnummer in housingUnit.unitNumber), `building` (one building on the cadastre) or `cadastre` (the whole matrikkelenhet). A property with several buildings usually has several attests at different levels; do NOT present one of them as \"the property's energy rating\" without saying which unit or building it belongs to. **energyRating** A–G is the letter (energikarakter); **heatingRating** is the separate oppvarmingskarakter traffic light, Green = mostly renewable heating, Red = mostly electricity/fossil — the two are independent, a building can be A/Red. **deliveredEnergyKWhM2Year** is beregnet levert energi per m² per year; the `corrected` variant is the TEK17 climate-corrected figure used to set the letter. **document** is null when we hold no PDF (~36% of attests). When present, `storage:\"enova\"` gives a direct non-expiring `url`; `storage:\"placepoint-lake\"` means the PDF is a legacy scan in our lake and `url` is null — fetch it via `downloadPath` (GET /enova/pdf/{attestNumber}, scope enova:read), which mints a 15-minute signed link. **source** `pdf_scrape` rows come from OCR of old attest PDFs and have more null fields than `api` rows.","parameters":[{"schema":{"type":"string","example":"A2014-415899"},"in":"path","name":"attestNumber","required":true,"description":"Enova attest number — a UUID for post-2024 attests, or the legacy A-format (A2014-415899)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/buildings/{buildingNumber}/employee-capacity":{"get":{"tags":["property"],"description":"Model-based employee-capacity interval for a building by bygningsnummer. capacity {min, estimate, max} is the p10/p50/p90 headcount observed in fully register-covered buildings of the same type and size, scaled by this building's commercial utility floor space (NOT a fire-code or legal capacity — an empirical range for risk exposure; holdout: 81% of observed totals fall inside). method names the stratum that answered (e.g. cap-btype-area:322:1000-3000). Building parts sharing the bygningsnummer (hovedbygg + tilbygg) are aggregated — commercialAreaM2 is their summed commercial area, so the response holds one item per building. 404 = unknown bygningsnummer OR the building has no registered commercial floor space to estimate from (residential-only etc.).","parameters":[{"schema":{"type":"string","example":"80482345"},"in":"path","name":"buildingNumber","required":true,"description":"Kartverket bygningsnummer, e.g. 300000000"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/search":{"get":{"summary":"Look up a company by organization number","tags":["company"],"description":"Takes an organization number, NOT a company name — `q` is passed upstream as PropCloud's numeric `org-id`, so `q=Equinor` is rejected. Spaces are tolerated (`977 074 010`). There is no company-name search in the gateway yet; if you hold a name, resolve it to an orgnr in Brønnøysund Enhetsregisteret first. Equivalent to GET /company/{orgnr}, kept because it is established customer surface.","parameters":[{"schema":{"type":"string","example":"977074010"},"in":"query","name":"q","required":true,"description":"Norwegian organization number — 9 digits (Brønnøysund). A company NAME is not accepted."},{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"pageSize","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}":{"get":{"tags":["company"],"parameters":[{"schema":{"type":"string","example":"977074010"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/roles":{"get":{"summary":"Board members, CEO, auditor and other registered roles (Brønnøysundregistrene)","tags":["company"],"parameters":[{"schema":{"type":"string","enum":["true","false"],"default":"false","example":"true"},"in":"query","name":"active-only","required":false},{"schema":{"type":"string","example":"977074010"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/location-history":{"get":{"summary":"Registered business-address intervals for one company (Brønnøysundregistrene)","tags":["company"],"description":"Every address the company has been registered at, one interval per address, oldest first. validFrom is the move-in date and validTo the move-out date; validTo null is the current address. Main units come from weekly register snapshots and address announcements, sub-units from snapshots. cadastreId is the matched matrikkelenhet; cadastreMatches > 1 means the address spans several units (usually sections).","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/current-location":{"get":{"summary":"The company's current registered business address (Brønnøysundregistrene)","tags":["company"],"description":"The open interval from GET /company/{orgnr}/location-history: where the company is registered today, since when, and the matched cadastreId. data is null when a registered company has no open interval, for example after it was dissolved. Only an orgnr Brreg never registered answers 404.","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/address-moves":{"get":{"summary":"Business-address changes for one company, with old and new address","tags":["company"],"description":"One row per registered address change, oldest first, merged from Brreg address announcements (from 1999) and register snapshots. changeKind separates real relocations (RELOCATION) from corrections, spelling fixes, postal-code renumbering, c/o-only changes and changes within the same property.","parameters":[{"schema":{"type":"string","example":"RELOCATION"},"in":"query","name":"change-kinds","required":false,"description":"Comma-separated filter: RELOCATION, CORRECTION, SAME_PROPERTY, SPELLING, POSTAL_RENUMBER, CO_ADDRESS_ONLY."},{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/location-history":{"get":{"summary":"Address-interval feed for every NO company (bulk + change feed)","tags":["company"],"description":"Keyset feed over all address intervals, ordered by (updatedAt, intervalId). Walk it with meta.nextBatchId until it is null; pass updated-start-date to get only intervals that changed since then. A removed interval arrives as `{intervalId, orgNr, deleted: true, updatedAt}`, and one a later run replaced carries `suppressed: true`; drop both on your side. meta.completeThrough is the time up to which the feed holds every Brreg change.","parameters":[{"schema":{"type":"string","example":"2026-09-01T00:00:00Z"},"in":"query","name":"updated-start-date","required":false,"description":"Change feed: rows changed at or after this ISO 8601 timestamp."},{"schema":{"type":"string"},"in":"query","name":"batch-id","required":false,"description":"Opaque cursor from a previous response's meta.nextBatchId."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":1000,"example":25},"in":"query","name":"page-size","required":false,"description":"Rows per page (max 1000)."},{"schema":{"type":"string","example":"811545082,923609016"},"in":"query","name":"org-ids","required":false,"description":"Comma-separated orgnrs (max 1000): only these companies' intervals and tombstones."},{"schema":{"type":"boolean","default":true},"in":"query","name":"include-sub-units","required":false,"description":"false keeps main units (hovedenheter) only. A full walk without sub-units takes about 2,000 pages instead of 3,200."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/address-moves":{"get":{"summary":"Address-change feed for every NO company (bulk + change feed)","tags":["company"],"description":"Keyset feed over all address changes, ordered by (updatedAt, moveId). Walk it with meta.nextBatchId until it is null; pass updated-start-date for changes since then, change-kinds to keep only some kinds.","parameters":[{"schema":{"type":"string","example":"2026-09-01T00:00:00Z"},"in":"query","name":"updated-start-date","required":false,"description":"Change feed: rows changed at or after this ISO 8601 timestamp."},{"schema":{"type":"string"},"in":"query","name":"batch-id","required":false,"description":"Opaque cursor from a previous response's meta.nextBatchId."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":1000,"example":25},"in":"query","name":"page-size","required":false,"description":"Rows per page (max 1000)."},{"schema":{"type":"string","example":"RELOCATION"},"in":"query","name":"change-kinds","required":false,"description":"Comma-separated filter: RELOCATION, CORRECTION, SAME_PROPERTY, SPELLING, POSTAL_RENUMBER, CO_ADDRESS_ONLY."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/employee-history":{"get":{"summary":"Monthly employee-count time series (etl-datalake)","tags":["company"],"description":"Monthly headcount per company (Brreg authoritative + Enin pre-Brreg history from 2018-04-29). employeeCount is an exact count, or — when only a registered size band is known (e.g. Brreg '1-4', isBand=true) — the band midpoint, with employeesMin/Max kept. Per-company (org-id + optional from/to) returns a DENSE carry-forward series: every month carries the prevailing value, changeMom/changeYoy derived, no gaps. Bulk (paginate via next-batch-id, 1000/page) and change feed (updated-start-date) return the raw monthly observations (one per reported change) — carry forward client-side, or use the per-company call. For explicit nulls instead of carry-forward, use /company/employee-history/observed.","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"query","name":"org-id","required":false,"description":"Org number (9 digits). Per-company mode."},{"schema":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$","example":"2020-01"},"in":"query","name":"from","required":false,"description":"Earliest month, inclusive (YYYY-MM)."},{"schema":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$","example":"2026-12"},"in":"query","name":"to","required":false,"description":"Latest month, inclusive (YYYY-MM)."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"updated-start-date","required":false,"description":"Change feed: rows updated at/after this ISO timestamp."},{"schema":{"type":"string"},"in":"query","name":"batch-id","required":false,"description":"Opaque pagination cursor from a previous response's nextBatchId."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":1000,"example":25},"in":"query","name":"page-size","required":false,"description":"Rows per page (max 1000)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/employee-history/observed":{"get":{"summary":"As-observed monthly employee counts (etl-datalake, no carry-forward)","tags":["company"],"description":"Monthly headcount AS OBSERVED: a value only for months a new antallAnsatte report landed; per-company, every month in the window is returned with explicit null where there was no new observation (no back-fill / no carry-forward). For a dense, carried-forward series use /company/employee-history. Modes: per-company (org-id + optional from/to), bulk (next-batch-id, 1000/page), change feed (updated-start-date). Note: source is change-compressed, so a null month means 'no recorded change', which may include an unchanged-but-refreshed month.","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"query","name":"org-id","required":false,"description":"Org number (9 digits). Per-company mode (fills the window with nulls)."},{"schema":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$","example":"2020-01"},"in":"query","name":"from","required":false,"description":"Earliest month, inclusive (YYYY-MM)."},{"schema":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$","example":"2026-12"},"in":"query","name":"to","required":false,"description":"Latest month, inclusive (YYYY-MM)."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"updated-start-date","required":false,"description":"Change feed: rows updated at/after this ISO timestamp."},{"schema":{"type":"string"},"in":"query","name":"batch-id","required":false,"description":"Opaque pagination cursor from a previous response's nextBatchId."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":1000,"example":25},"in":"query","name":"page-size","required":false,"description":"Rows per page (max 1000)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/employee-count":{"get":{"summary":"Latest monthly employee count (etl-datalake)","tags":["company"],"description":"The most recent known monthly headcount for a company (latest covered month). employeeCount is an exact count, or — when only a Brreg size band is known (isBand=true) — the band midpoint, with employeesMin/Max kept. 404 when the company has no employment history. For the full series use /company/employee-history?org-id=.","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/accounts/summary":{"get":{"summary":"Latest annual accounts with YoY (v2-core-db)","tags":["company"],"description":"Latest filed annual accounts for the company, with year-over-year percentages. Amounts are absolute units in `currency` (not thousands). Default accountsType: group (konsern) when it exists, else company. Source: Enin, refreshed nightly.","parameters":[{"schema":{"type":"string","enum":["group","company"],"example":"group"},"in":"query","name":"accountsType","required":false,"description":"Filing type. Omit for the default: group (konsern) when it exists, else company."},{"schema":{"type":"string","pattern":"^\\d{9}$|^\\d{10}$","example":"977074010"},"in":"path","name":"id","required":true,"description":"Organisation number: Norwegian organisasjonsnummer (9 digits) or Swedish organisationsnummer (10 digits, no hyphen)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/accounts/timeseries":{"get":{"summary":"Annual accounts timeseries (v2-core-db)","tags":["company"],"description":"Key figures per filed accounting period, oldest first. Amounts are absolute units in `currency`.","parameters":[{"schema":{"type":"string","enum":["group","company"],"example":"group"},"in":"query","name":"accountsType","required":false,"description":"Filing type. Omit for the default: group (konsern) when it exists, else company."},{"schema":{"type":"string","pattern":"^\\d{9}$|^\\d{10}$","example":"977074010"},"in":"path","name":"id","required":true,"description":"Organisation number: Norwegian organisasjonsnummer (9 digits) or Swedish organisationsnummer (10 digits, no hyphen)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/accounts/results":{"get":{"summary":"Results table per accounting period (v2-core-db)","tags":["company"],"description":"One row per filed period (newest first): employees, result, revenue, margin. numEmployees is null for periods before 2018-04-29 (employment history starts there).","parameters":[{"schema":{"type":"string","enum":["group","company"],"example":"group"},"in":"query","name":"accountsType","required":false,"description":"Filing type. Omit for the default: group (konsern) when it exists, else company."},{"schema":{"type":"string","pattern":"^\\d{9}$|^\\d{10}$","example":"977074010"},"in":"path","name":"id","required":true,"description":"Organisation number: Norwegian organisasjonsnummer (9 digits) or Swedish organisationsnummer (10 digits, no hyphen)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/financials":{"get":{"summary":"Annual financial time series with filing dates (v2-core-db)","tags":["company"],"description":"Yearly key figures per filed accounting period, oldest first. `filedDate` (kunngjøringsdato) is when the filing became public record — use it to date the row in an as-of model rather than trusting the accounting year alone. `employeeCosts` (lønnskostnader) is a better headcount proxy than the register employee count for companies with significant temps or outsourcing. Default `from=2018` gives ~7 years, covering the pandemic cycle. Amounts are absolute units in `currency`. Source: Enin, refreshed nightly via the mirror pipeline.","parameters":[{"schema":{"type":"integer","minimum":2000,"maximum":2100,"default":2018},"in":"query","name":"from","required":false,"description":"Earliest accounting year to include (default 2018)."},{"schema":{"type":"string","enum":["group","company"],"example":"group"},"in":"query","name":"accountsType","required":false,"description":"Filing type. Omit for the default: group (konsern) when it exists, else company."},{"schema":{"type":"string","pattern":"^\\d{9}$|^\\d{10}$","example":"977074010"},"in":"path","name":"id","required":true,"description":"Organisation number: Norwegian organisasjonsnummer (9 digits) or Swedish organisationsnummer (10 digits, no hyphen)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/employees/history":{"get":{"summary":"Employee-count history","tags":["company"],"description":"Change-compressed employee-count intervals [validFrom, validTo); validTo null = current. employeesFrom == employeesTo means an exact count; otherwise a registered size band (e.g. Brreg '1-4 ansatte'). Company-level counts (also on group filings). Sources: brreg (authoritative) + enin (pre-Brreg history, from 2018-04-29).","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/properties":{"get":{"summary":"Properties the company controls, via the ownership graph","tags":["company"],"description":"Cadastre units owned by the company or by any company below it in the share-ownership graph, one item per (subsidiary x cadastre unit). Property companies of any size own nothing directly — the parent typically has zero registered titles and everything sits in subsidiaries — so a title lookup on the organisation number returns an empty list while this returns the real portfolio. `ownershipPercent` is the EFFECTIVE share: the product of the shareholdings along `path`, so a 50%-owned subsidiary's building counts 50%. `path` is the chain that produced the row, kept so a surprising answer can be traced rather than trusted. `cadastreNumber` is the NMA and can be passed straight to GET /properties/{nma}/tenants — that is the intended chain: organisation number here, then tenants per cadastre unit. Rows carrying no cadastre are dropped in the database, so every item has a property. Norway only.","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/{id}/tenants":{"get":{"summary":"Tenants across the properties a company owns","tags":["company"],"description":"The tenant list for each property in a company's portfolio, in one call. The portfolio is the same one GET /company/{orgnr}/properties returns — properties held THROUGH the ownership chain, not only those titled to the organisation number itself — and the tenants are the same rows GET /properties/{nma}/tenants gives per property.\n\n**Paging is over PROPERTIES, not tenants.** `pageSize` is how many of the company's properties are looked up on this call (default 10, max 25), and every tenant of those properties comes back. Properties are ordered by summed building utility floor space, largest first, so page 1 is the part of the portfolio that carries the tenants. `meta.propertyCount` is the whole portfolio, `meta.propertiesQueried` what this page covered, and `meta.tenantCount` the tenants found on it. Walk `page` to cover the rest — a large landlord takes several calls by design, because one call per property against the tenant database is the cost either way and doing 581 of them inside one request fails.\n\nEach item is `{cadastreNumber, matrikkelId, coverageStatus, owner, areaM2, tenants[]}`. `owner` is the subsidiary that actually holds the title, with its own organisation number. `coverageStatus` separates a positively matched register answer from \"nothing matched\" — an empty `tenants` list with `no-match-low-confidence` means unknown, not vacant. Tenant items are identical in shape to GET /properties/{nma}/tenants, including `role` (filter on `occupant` for the physical tenant list), `matchConfidence` and `estimatedEmployees`. Norway only.","parameters":[{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false,"description":"Page of PROPERTIES, not of tenants."},{"schema":{"type":"integer","minimum":1,"maximum":25,"default":10,"example":25},"in":"query","name":"pageSize","required":false,"description":"Properties looked up on this call. Each one costs a tenant-database round trip."},{"schema":{"type":"boolean","default":true},"in":"query","name":"showEmpty","required":false,"description":"Include tenants with no registered employees (sole proprietorships etc.)."},{"schema":{"type":"boolean","default":false},"in":"query","name":"includeVacant","required":false,"description":"Keep properties whose tenant list came back empty. Off by default — a portfolio view is usually about the occupied ones."},{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/companies/NO/":{"get":{"summary":"Norwegian company register: walk, change feed and batch lookup","tags":["v2-companies"],"description":"Every main unit and sub-unit in Enhetsregisteret, dissolved units included, updated hourly from Brreg.\n\n- **Walk**: no `orgnrs` and no `updated-start-date`. Orgnr order; follow `meta.nextBatchId` until it is null. `active=true` leaves out DISSOLVED units, and `unit-type` keeps main units or sub-units.\n- **Change feed**: `updated-start-date`. Units whose row changed at or after that time, ordered by (`updatedAt`, `orgNr`). A removed unit arrives as a tombstone with `status: DISSOLVED` and `dissolutionDate`, so `active` is rejected here.\n- **Batch lookup**: `orgnrs` (comma-separated, max 200). Unknown orgnrs are listed in `meta.notFound`.\n\n⚠ The walk and the change feed are whole-register bulk feeds and need the `no:bulk-feed` scope, a separate agreement. Passing `orgnrs` stays open to any key with `company:read`.","parameters":[{"schema":{"type":"string","example":"923609016,929688074"},"in":"query","name":"orgnrs","required":false,"description":"Comma-separated orgnrs, max 200."},{"schema":{"type":"string","example":"2026-10-22T00:00:00Z"},"in":"query","name":"updated-start-date","required":false,"description":"Change feed: units changed at or after this ISO 8601 timestamp."},{"schema":{"type":"boolean"},"in":"query","name":"active","required":false,"description":"Walk only: leave out DISSOLVED units."},{"schema":{"type":"string","enum":["main","sub"],"example":"main"},"in":"query","name":"unit-type","required":false,"description":"main = hovedenhet, sub = underenhet."},{"schema":{"type":"string"},"in":"query","name":"batch-id","required":false,"description":"Opaque cursor from a previous response's meta.nextBatchId."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":1000,"example":25},"in":"query","name":"page-size","required":false,"description":"Rows per page (max 1000)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/companies/NO/{id}":{"get":{"summary":"Look up a Norwegian company by organization number","tags":["v2-companies"],"description":"One main unit or sub-unit from Enhetsregisteret, updated hourly. A removed unit answers 200 with `status: DISSOLVED` and `dissolutionDate`; only an orgnr Brreg never registered answers 404.","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"999296432"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/companies/NO/{id}/properties":{"get":{"summary":"Properties the company controls, via the ownership graph","tags":["v2-companies"],"description":"Cadastre units owned by the company or by any company below it in the share-ownership graph, one item per (subsidiary x cadastre unit). `ownershipPercent` is the EFFECTIVE share. Norway only.","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"999296432"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/companies/NO/{id}/employees":{"get":{"summary":"Employee-count history","tags":["v2-companies"],"description":"Change-compressed employee-count intervals [validFrom, validTo); validTo null = current. employeesFrom == employeesTo means an exact count; otherwise a registered size band (e.g. Brreg '1-4 ansatte'). Sources: brreg (authoritative) + enin (pre-Brreg history).","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"999296432"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/companies/NO/{id}/roles":{"get":{"summary":"Board members, CEO, auditor and other registered roles (Brønnøysundregistrene)","tags":["v2-companies"],"parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"999296432"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/companies/NO/{id}/financial-statements":{"get":{"summary":"Annual accounts: latest summary with YoY, plus the full timeseries","tags":["v2-companies"],"description":"Latest filed annual accounts for the company, with year-over-year percentages, plus one row per filed period (oldest first). Amounts are absolute units in `currency`. Default accountsType: group (konsern) when it exists, else company. Source: Enin, refreshed nightly.","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"999296432"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/companies/NO/{id}/premises":{"get":{"summary":"Properties the company is or was registered at","tags":["v2-companies"],"description":"One entry per property and continuous stay, newest first, from the company's registered business-address history (Enhetsregisteret, via the address history behind GET /company/{orgnr}/location-history). untilDate is absent while the address is current. Addresses with no matched property are left out; meta.unmatched counts them.","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"999296432"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/companies/NO/{id}/shareholders":{"get":{"summary":"Direct shareholders of a company (share register)","tags":["v2-companies"],"description":"One item per shareholder in Skatteetaten's aksjonærregister for `year`, ordered by holding descending. `owner.type` discriminates: `company` carries an organisasjonsnummer and name, `person` carries only `personRef` — an internal surrogate, never a name or fødselsnummer — and `unknown` is a holder the register left unmatched. DIRECT holdings only; for the chain above them use GET /companies/NO/{id}/group-structure. `year` defaults to the newest year filed. Norway only.","parameters":[{"schema":{"type":"integer","minimum":2003,"example":2026},"in":"query","name":"year","required":false,"description":"Register year. Defaults to the newest filed."},{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","pattern":"^\\d{9}$","example":"999296432"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/companies/NO/{id}/group-structure":{"get":{"summary":"Ownership graph around a company (share register)","tags":["v2-companies"],"description":"The company↔company ownership chain from Skatteetaten's aksjonærregister. `direction=up` (default) walks to the owners, `down` to the holdings, `both` returns each. One item per (related company × depth). `ownershipPercent` is the EFFECTIVE share — the product of the holdings along `path` — so a 50%-owned parent of a 50%-owned parent shows 25, not 50. `isTerminal` means nobody above that company is in the graph, which usually means its own owners are natural persons. `year` defaults to the newest year the company has filed. Norway only. No natural person is named anywhere in this response.","parameters":[{"schema":{"type":"string","enum":["up","down","both"],"default":"up","example":"up"},"in":"query","name":"direction","required":false,"description":"up = owners of the company, down = what the company owns, both = each."},{"schema":{"type":"integer","minimum":2003,"example":2026},"in":"query","name":"year","required":false,"description":"Register year. Defaults to the newest filed."},{"schema":{"type":"integer","minimum":1,"maximum":15},"in":"query","name":"maxDepth","required":false,"description":"Steps from the company. Omit for the whole chain."},{"schema":{"type":"boolean","default":false},"in":"query","name":"onlyTerminal","required":false,"description":"Keep only nodes with nobody above them."},{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","pattern":"^\\d{9}$","example":"999296432"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/companies/NO/{id}/documents":{"get":{"summary":"Documents filed by the company","tags":["v2-companies"],"description":"The annual reports (årsregnskap) the company has filed, newest first, with a download link per year: Brønnøysundregistrene's public PDF copy for Norwegian companies. `downloadUrl` is null when there is nothing to link to; the register may still answer 404 for a year it lists.","parameters":[{"schema":{"type":"string","pattern":"^\\d{9}$","example":"999296432"},"in":"path","name":"id","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/person/ownership/{organization_number}":{"get":{"summary":"Ownership graph around a company (share register)","tags":["person"],"description":"The company↔company ownership chain from Skatteetaten's aksjonærregister. `direction=up` (default) walks to the owners, `down` to the holdings, `both` returns each. One item per (related company × depth). `ownershipPercent` is the EFFECTIVE share — the product of the holdings along `path` — so a 50%-owned parent of a 50%-owned parent shows 25, not 50. `isTerminal` means nobody above that company is in the graph, which usually means its own owners are natural persons: terminal is NOT the same as beneficial owner, use /person/companies/{organization_number}/owners/ubos for that. `year` defaults to the newest year the company has filed, not the current one — the register is annual and lands late. Norway only. No natural person is named anywhere in this response.","parameters":[{"schema":{"type":"string","enum":["up","down","both"],"default":"up","example":"up"},"in":"query","name":"direction","required":false,"description":"up = owners of the company, down = what the company owns, both = each."},{"schema":{"type":"integer","minimum":2003,"example":2026},"in":"query","name":"year","required":false,"description":"Register year. Defaults to the newest filed."},{"schema":{"type":"integer","minimum":1,"maximum":15},"in":"query","name":"maxDepth","required":false,"description":"Steps from the company. Omit for the whole chain."},{"schema":{"type":"boolean","default":false},"in":"query","name":"onlyTerminal","required":false,"description":"Keep only nodes with nobody above them."},{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"path","name":"organization_number","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/person/companies/{organization_number}/owners":{"get":{"summary":"Direct shareholders of a company (share register)","tags":["person"],"description":"One item per shareholder in Skatteetaten's aksjonærregister for `year`, ordered by holding descending. `owner.type` discriminates: `company` carries an organisasjonsnummer and name, `person` carries only `personRef` — an internal surrogate, never a name or fødselsnummer — and `unknown` is a holder the register left unmatched. These are DIRECT holdings only; for the chain above them use /person/ownership/{organization_number}, and for who ultimately benefits use .../owners/ubos. `year` defaults to the newest year filed. Norway only.","parameters":[{"schema":{"type":"integer","minimum":2003,"example":2026},"in":"query","name":"year","required":false,"description":"Register year. Defaults to the newest filed."},{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"path","name":"organization_number","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/person/companies/{organization_number}/owners/ubos":{"get":{"summary":"Ultimate beneficial owners (computed from the share register)","tags":["person"],"description":"Who ultimately benefits from the company, at or above `threshold` percent (default 25 — hvitvaskingsloven's line for a reell rettighetshaver). Computed, not looked up: the ownership chain above the company is walked, the share register is read at each company in it, and every holder's effective share is the product of the holdings between it and the subject, summed when the same holder reaches the subject down more than one branch. `heldVia` shows that arithmetic — one entry per branch, each with the company held directly, the holding in it, and what that is worth in the subject — so a surprising number can be checked rather than trusted. A holder that is itself a company in the chain is a conduit, not a beneficiary, and is not listed: whoever owns IT is. Natural persons are the usual answer and appear as `personRef` only — no name, no fødselsnummer. This is NOT Brønnøysund's reelle-rettighetshavere register, which is self-reported; it is derived from the share register, and will differ where a company has not reported or where control is held by something other than shares. `meta.truncated` means the walk hit its ceiling and the list may be incomplete — a signal to read the graph by hand via /person/ownership. Norway only.","parameters":[{"schema":{"type":"integer","minimum":2003,"example":2026},"in":"query","name":"year","required":false,"description":"Register year. Defaults to the newest filed."},{"schema":{"type":"number","minimum":0,"maximum":100,"default":25},"in":"query","name":"threshold","required":false,"description":"Minimum effective ownership percent to be listed. 25 is the statutory line."},{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"path","name":"organization_number","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/person/companies/{organization_number}/owners/roles":{"get":{"summary":"Roles held by the company's own shareholders","tags":["person"],"description":"The overlap between the share register and Brønnøysund's role register for the same company: one item per direct shareholder, with the roles that shareholder holds IN THIS COMPANY. It answers the due-diligence question 'is the majority shareholder also the chair, or the auditor?' — the concentration of ownership and control in one hand — without naming anyone: owners and role holders are matched on the same internal surrogate, so a person appears as `personRef` on both sides. `?withRolesOnly=true` drops the shareholders who hold no role. Roles are current registrations including resigned ones (`hasResigned`, `isActive`). `year` defaults to the newest year filed. Norway only.","parameters":[{"schema":{"type":"integer","minimum":2003,"example":2026},"in":"query","name":"year","required":false,"description":"Register year. Defaults to the newest filed."},{"schema":{"type":"boolean","default":false},"in":"query","name":"withRolesOnly","required":false,"description":"Return only shareholders who also hold a role."},{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"string","pattern":"^\\d{9}$","example":"977074010"},"in":"path","name":"organization_number","required":true,"description":"Norwegian organisasjonsnummer (9 digits)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/plans/":{"get":{"summary":"Search reguleringsplaner / development plans","tags":["plans"],"description":"Filtered, keyset-paginated list of Combify development plans. Norway (country=NO) is mostly in-progress plans (phases planuppdrag/samrad/antagande); legalForce is null for those. Filter by municipality (e.g. NO301), land-use (residential/commercial/hospitality/…), phase, updated-since (change feed for portfolio alerts), or search (free-text substring over the plan description — e.g. 'barnehage', 'høyhus'). List rows omit the heavy description body and boundary geometry (hasBoundary flags presence); fetch a single plan for the full text.","parameters":[{"schema":{"type":"string"},"in":"query","name":"country","required":false,"description":"ISO country code: NO or SE."},{"schema":{"type":"string","example":"NO3218"},"in":"query","name":"municipality-id","required":false,"description":"Combify municipality id, e.g. NO301."},{"schema":{"type":"string"},"in":"query","name":"land-use","required":false,"description":"One land-use label (residential, commercial, hospitality, …)."},{"schema":{"type":"string"},"in":"query","name":"phase","required":false,"description":"development phase (planuppdrag/samrad/antagande/laga_kraft/…)."},{"schema":{"type":"string"},"in":"query","name":"updated-since","required":false,"description":"Return plans with latestUpdate at/after this ISO timestamp."},{"schema":{"type":"string","minLength":2,"example":"Karl Johans gate 1"},"in":"query","name":"search","required":false,"description":"Case-insensitive substring match on the plan description text."},{"schema":{"type":"string"},"in":"query","name":"after-id","required":false,"description":"Keyset cursor: nextCursor from a previous response."},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"page-size","required":false,"description":"Rows per page (max 100)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/plans/by-property/{nma}":{"get":{"summary":"Development plans linked to a cadastre","tags":["plans"],"description":"Plans whose explicit matrikkel linkage matches the cadastre. NMA is knr-gnr-bnr-fnr-snr (e.g. 0301-207-80-0-0); Combify links at gnr/bnr granularity so fnr/snr are ignored. Note: only ~43% of processed plans carry an explicit property link — absence here does not prove no plan overlaps the parcel (geometric overlap is a separate, future enhancement).","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"nma","required":true,"description":"Canonical matrikkel string, e.g. 0301-207-80-0-0."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/plans/{id}":{"get":{"summary":"Full development-plan detail","tags":["plans"],"description":"One plan with its AI summary, land-use, development programme (units/BRA), linked matrikkel properties, source documents (metadata; PDFs are re-minted on demand), and proposer/expert/landowner companies (organizationNumber joins to Brreg).","parameters":[{"schema":{"type":"string","example":"00008cab-cee5-4e5d-a564-62912d7172e4"},"in":"path","name":"id","required":true,"description":"Combify development_id."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/plans/{id}/documents":{"get":{"summary":"Source document download URLs for a plan","tags":["plans"],"description":"Returns the plan's source documents (plan description, map, illustration, decisions) each with a fresh, time-limited download URL. URLs are minted on demand and expire ~1h — fetch the PDF promptly, don't cache the URL. The documents themselves are not stored by Placepoint.","parameters":[{"schema":{"type":"string","example":"00008cab-cee5-4e5d-a564-62912d7172e4"},"in":"path","name":"id","required":true,"description":"Combify development_id."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/properties/":{"get":{"summary":"Search Swedish properties (fastigheter)","tags":["se-properties"],"description":"Filtered, keyset-paginated list of Swedish properties from Combify. Built for screening: filter by municipality (SE0180), postcode, building type, energy class, tax-assessed value band, land area, and whether the property has development activity (plans/permits/tenders). Every row carries taxation totals so a value-band screen needs no follow-up calls. ⚠ Swedish properties have NO gnr/bnr — the key is `propertyId` (e.g. se0180_abborren_3_1) and `registerId` bridges to our Swedish map layers. Enrichment is a rolling crawl: `detailFetchedAt=null` means enumerated-but-not-yet-enriched, so taxation/owners are absent rather than zero. Use /se/properties/coverage to see how far the crawl has got.\n\n⚠ A FILTERED search is open to any key with `se-properties:read`. The UNFILTERED sweep — no municipality, postcode, building type, energy class, value band or area filter — is a whole-register bulk delivery (4,28 M properties) and needs the `se:bulk-feed` scope, which is a separate agreement and is not part of `[\"all\"]`. Without it an unfiltered call answers 403 BULK_FEED_NOT_LICENSED and names the filters that would open it (DATA-210).","parameters":[{"schema":{"type":"string","example":"SE0114"},"in":"query","name":"municipality-id","required":false,"description":"Swedish municipality code, case-sensitive, e.g. SE0180 (Stockholm)."},{"schema":{"type":"string","example":"0150"},"in":"query","name":"zip-code","required":false,"description":"Postcode of the property's postal address."},{"schema":{"type":"string"},"in":"query","name":"building-type","required":false,"description":"One building type as Combify reports it, e.g. Lägenhet."},{"schema":{"type":"string"},"in":"query","name":"energy-class","required":false,"description":"Energy declaration class A–G."},{"schema":{"type":"integer"},"in":"query","name":"min-assessed-value","required":false,"description":"Minimum total tax-assessed value (SEK)."},{"schema":{"type":"integer"},"in":"query","name":"max-assessed-value","required":false,"description":"Maximum total tax-assessed value (SEK)."},{"schema":{"type":"number"},"in":"query","name":"min-area","required":false,"description":"Minimum land area (m²)."},{"schema":{"type":"number"},"in":"query","name":"max-area","required":false,"description":"Maximum land area (m²)."},{"schema":{"type":"boolean"},"in":"query","name":"has-development","required":false,"description":"true = only properties with a related plan/permit/tender."},{"schema":{"type":"boolean"},"in":"query","name":"enriched-only","required":false,"description":"true = only properties whose full detail has been fetched."},{"schema":{"type":"string"},"in":"query","name":"after-id","required":false,"description":"Keyset cursor: nextCursor from a previous response."},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"page-size","required":false,"description":"Rows per page (max 100)."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/properties/coverage":{"get":{"summary":"Ingest coverage per municipality","tags":["se-properties"],"description":"How much Swedish property data is loaded, per municipality: enumerated vs fully enriched. Enrichment costs one upstream call per property, so it advances as a rolling crawl — this endpoint is how a caller tells 'no data exists' apart from 'not crawled yet'.","parameters":[{"schema":{"type":"string","example":"SE0114"},"in":"query","name":"municipality-id","required":false,"description":"Restrict to one municipality, e.g. SE0180."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/properties/by-register-id/{registerId}":{"get":{"summary":"Properties for a Lantmäteriet register unit","tags":["se-properties"],"description":"Resolves a Lantmäteriet register-unit UUID (`registerenhetsreferens`, the value carried by our Swedish parcel map layer) to Combify property records. This is the join that turns a map click into a full property profile; it matched 100 % of properties in the pilot municipality.","parameters":[{"schema":{"type":"string","example":"909a6a47-3442-90ec-e040-ed8f66444c3f"},"in":"path","name":"registerId","required":true,"description":"Lantmäteriet registerenhetsreferens UUID."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/properties/by-register-id/{registerId}/tenants":{"get":{"summary":"Companies operating on a register unit — the tenant list","tags":["se-properties"],"description":"Sites (arbetsställen) from SCB's business register whose VISITING address falls inside the Lantmäteriet register unit: company, site name, employee size band at the site, SNI industry, coordinate. This is where companies actually operate, not their registered postal address. Active sites by default; `status=closed` for the ones that have left, `status=all` for both. Sole traders and SCB advertising opt-outs are excluded. Same rows as /se/companies/locations?registerId=… — use that one for radius searches.","parameters":[{"schema":{"type":"string","enum":["active","closed","all"],"default":"active","example":"active"},"in":"query","name":"status","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":200,"example":25},"in":"query","name":"page-size","required":false},{"schema":{"type":"string","example":"909a6a47-3442-90ec-e040-ed8f66444c3f"},"in":"path","name":"registerId","required":true,"description":"Lantmäteriet registerenhetsreferens UUID."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/properties/by-owner/{orgnr}":{"get":{"summary":"Properties owned by a Swedish company","tags":["se-properties"],"description":"Every property whose current registered owner is this organisation number — i.e. a company's Swedish real-estate portfolio. Accepts 10 digits with or without the hyphen (556467-7002). Organisation owners only: private-person ownership is never matchable here, by design. `organizationNumber` is the join key to Swedish company data. Requires the property to have been enriched (ownership arrives with detail, not enumeration).","parameters":[{"schema":{"type":"string"},"in":"query","name":"after-id","required":false,"description":"Keyset cursor: nextCursor from a previous response."},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"page-size","required":false},{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish organisation number, e.g. 556467-7002."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/properties/{propertyId}":{"get":{"summary":"Full Swedish property detail","tags":["se-properties"],"description":"One fastighet with addresses, apartments, ownership, per-unit tax assessment (taxering), energy declarations, related plans/permits/tenders with the companies behind them, and the Lantmäteriet parcels it consists of. `parcels` can hold several entries — a Swedish fastighet may comprise multiple skiften. Apartments are descriptive attributes, not cadastral units: a Swedish bostadsrätt has no cadastral identity, so there is no per-unit ownership to look up.","parameters":[{"schema":{"type":"string","example":"se0114_allandal_1_1_1"},"in":"path","name":"propertyId","required":true,"description":"Combify property id, e.g. se0180_abborren_3_1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/properties/{propertyId}/documents/{projectId}/{assetId}":{"get":{"summary":"Download URL for a property's project document or plan-map image","tags":["se-properties"],"description":"Mints a fresh, time-limited download URL for one document (or image, with kind=image) belonging to a related project on this property. URLs are minted on demand and expire — fetch promptly, do not cache the URL. Placepoint does not store the files. Get the projectId and assetId from the property detail response.","parameters":[{"schema":{"type":"string","enum":["document","image"],"default":"document","example":"document"},"in":"query","name":"kind","required":false},{"schema":{"type":"string","example":"se0114_allandal_1_1_1"},"in":"path","name":"propertyId","required":true,"description":"Combify property id."},{"schema":{"type":"string"},"in":"path","name":"projectId","required":true,"description":"relations[].projectId from the detail response."},{"schema":{"type":"string"},"in":"path","name":"assetId","required":true,"description":"document_id, or image_id when kind=image."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/coverage":{"get":{"summary":"How much data we actually hold, per dataset","tags":["se-companies"],"description":"Row counts, distinct companies and year span per dataset, computed from the database. Exists because a hand-picked sample always looks better than the register: ask the API instead of trusting a slide. Cached for an hour — the query full-scans several multi-million-row tables.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/move-history":{"get":{"summary":"Relocation dates in batch — many companies per call, or a full sweep","tags":["se-companies"],"description":"The batch twin of `/se/companies/{orgnr}/move-history`. Pass `orgnrs` (comma-separated, up to 200) to look up a known list in one call; omit it to sweep all 591 k relocations with the cursor. Ordered by `(orgId, date)` ascending, so rows for one company arrive together and paging never loses or repeats a row. Same two sources and the same coverage caveat as the single lookup — read `meta.coverage`, and note that a company you asked for simply has no rows if we have no relocation on record for it.⚠ The unfiltered sweep (no `orgnrs`) is a whole-register bulk feed and needs the `se:bulk-feed` scope — a separate agreement. Passing `orgnrs` to look up companies you already know stays open to any key with `se-companies:read`.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"query","name":"orgnrs","required":false,"description":"Comma-separated Swedish org numbers, hyphenated or not. Max 200."},{"schema":{"type":"string","example":"2020-01-01"},"in":"query","name":"from","required":false,"description":"Only moves on or after this date (YYYY-MM-DD)."},{"schema":{"type":"string","example":"2026-12-31"},"in":"query","name":"to","required":false,"description":"Only moves on or before this date (YYYY-MM-DD)."},{"schema":{"type":"string","enum":["confirmed","inferred"],"example":"confirmed"},"in":"query","name":"confidence","required":false,"description":"Filter to observed moves (confirmed) or inferred-and-dated ones."},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":500,"example":25},"in":"query","name":"page-size","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/locations":{"get":{"summary":"Who operates on a property, or near a point — Swedish tenant overview","tags":["se-companies"],"description":"Sites (arbetsställen) from SCB's business register, filtered by the property they stand on (`registerId`, Lantmäteriet registerenhetsreferens — the key our Swedish map layers and /se/properties/by-register-id use) or by a point and radius (`lat`, `lon`, `radius` in metres, max 2000). One of the two is required: a filterless sweep is the parquet bulk's job (`/se/companies/bulk/locations`). These are VISITING addresses — where the company actually operates — not the registered postal address that /{orgnr}/address returns; for every tenth site the two point to different places. Active sites only by default; `status=closed` gives the sites that have shut, `status=all` both. A property query is keyset-paginated on `cfarNr`; a point query returns the NEAREST `page-size` sites with `distanceM` and no cursor — narrow the radius rather than paging.","parameters":[{"schema":{"type":"string","example":"909a6a47-3442-90ec-e040-ed8f66444c3f"},"in":"query","name":"registerId","required":false,"description":"Lantmäteriet registerenhetsreferens UUID of the property."},{"schema":{"type":"number"},"in":"query","name":"lat","required":false,"description":"Latitude (WGS84). Requires lon; radius defaults to 250 m."},{"schema":{"type":"number"},"in":"query","name":"lon","required":false,"description":"Longitude (WGS84)."},{"schema":{"type":"number","minimum":1,"maximum":2000},"in":"query","name":"radius","required":false,"description":"Metres from (lat, lon). Default 250, max 2000."},{"schema":{"type":"string","enum":["active","closed","all"],"default":"active","example":"active"},"in":"query","name":"status","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Property queries only."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":200,"example":25},"in":"query","name":"page-size","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/employees/coverage":{"get":{"summary":"Employee data source mix per year — how much of it is a real measurement","tags":["se-companies"],"description":"One row per year and source, so you can see what the headcount data is actually made of before training on it. `exactRows` counts rows with a number (bands are excluded by construction). For `enin_point_measurement`, `measuredInYear` vs `carriedForward` is the important split: a measurement is emitted once per calendar year its interval spans, so `carriedForward` is the same count repeated, not a new observation. Materialised — the underlying aggregate over 7.7 M rows takes about a minute — and refreshed by the daily job; `computedAt` says when.","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/contact":{"get":{"summary":"Contact details in batch, or as a whole-register sweep","tags":["se-companies"],"description":"One row per company with a contact record, ordered by orgId — the batch and feed twin of `/se/companies/{orgnr}/contact`. Pass `orgnrs` (comma-separated, max 200) to look up companies you already have; omit it to sweep the register with `cursor`.\n\n⚠ The unfiltered sweep is a whole-register bulk feed and needs the `se:bulk-feed` scope — a separate agreement. Passing `orgnrs` stays open to any key with `se-companies:read`.\n\n⚠ PERSONAL NUMBERS ARE WITHHELD BELOW A BULK AGREEMENT. 157 435 of the 394 778 contact rows (39,9 %) carry a Swedish mobile-series number (070/072/073/076/079), and they are NOT confined to the `mobile` field — 45,9 % of the values in `phone` are themselves mobile numbers. 96,5 % of those numbers are used by exactly one company, and for 72 081 companies a join against our own roles feed pairs the number with a named natural person. They are therefore personal data, served only to a caller with `se:bulk-feed` AND tier 2; everyone else gets the same rows with `phone`/`mobile` null where the number was personal. Personal e-mail addresses (8 564) are withheld on the same rule. A licensed response carries `isPersonal` per row saying which fields those are, so you can honour erasure downstream.\n\n⚠ COVERAGE, screened view (what most keys see): 286 772 rows, 189 332 with a phone number, 51 220 with a role-based e-mail, 185 043 with a website. The 108 006 rows whose only contact point was a personal number are absent entirely, so a row missing here is not proof the company has no contact details. Licensed view: all 394 778 rows, 343 070 with a phone. Measured 2026-09-09.\n\nSwitchboard coverage against the whole active register is 38 % — the denominators differ, and this endpoint's own row count is the smaller one.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"query","name":"orgnrs","required":false,"description":"Comma-separated org numbers, max 200 per call. Present = batch lookup (open); absent = register sweep (needs se:bulk-feed)."},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Opaque cursor from a previous response's meta.nextCursor."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":500,"example":25},"in":"query","name":"page-size","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/proceedings":{"get":{"summary":"Konkurs, likvidation, fusion, rekonstruktion — in batch or as a sweep","tags":["se-companies"],"description":"Registered avvecklingsförfaranden from Bolagsverket with the register's own start date: likvidation (78 k), konkurs (13 k), fusion, företagsrekonstruktion, ackord, delning. Batch with `orgnrs` (max 200) or sweep with the cursor; ordered by (orgId, ord). `code` filters on the register code (KK-AVOMFO = konkurs, LI-AVOMFO = likvidation, FR-AVOMFO = rekonstruktion, FUOL/FUOT-AVOMFO = fusion); `from` keeps proceedings starting on or after a date. `companyIsActive` tells you whether the company is still registered.⚠ The unfiltered sweep (no `orgnrs`) is a whole-register bulk feed and needs the `se:bulk-feed` scope — a separate agreement. Passing `orgnrs` to look up companies you already know stays open to any key with `se-companies:read`.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"query","name":"orgnrs","required":false,"description":"Comma-separated Swedish org numbers, hyphenated or not. Max 200. Omit to sweep everything."},{"schema":{"type":"string"},"in":"query","name":"code","required":false,"description":"Register code, e.g. KK-AVOMFO (konkurs), LI-AVOMFO (likvidation)."},{"schema":{"type":"string","example":"2020-01-01"},"in":"query","name":"from","required":false,"description":"Only proceedings starting on or after this date (YYYY-MM-DD)."},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Opaque cursor from a previous response's meta.nextCursor."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":500,"example":25},"in":"query","name":"page-size","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/names":{"get":{"summary":"Registered names with registration dates — in batch or as a sweep","tags":["se-companies"],"description":"Every name the register holds per company: the company name (`isCurrentCompanyName`), särskilda företagsnamn (secondary business names, `nameRegistrationNo` set) and foreign-language names, each with its registration date. ⚠ The register is a snapshot: this is current and parallel names, NOT a list of past names — past names accrue through `/se/companies/changes?type=name_change` from 2026-08-10. Ordered by (orgId, nameRegistrationNo, ord).⚠ The unfiltered sweep (no `orgnrs`) is a whole-register bulk feed and needs the `se:bulk-feed` scope — a separate agreement. Passing `orgnrs` to look up companies you already know stays open to any key with `se-companies:read`.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"query","name":"orgnrs","required":false,"description":"Comma-separated Swedish org numbers, hyphenated or not. Max 200. Omit to sweep everything."},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Opaque cursor from a previous response's meta.nextCursor."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":500,"example":25},"in":"query","name":"page-size","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/announcements":{"get":{"summary":"PoIT announcements feed — date, register and category per company","tags":["se-companies"],"description":"The Post- och Inrikes Tidningar index: every announcement about a company with its publication date, the register it was filed in and a coarse category. Ordered oldest-first on (publishedDate, announcementId), so `since` plus the cursor never misses a row. ⚠ NOT A CLASSIFIED EVENT: `register` is where it was filed, not what changed — 91 % of rows are 'Aktiebolagsregistret', which covers capital increases, board changes and address changes alike. The announcement text is not available. Coverage starts 2024-08-06 (the source keeps a rolling 24 months; we archive from there).⚠ The unfiltered sweep (no `orgnrs`) is a whole-register bulk feed and needs the `se:bulk-feed` scope — a separate agreement. Passing `orgnrs` to look up companies you already know stays open to any key with `se-companies:read`.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"query","name":"orgnrs","required":false,"description":"Comma-separated Swedish org numbers, hyphenated or not. Max 200. Omit to sweep everything."},{"schema":{"type":"string","example":"2020-01-01"},"in":"query","name":"since","required":false,"description":"Only announcements published on or after this date (YYYY-MM-DD)."},{"schema":{"type":"string","enum":["registerandring","risiko_konkurs","risiko_likvidation","kapital_struktur","bolagsstamma","eiendom","ovrig_juridisk"],"example":"registerandring"},"in":"query","name":"category","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Opaque cursor from a previous response's meta.nextCursor."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":500,"example":25},"in":"query","name":"page-size","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/changes":{"get":{"summary":"What changed since — the weekly register-diff feed","tags":["se-companies"],"description":"Events from our weekly diff of the Bolagsverket and SCB bulk files: `address_change`, `name_change`, `deregistered`, `new_registration`, `proceeding_started`, `proceeding_ended`, `form_change`, each with `oldValue`/`newValue` and the snapshot weeks it happened between. Ordered oldest-first on (detectedAt, eventId): poll with `since=<last detectedAt>` and the cursor and you never miss a row. Live since 2026-08-10. One row per SOURCE — the same address change seen by both registers is two rows with different `source`; `/move-history` is the deduplicated view of relocations.⚠ The unfiltered sweep (no `orgnrs`) is a whole-register bulk feed and needs the `se:bulk-feed` scope — a separate agreement. Passing `orgnrs` to look up companies you already know stays open to any key with `se-companies:read`.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"query","name":"orgnrs","required":false,"description":"Comma-separated Swedish org numbers, hyphenated or not. Max 200. Omit to sweep everything."},{"schema":{"type":"string","example":"2020-01-01"},"in":"query","name":"since","required":false,"description":"Only events detected at or after this instant (ISO-8601 date or timestamp)."},{"schema":{"type":"string","enum":["address_change","name_change","deregistered","new_registration","proceeding_started","proceeding_ended","form_change"],"example":"address_change"},"in":"query","name":"type","required":false},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Opaque cursor from a previous response's meta.nextCursor."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":500,"example":25},"in":"query","name":"page-size","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}":{"get":{"summary":"Swedish company core data","tags":["se-companies"],"description":"Name, legal form, registration dates, industry (SNI 2025 with Swedish and English names) and ongoing insolvency proceedings. ⚠ The register runs on SNI 2025, not SNI 2007 — a 2007 lookup does not fail, it returns a plausible but wrong industry.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/employees":{"get":{"summary":"Employee count — current value plus the annual series","tags":["se-companies"],"description":"`current` is the latest known headcount; `history` is one row per year. ⚠ TWO SOURCES THAT DO NOT MEASURE THE SAME THING, and `employeesSource` says which one each row used: `annual_report_fte_average` is an exact full-time-equivalent AVERAGE over a fiscal year, from the digital annual report — the right number for a year, but only for companies that file digitally and up to ~18 months behind. `enin_point_measurement` is a headcount ON A DATE — day-fresh and much wider coverage, but not an average. `scb_size_band` means only a size interval is known (bandMin/bandMax, no midpoint is constructed on purpose). Do not build a trend line that mixes sources without saying so.","parameters":[{"schema":{"type":"integer","example":2020},"in":"query","name":"from","required":false,"description":"Earliest year, inclusive (YYYY)."},{"schema":{"type":"integer","example":2026},"in":"query","name":"to","required":false,"description":"Latest year, inclusive (YYYY)."},{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/employees/observations":{"get":{"summary":"Every real headcount measurement for the company, with change fields","tags":["se-companies"],"description":"One row per ACTUAL measurement — the counterpart to `/employees`, which returns one row per calendar year and therefore repeats a measurement across the years its interval spans. ⚠ TWO SOURCES THAT MEASURE DIFFERENT THINGS: `measurementType: point` is heads counted on `measuredAt` (Enin), `annual_average` is the FTE average over a fiscal year from the annual report, dated to the period end. `changeSincePrevious` and `changeYearOverYear` are computed within one source only, and never across a size band: a band row carries `employees: null` (we do not construct a midpoint), which breaks the chain by design. `changeYearOverYear` compares with the nearest earlier measurement 300–430 days back and is null when none exists — the median Swedish company has one measurement in total, which is the real state of this dataset. For the whole population use the `employee_observations` parquet in /se/companies/bulk; there is no sweep feed here on purpose.","parameters":[{"schema":{"type":"string","enum":["enin_point_measurement","annual_report_fte_average"],"example":"enin_point_measurement"},"in":"query","name":"source","required":false,"description":"Only measurements from this source."},{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/accounts":{"get":{"summary":"Annual accounts — revenue, profit, balance sheet, per year","tags":["se-companies"],"description":"Newest year first. Amounts are ABSOLUTE SEK (whole kronor, not thousands, not millions). ⚠ `scope` is company or group and both may exist for the same year; group revenue is often 2–3× the company's, so pick one. ⚠ `isEmptyRow` marks a filing the source failed to parse — it writes 0 rather than null, so revenue 0 AND ebit 0 AND assets 0 is missing data, not a dormant company. Only aggregate-level lines exist for Sweden (no note-level detail); `profitMargin` and `returnOnAssets` are derived by us because the source leaves them empty for Swedish companies.","parameters":[{"schema":{"type":"string","enum":["company","group"],"example":"company"},"in":"query","name":"scope","required":false},{"schema":{"type":"integer","example":2020},"in":"query","name":"from","required":false,"description":"Earliest accounting year, inclusive (YYYY)."},{"schema":{"type":"integer","example":2026},"in":"query","name":"to","required":false,"description":"Latest accounting year, inclusive (YYYY)."},{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/contact":{"get":{"summary":"Contact details — phone, mobile, email, website","tags":["se-companies"],"description":"Single lookup; for many companies at once use `?orgnrs=` on /se/companies/contact, and for a sweep the same route without it.\n\n⚠ PERSONAL NUMBERS ARE WITHHELD BELOW A BULK AGREEMENT. A Swedish mobile-series number belongs to a person, not a switchboard — 96,5 % of the ones we hold are used by exactly one company — so `phone`/`mobile` come back null where the number was personal unless the key has `se:bulk-feed` AND tier 2. Personal e-mail addresses are withheld on the same rule. This is a change from before 2026-09-09, when every key saw them (DATA-197).\n\n⚠ COVERAGE: 38 % of active companies have a phone number at all, 22 % a website, 7 % an email — no public Swedish source carries a phone number, so this is a licensed commercial source and thin by nature. A 404 means we have no contact row, not that the company is unknown. ⚠ Companies with SCB advertising opt-out (reklamspärr) and deregistered companies are excluded at the database level, so they 404 here by design. A company whose ONLY contact point was a personal number now 404s for an unlicensed key rather than returning an empty row. `sourceAsOf` is an upper bound on freshness, not a verification date.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/address":{"get":{"summary":"Current registered address, with coordinates","tags":["se-companies"],"description":"The registered postal address from Bolagsverket and SCB, plus a coordinate from our own geocoding against Lantmäteriet's belägenhetsadresser (address-level points, not postcode centroids — none of the address sources ship coordinates). `sourcesAgree=false` means Bolagsverket and SCB disagree, which happens for about a third of companies. `locationFallback` fills the ~14 % of companies whose registered address is only a PO box — it is where the company WAS and may be stale, but a PO box is never a place.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/locations":{"get":{"summary":"Where the company actually operates — its sites with visiting addresses","tags":["se-companies"],"description":"One row per arbetsställe (physical site) from SCB's business register, with the VISITING address, a coordinate, the SCB employee size band at that site and the Lantmäteriet register unit (`property.registerId`) the site stands on. This is the answer to 'where is this company' — /{orgnr}/address is the registered POSTAL address, and for every tenth company the two differ (PO box, accountant, head office). Main site first. Active sites by default; `status=closed` or `status=all` for history. A 404 means we hold no site for the company — sole traders (personal id numbers) and companies with SCB advertising opt-out are excluded at the database level.","parameters":[{"schema":{"type":"string","enum":["active","closed","all"],"default":"active","example":"active"},"in":"query","name":"status","required":false},{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/move-history":{"get":{"summary":"When did this company move — dated relocations, newest first","tags":["se-companies"],"description":"Relocation DATES, which is a different product from `/address-history` (addresses with the dates we observed them). Two sources, and the difference matters: `poit_announcement` is the day the company announced an address change in Post- och Inrikes Tidningar — an exact date, but the announcement carries no address, so `movedFrom`/`movedTo` are null. `bulk_diff` is our own weekly diff of Bolagsverket's bulk files — week precision, but it knows both addresses. A third source, `poit_inferred`, fills the years between: we know the company moved (a commercial source holds an older street address) and date it from the announcement index — `confidence: \"inferred\"`, because the index does not say what an announcement changed. Filter with `?confidence=confirmed` to exclude it. ⚠ AN EMPTY LIST IS NOT 'NEVER MOVED'. `meta.coverage` states the windows on every response — read it before concluding anything from silence.","parameters":[{"schema":{"type":"string","example":"2020-01-01"},"in":"query","name":"from","required":false,"description":"Only moves on or after this date (YYYY-MM-DD)."},{"schema":{"type":"string","example":"2026-12-31"},"in":"query","name":"to","required":false,"description":"Only moves on or before this date (YYYY-MM-DD)."},{"schema":{"type":"string","enum":["confirmed","inferred"],"example":"confirmed"},"in":"query","name":"confidence","required":false,"description":"confirmed = a source says the address changed. inferred = we know it moved and dated it from the announcement index. Omit for both."},{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/address-history":{"get":{"summary":"Address history — every address we have observed, with dates","tags":["se-companies"],"description":"Oldest first. ⚠ READ `isDatedMove` BEFORE USING A DATE. false means `observedFrom` is when WE first saw the address; the company may have been there for twenty years before. true means the company moved in during (movedAfter, observedFrom], an interval of about a week. Swedish relocation dates exist in no free source — Bolagsverket keeps them behind a paid per-company API — so the dated moves only start at 2026-W30 and grow forward. One older point per company comes from a commercial source and is dated as an upper bound. `sources` lists which sources confirm the address.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/roles":{"get":{"summary":"Who signs for the company — CEO, chair, board members, auditor (named persons)","tags":["se-companies"],"description":"The people who signed the company's latest annual report, with `roleTypeCodes` normalised from the free-text role (legend in `meta.roleTypeLegend`). ⚠ SIGNATORIES, NOT THE REGISTERED BOARD — a member who did not sign is absent, and only companies that file digitally (~64 % of active AB) appear; Volvo and Ericsson file on paper and 404 here. `history=true` returns every filed year (316 k companies have two or more) so a change of CEO or auditor shows up as a different name on the next report. No appointed/resigned dates exist in the source. `person.key` is a pseudonymous hash, stable within the company; there is no personnummer anywhere. Named natural persons — enterprise tier.","parameters":[{"schema":{"type":"boolean","default":false},"in":"query","name":"history","required":false},{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/proceedings":{"get":{"summary":"Konkurs, likvidation, fusion, rekonstruktion — with dates","tags":["se-companies"],"description":"Every avvecklingsförfarande the register holds for the company, newest first, with the register's own start date. 200 with an empty list when there are none — that is a real answer, not an unknown company. The same rows appear inline as `proceedings` on `/se/companies/{orgnr}`; this endpoint adds the label and exists for symmetry with the feed.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/names":{"get":{"summary":"Every registered name with its registration date","tags":["se-companies"],"description":"The company name first (`isCurrentCompanyName: true`), then särskilda företagsnamn and foreign-language names. ⚠ Current and parallel names, not past names — the register is a snapshot. Past names accrue through `/se/companies/changes?type=name_change`.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/announcements":{"get":{"summary":"PoIT announcements about the company — date, register, category","tags":["se-companies"],"description":"Every Post- och Inrikes Tidningar announcement we have indexed for the company, newest first. ⚠ `register` is where it was filed, not what changed; the text is not available. Coverage starts 2024-08-06. 200 with an empty list when there are none.","parameters":[{"schema":{"type":"string","example":"2020-01-01"},"in":"query","name":"from","required":false,"description":"Published on or after (YYYY-MM-DD)."},{"schema":{"type":"string","example":"2026-12-31"},"in":"query","name":"to","required":false,"description":"Published on or before (YYYY-MM-DD)."},{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/changes":{"get":{"summary":"What changed for the company in the weekly register diff","tags":["se-companies"],"description":"Address, name, (de)registration and proceeding events from our weekly diff of the Bolagsverket and SCB bulk files, newest first, with `oldValue`/`newValue`. Live since 2026-08-10. 200 with an empty list when nothing changed in that window.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/{orgnr}/syna-relocations":{"get":{"summary":"Syna historical relocations for a company","tags":["se-companies"],"description":"Full address-change history from Syna for one Aktiebolag, at arbetsställe (CFAR) level. Each row is a dated move for one workplace, with the previous and new address and employee range. Coverage: ~2006 to 2026-09. 760 K companies, 1.87 M moves total.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"path","name":"orgnr","required":true,"description":"Swedish org number, 10 digits, hyphenated or not."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/se/companies/syna-relocations":{"get":{"summary":"Syna Aktiebolag relocations — batch lookup or full sweep","tags":["se-companies"],"description":"Historical address changes from Syna for all Swedish Aktiebolag, at arbetsställe (CFAR) level. 1.87 M rows across 760 K companies, ~2006–2026.\n\nPass `orgnrs` (comma-separated, max 200) to look up a known list; omit it to sweep the entire dataset with the cursor. Ordered by `(orgId, moveDate, id)`.\n\n⚠ The unfiltered sweep (no `orgnrs`) is a bulk feed and needs the `se:bulk-feed` scope. Passing `orgnrs` stays open to any key with `se-companies:read`.","parameters":[{"schema":{"type":"string","example":"556012-5790"},"in":"query","name":"orgnrs","required":false,"description":"Comma-separated Swedish org numbers, hyphenated or not. Max 200. Omit to sweep everything."},{"schema":{"type":"string"},"in":"query","name":"cursor","required":false,"description":"Opaque cursor from a previous response's meta.nextCursor."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":500,"example":25},"in":"query","name":"page-size","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}":{"get":{"summary":"Property summary","tags":["v2-properties"],"description":"Full property summary (area, geometry, buildings count etc.) by NMA. Mirrors GET /property/cadastres/{id}.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/buildings":{"get":{"summary":"Buildings on a property","tags":["v2-properties"],"description":"Building information for a property by NMA. Mirrors GET /property/buildings/{id}.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/units":{"get":{"summary":"Dwelling units on a property","tags":["v2-properties"],"description":"Dwelling units (boenheter) for a property by NMA. Mirrors GET /property/units/{id}.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/owners":{"get":{"summary":"Property owners","tags":["v2-properties"],"description":"Current owners of a property by NMA. Mirrors GET /property/owners/{id}.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/transactions":{"get":{"summary":"Transaction history","tags":["v2-properties"],"description":"Transaction/price history for a property by NMA. Mirrors GET /property/transactions/{id}.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/risks":{"get":{"summary":"Risk assessment","tags":["v2-properties"],"description":"Flood, landslide and quick-clay risk factors for a property by NMA. Mirrors GET /risk/assessment/{id}.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/valuations":{"get":{"summary":"AVM value estimate","tags":["v2-properties"],"description":"AVM market value estimate for a property by NMA. Mirrors GET /valuation/estimate/{cadastreId}.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/encumbrances":{"get":{"summary":"Encumbrances (heftelser)","tags":["v2-properties"],"description":"Registered encumbrances on a property — servitutter, pant, utlegg, etc. (Kartverket grunnbok via PropCloud). Mirrors GET /property/owners/encumbrances?property-id-nma={id}.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/tenants":{"get":{"summary":"Current tenants","tags":["v2-properties"],"description":"Current tenants/lessees for a property by NMA — companies registered at the cadastre's addresses (v2-core-db). Mirrors GET /properties/{nma}/tenants.","parameters":[{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100,"example":25},"in":"query","name":"pageSize","required":false},{"schema":{"type":"boolean","default":true},"in":"query","name":"showEmpty","required":false,"description":"Include tenants with no registered employees."},{"schema":{"type":"boolean","default":false},"in":"query","name":"includeFamily","required":false,"description":"Widen the lookup to the whole matrikkel family (base cadastre + all sections)."},{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/energy-certificates":{"get":{"summary":"Energy certificate history","tags":["v2-properties"],"description":"Every Enova energy label ever registered on a property, newest first (v2-core-db). Mirrors GET /properties/{nma}/energy-labels.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/utilization":{"get":{"summary":"Plot utilization","tags":["v2-properties"],"description":"Plot utilization (BYA%, BRA) for a property by NMA (v2-core-db). Mirrors GET /property/panel/{nma}/utilization.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/boundary":{"get":{"summary":"Cadastre boundary as GeoJSON","tags":["v2-properties"],"description":"The boundary of a matrikkelenhet as a GeoJSON FeatureCollection in WGS84, one feature per teig. Mirrors GET /geo/cadastres/{id}/boundary.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/buildings/{buildingNumber}/footprint":{"get":{"summary":"Building footprint as GeoJSON","tags":["v2-properties"],"description":"The FKB footprint of one building as a GeoJSON Feature in WGS84. Mirrors GET /geo/buildings/{id}/footprint. 404 when the building is not registered on the property.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"},{"schema":{"type":"string","example":"80482345"},"in":"path","name":"buildingNumber","required":true,"description":"Bygningsnummer"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/zoning-plans":{"get":{"summary":"Development plans linked to a property","tags":["v2-properties"],"description":"Development plans (reguleringsplaner) whose explicit matrikkel linkage matches the cadastre. Mirrors GET /plans/by-property/{nma}.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/certifications":{"get":{"summary":"BREEAM sustainability certificates","tags":["v2-properties"],"description":"BREEAM-NOR and BREEAM In-Use sustainability certificates by NMA, via Newsec. Mirrors GET /property/panel/{nma}/breeam.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/sections":{"get":{"summary":"Sections (eierseksjoner) of a property","tags":["v2-properties"],"description":"The sections registered on the matrikkelenhet, with share and owners. Mirrors PropCloud GET /property/sections.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/lookups":{"post":{"summary":"Batch property lookup","tags":["v2-properties"],"description":"Up to 100 cadastre numbers in one call. `items` holds the summaries that resolved (same shape as GET /properties/NO/{id}), `notFound` the ids that did not. Each id counts as one call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["cadastreIds"],"properties":{"cadastreIds":{"type":"array","items":{"type":"string"},"description":"Cadastre numbers (NMA) to resolve in one call, at most 100.","example":["0301-209-369-0-0","1539-27-410-0-0"]}},"example":{"cadastreIds":["0301-207-80-0-0"]}},"example":{"cadastreIds":["0301-207-80-0-0"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/comparable-transactions":{"get":{"summary":"Comparable transactions","tags":["v2-properties"],"description":"Recent sales of similar homes near this property, from PropCloud's comparable-transactions model, seeded with the property's largest residential unit. PropCloud computes comparables for homes only: a property with no residential unit of known area answers an empty list with `meta.reason`.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/building-permits":{"get":{"summary":"Building permits (planned)","tags":["v2-properties"],"parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/housing-cooperative":{"get":{"summary":"Housing cooperative (borettslag / sameie) behind a property","tags":["v2-properties"],"description":"The housing association the property is organised under, from PropCloud: its owners record (GET /owners/housing-association-owners) and the units it holds on this matrikkelenhet (GET /companies/housing-company-units). 404 when the property is not under one.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/documents":{"get":{"summary":"Documents tied to a property","tags":["v2-properties"],"description":"Sales documents (salgsoppgaver and the like) PropCloud holds for the property. Mirrors GET /documents/sales-documents.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, e.g. 0301-207-80-0-0"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/addresses/NO/{address}":{"get":{"summary":"Address resolution","tags":["v2-properties"],"description":"Resolve an address text string to matching properties. Mirrors GET /property/search.","parameters":[{"schema":{"type":"string","example":"Storgata 1 Oslo"},"in":"path","name":"address","required":true,"description":"Address text, e.g. Storgata 1 Oslo"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/coordinates/NO/{lat}/{lon}":{"get":{"summary":"Reverse-geocode coordinates to a property","tags":["v2-properties"],"description":"The property whose registered boundary (teig) covers the point, with its summary, buildings and addresses. `meta.cadastreNumbers` lists every matrikkelenhet whose teig contains the point; the first one is expanded. Outside every registered teig: `property` null, empty lists.","parameters":[{"schema":{"type":"string","example":"59.9139"},"in":"path","name":"lat","required":true,"description":"Latitude (WGS84)"},{"schema":{"type":"string","example":"10.7522"},"in":"path","name":"lon","required":true,"description":"Longitude (WGS84)"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/valuation/estimate/{cadastreId}":{"get":{"tags":["valuation"],"description":"AVM market value estimate for a property by NMA id","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"cadastreId","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/valuation/rental-estimate/{cadastreId}":{"get":{"tags":["valuation"],"description":"AVM rental value estimate for a property by NMA id","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"cadastreId","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/valuation/indexed-price/{cadastreId}":{"get":{"tags":["valuation"],"description":"Indexed price development for a property by NMA id","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"cadastreId","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/":{"get":{"tags":["listings"],"parameters":[{"schema":{"type":"string","example":"Karl Johans gate 1"},"in":"query","name":"q","required":false},{"schema":{"type":"string","enum":["sale","sale-commercial","rent","rent-commercial","newbuild"],"default":"sale","example":"sale"},"in":"query","name":"type","required":false,"description":"Listing type: sale/sale-commercial/rent/rent-commercial/newbuild"},{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"pageSize","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/{id}":{"get":{"summary":"One listing by Finn code","tags":["listings"],"description":"A single Finn.no listing by its finn-code — the number in the finn.no URL and in `finnCode` on every row from GET /listings/. The row is the same shape the list returns, so no field is lost by looking one up directly. A finn-code belongs to exactly one of the five categories; the gateway probes all five and reports which one matched in `meta.listingType`. Pass `type` to go straight to it. 404 = PropCloud holds no listing with that code in any category — including a code that was never a property advert. Historical listings are kept, so a sold or withdrawn advert still answers.","parameters":[{"schema":{"type":"string","enum":["sale","sale-commercial","rent","rent-commercial","newbuild"],"example":"sale"},"in":"query","name":"type","required":false,"description":"Skip the category probe when you already know it."},{"schema":{"type":"string","example":"467493344"},"in":"path","name":"id","required":true,"description":"Finn code, digits only"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/risk/assessment/{id}":{"get":{"tags":["risk"],"description":"Full risk assessment (flood, landslide, quick clay) for a property by NMA id","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/cadastres/{id}/boundary":{"get":{"summary":"Cadastre boundary as GeoJSON","tags":["geo"],"description":"The boundary of a matrikkelenhet as a GeoJSON FeatureCollection in WGS84 (EPSG:4326), from Kartverket's eiendomskart (teig). **One feature per teig, not one per property:** a matrikkelenhet is often several disjoint parcels — 274 772 of them are — so a client that reads `features[0]` and stops will draw part of the property. Each feature carries `registeredAreaM2` (Kartverket's stored figure) and `computedAreaM2` (recomputed on the geography); they differ by a few m² as a rule. `disputedBoundary` marks a teig whose border is in dispute, `sharedWithOtherCadastres` one that several matrikkelenheter share. Ask for a seksjon that has no teig of its own and you get the base matrikkelenhet's boundary instead, with `meta.resolvedFrom` saying so. 404 = no teig on this NMA; ~7 % of teiger carry no cadastre number in the source and are unreachable by NMA at all. For the same parcels as rows rather than geometry, use GET /property/cadastres/{id}/plots.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"id","required":true,"description":"NMA cadastre id (kommunenr-gnr-bnr-fnr-snr)"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/buildings/{id}/footprint":{"get":{"summary":"Building footprint as GeoJSON","tags":["geo"],"description":"The FKB footprint of one building as a GeoJSON Feature in WGS84 (EPSG:4326). `id` is the Norwegian bygningsnummer — the same key GET /property/buildings/{id} takes, and the one in `building.buildingNumber` on every energy-label item. Coordinates carry a Z component; `footprintAreaM2` is the ground area computed on the geography, which is the building's grunnflate, NOT its BRA. `buildingStatus` is the matrikkel code (TB = taken into use); a demolished building keeps its footprint row until the weekly sync drops it. 404 = we hold no footprint for that bygningsnummer. To go from a property to its buildings, use GET /property/cadastres/{id} or the `buildingNumbers` list on GET /property/cadastres/{id}/plots.","parameters":[{"schema":{"type":"string","example":"80482345"},"in":"path","name":"id","required":true,"description":"Bygningsnummer"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/seafront/":{"get":{"summary":"Seafront parcels in an area","tags":["geo"],"description":"Parcels (teiger) in a bounding box that touch the coastline or reach into sea, as a GeoJSON FeatureCollection in WGS84 with the parcel outline and its seafront facts. Per parcel: `shorelineM`, `seaAreaM2`, `isSeaParcel`; `depth20m` / `depth50m` / `depthAtQuay` as `{maxM, meanM, accuracyM}` in metres below chart datum (accuracy from the chart's survey quality); `quaysOnParcel`, `quayLengthM`, `quayKinds` (Norwegian, e.g. \"kai\", \"flytebrygge\"), `nearestQuayM`; `seabedType`; `cables` `[{type, category, status}]`; `restrictions` `[{type, name, category, rules}]`; `nearestAquaculture` `{name, distanceM}` (≤ 5 km); `nearestFerryRouteM` (≤ 2 km); `stormSurgeNn2000M` `{20y, 200y, 1000y}`; `lowestGroundNn2000M`; `landBelowStorm200yShare` (0–1); `buildings`, `buildingsBelowStorm200y` (FKB base elevation below the 200-year level). Not for navigation. `meta.truncated` is true when `limit` was reached. Pilot coverage: inner Oslofjord.","parameters":[{"schema":{"type":"string","example":"10.715,59.903,10.735,59.912"},"in":"query","name":"bbox","required":true,"description":"w,s,e,n in WGS84, at most 0.25° per side"},{"schema":{"type":"string","example":"0301"},"in":"query","name":"municipality","required":false,"description":"Kommunenummer, four digits"},{"schema":{"type":"boolean"},"in":"query","name":"hasQuay","required":false,"description":"Only parcels with a quay, pier or pontoon on them"},{"schema":{"type":"boolean"},"in":"query","name":"belowStormSurge","required":false,"description":"Only parcels with land or buildings below the 200-year storm surge"},{"schema":{"type":"number"},"in":"query","name":"minDepth20m","required":false,"description":"Max depth within 20 m of the shore at least this (m below chart datum)"},{"schema":{"type":"boolean","default":true},"in":"query","name":"geometry","required":false,"description":"Include parcel outlines"},{"schema":{"type":"integer","minimum":1,"maximum":2000,"default":500,"example":25},"in":"query","name":"limit","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/seafront/cadastres/{id}":{"get":{"summary":"Seafront facts for a property","tags":["geo"],"description":"The seafront parcels of one matrikkelenhet as a GeoJSON FeatureCollection. Per parcel: `shorelineM`, `seaAreaM2`, `isSeaParcel`; `depth20m` / `depth50m` / `depthAtQuay` as `{maxM, meanM, accuracyM}` in metres below chart datum (accuracy from the chart's survey quality); `quaysOnParcel`, `quayLengthM`, `quayKinds` (Norwegian, e.g. \"kai\", \"flytebrygge\"), `nearestQuayM`; `seabedType`; `cables` `[{type, category, status}]`; `restrictions` `[{type, name, category, rules}]`; `nearestAquaculture` `{name, distanceM}` (≤ 5 km); `nearestFerryRouteM` (≤ 2 km); `stormSurgeNn2000M` `{20y, 200y, 1000y}`; `lowestGroundNn2000M`; `landBelowStorm200yShare` (0–1); `buildings`, `buildingsBelowStorm200y` (FKB base elevation below the 200-year level). Not for navigation. 404 = the property has no seafront parcel in the covered area.","parameters":[{"schema":{"type":"string","example":"0301-6-9-0-0"},"in":"path","name":"id","required":true,"description":"NMA cadastre id"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/seafront/teig/{teigId}":{"get":{"summary":"Seafront facts for one parcel","tags":["geo"],"description":"One seafront parcel as a GeoJSON Feature, by the teig id the map layers carry. Per parcel: `shorelineM`, `seaAreaM2`, `isSeaParcel`; `depth20m` / `depth50m` / `depthAtQuay` as `{maxM, meanM, accuracyM}` in metres below chart datum (accuracy from the chart's survey quality); `quaysOnParcel`, `quayLengthM`, `quayKinds` (Norwegian, e.g. \"kai\", \"flytebrygge\"), `nearestQuayM`; `seabedType`; `cables` `[{type, category, status}]`; `restrictions` `[{type, name, category, rules}]`; `nearestAquaculture` `{name, distanceM}` (≤ 5 km); `nearestFerryRouteM` (≤ 2 km); `stormSurgeNn2000M` `{20y, 200y, 1000y}`; `lowestGroundNn2000M`; `landBelowStorm200yShare` (0–1); `buildings`, `buildingsBelowStorm200y` (FKB base elevation below the 200-year level). Not for navigation. 404 = not a seafront parcel, or outside the covered area.","parameters":[{"schema":{"type":"string","example":"291150093"},"in":"path","name":"teigId","required":true,"description":"Teig id"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/areas/{country}/{areaId}/statistics":{"get":{"summary":"Get area statistics","tags":["areas"],"description":"Aggregate statistics for a kommune (4-digit areaId) or grunnkrets (8-digit areaId): population by gender, age and education, households by composition, dwellings by type and tenure, daytime population and commuters, and the income (alminnelig inntekt) and wealth (nettoformue) bracket distributions in kNOK. Source: SSB via Geodata's 100 m demography grid, summed over the cells in the area. `asOfDate` is the population year of the release; `populationHistory` has one point per release loaded. Norway only. A 4-digit id is always read as a kommunenummer: postal codes share the length and are not served here. 404 = no grid cell carries that id.","parameters":[{"schema":{"type":"string","enum":["NO","SE"],"example":"NO"},"in":"path","name":"country","required":true,"description":"ISO 3166-1 alpha-2"},{"schema":{"type":"string","example":"0301"},"in":"path","name":"areaId","required":true,"description":"Kommunenummer (4 digits) or grunnkretsnummer (8 digits)"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/roofs":{"get":{"summary":"Roof models for every building on a property","tags":["geo"],"description":"Every building on the matrikkelenhet with its roof model: `faces` (area, plan area, pitch, azimuth, facing, outline), `edges` (eave, verge, ridge, hip, valley with lengths), `summary` (roof shape, areas, pitch range, heights, volume) and `offsetM` into the main building's frame. 404 = no buildings with roof data on the property. Derived from FKB-Bygning (© Kartverket og Geovekst-partene). Coordinates are in a local metre frame around `anchor`, not the source lines. Material fields (`material`, `materialShare`, wall `layers`) are rule-based estimates with `confidence` and `basis`, never registered values.","parameters":[{"schema":{"type":"integer","enum":[25832,25833,25834,25835],"example":25832},"in":"query","name":"srid","required":false,"description":"Frame CRS for `anchor` x/y. Default: the building's own UTM zone. Fusion's Norway scene uses 25833."},{"schema":{"type":"string","example":"3222-108-502-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, knr-gnr-bnr-fnr-snr"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/properties/NO/{id}/roofs/model.glb":{"get":{"summary":"One 3D model (GLB) of every building on a property","tags":["geo"],"description":"glTF binary with every building on the property, origin at the main building's anchor. Derived from FKB-Bygning (© Kartverket og Geovekst-partene). Coordinates are in a local metre frame around `anchor`, not the source lines. Material fields (`material`, `materialShare`, wall `layers`) are rule-based estimates with `confidence` and `basis`, never registered values.","parameters":[{"schema":{"type":"integer","enum":[25832,25833,25834,25835],"example":25832},"in":"query","name":"srid","required":false,"description":"Frame CRS for `anchor` x/y. Default: the building's own UTM zone. Fusion's Norway scene uses 25833."},{"schema":{"type":"string","example":"3222-108-502-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, knr-gnr-bnr-fnr-snr"}],"responses":{"200":{"description":"glTF binary","content":{"model/gltf-binary":{"schema":{"type":"string","format":"binary"}}}}}}},"/properties/NO/{id}/walls":{"get":{"summary":"Walls of every building on a property","tags":["geo"],"description":"Per building: each wall with length, height range, gross area, azimuth and facing, whether it is shared with a neighbour, and material `layers`; area per facing; build year, floors and an estimated wall material. Heights are metres above the building's base elevation; `groundElevationMinM` / `groundElevationMaxM` give the terrain under the building (NN2000). Derived from FKB-Bygning (© Kartverket og Geovekst-partene). Coordinates are in a local metre frame around `anchor`, not the source lines. Material fields (`material`, `materialShare`, wall `layers`) are rule-based estimates with `confidence` and `basis`, never registered values.","parameters":[{"schema":{"type":"integer","enum":[25832,25833,25834,25835],"example":25832},"in":"query","name":"srid","required":false,"description":"Frame CRS for `anchor` x/y. Default: the building's own UTM zone. Fusion's Norway scene uses 25833."},{"schema":{"type":"string","example":"3222-108-502-0-0"},"in":"path","name":"id","required":true,"description":"Kartverket NMA, knr-gnr-bnr-fnr-snr"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/buildings/NO/{buildingNumber}/roof":{"get":{"summary":"Roof model for one building","tags":["geo"],"description":"The roof model of one building by bygningsnummer: `faces`, `edges`, `summary`, `quality` and `anchor`. 404 = unknown building, or a building with no roof lines in FKB. Derived from FKB-Bygning (© Kartverket og Geovekst-partene). Coordinates are in a local metre frame around `anchor`, not the source lines. Material fields (`material`, `materialShare`, wall `layers`) are rule-based estimates with `confidence` and `basis`, never registered values.","parameters":[{"schema":{"type":"integer","enum":[25832,25833,25834,25835],"example":25832},"in":"query","name":"srid","required":false,"description":"Frame CRS for `anchor` x/y. Default: the building's own UTM zone. Fusion's Norway scene uses 25833."},{"schema":{"type":"string","example":"14550755"},"in":"path","name":"buildingNumber","required":true,"description":"Kartverket bygningsnummer"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/buildings/NO/{buildingNumber}/roof/drawing.svg":{"get":{"summary":"Plan drawing of one building's roof (SVG)","tags":["geo"],"description":"Measured plan drawing with faces, pitch and edge lengths. Derived from FKB-Bygning (© Kartverket og Geovekst-partene). Coordinates are in a local metre frame around `anchor`, not the source lines. Material fields (`material`, `materialShare`, wall `layers`) are rule-based estimates with `confidence` and `basis`, never registered values.","parameters":[{"schema":{"type":"string","maxLength":120},"in":"query","name":"title","required":false,"description":"Heading on the drawing"},{"schema":{"type":"string","example":"14550755"},"in":"path","name":"buildingNumber","required":true,"description":"Kartverket bygningsnummer"}],"responses":{"200":{"description":"SVG drawing","content":{"image/svg+xml":{"schema":{"type":"string","format":"binary"}}}}}}},"/buildings/NO/{buildingNumber}/roof/model.glb":{"get":{"summary":"3D model of one building's roof (GLB)","tags":["geo"],"description":"glTF binary of the roof in the building's local frame. Derived from FKB-Bygning (© Kartverket og Geovekst-partene). Coordinates are in a local metre frame around `anchor`, not the source lines. Material fields (`material`, `materialShare`, wall `layers`) are rule-based estimates with `confidence` and `basis`, never registered values.","parameters":[{"schema":{"type":"integer","enum":[25832,25833,25834,25835],"example":25832},"in":"query","name":"srid","required":false,"description":"Frame CRS for `anchor` x/y. Default: the building's own UTM zone. Fusion's Norway scene uses 25833."},{"schema":{"type":"string","example":"14550755"},"in":"path","name":"buildingNumber","required":true,"description":"Kartverket bygningsnummer"}],"responses":{"200":{"description":"glTF binary","content":{"model/gltf-binary":{"schema":{"type":"string","format":"binary"}}}}}}},"/roofs/NO/":{"get":{"summary":"Roof models for every building in a bounding box","tags":["geo"],"description":"Roof models for every building in a WGS84 bounding box. Largest buildings first, up to 2 km² and `limit` buildings (at most 1000). A building belongs to the area when a point on its footprint lies inside it. `truncated` says whether buildings were left out; `totals` sums roof, plan and flat area and counts roof shapes. 413 = the area is larger than 2 km². Weighs 10 calls. Derived from FKB-Bygning (© Kartverket og Geovekst-partene). Coordinates are in a local metre frame around `anchor`, not the source lines. Material fields (`material`, `materialShare`, wall `layers`) are rule-based estimates with `confidence` and `basis`, never registered values.","parameters":[{"schema":{"type":"string","example":"10.7405,59.9120,10.7445,59.9140"},"in":"query","name":"bbox","required":true,"description":"minLon,minLat,maxLon,maxLat in WGS84"},{"schema":{"type":"integer","enum":[25832,25833,25834,25835],"example":25832},"in":"query","name":"srid","required":false,"description":"Frame CRS. Default: the UTM zone of the area's centre."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":300,"example":25},"in":"query","name":"limit","required":false,"description":"Largest buildings first"},{"schema":{"type":"string","enum":["full","summary"],"default":"full","example":"full"},"in":"query","name":"detail","required":false,"description":"`summary` drops faces and edges"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/roofs/NO/area":{"post":{"summary":"Roof models for every building in a polygon","tags":["geo"],"description":"Roof models for every building inside a GeoJSON Polygon or MultiPolygon in WGS84 (lon, lat), or a Feature holding one. Largest buildings first, up to 2 km² and `limit` buildings (at most 1000). A building belongs to the area when a point on its footprint lies inside it. `truncated` says whether buildings were left out; `totals` sums roof, plan and flat area and counts roof shapes. 413 = the area is larger than 2 km². Weighs 10 calls. Derived from FKB-Bygning (© Kartverket og Geovekst-partene). Coordinates are in a local metre frame around `anchor`, not the source lines. Material fields (`material`, `materialShare`, wall `layers`) are rule-based estimates with `confidence` and `basis`, never registered values.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["Polygon","MultiPolygon","Feature"]}},"example":{"type":"Polygon","coordinates":[[[10.7405,59.912],[10.7445,59.912],[10.7445,59.914],[10.7405,59.914],[10.7405,59.912]]]}}}}},"parameters":[{"schema":{"type":"integer","enum":[25832,25833,25834,25835],"example":25832},"in":"query","name":"srid","required":false,"description":"Frame CRS. Default: the UTM zone of the area's centre."},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":300,"example":25},"in":"query","name":"limit","required":false,"description":"Largest buildings first"},{"schema":{"type":"string","enum":["full","summary"],"default":"full","example":"full"},"in":"query","name":"detail","required":false,"description":"`summary` drops faces and edges"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/search/":{"get":{"summary":"Search addresses, companies and cadastres in one call","tags":["search"],"description":"Free-text search across three things at once, for a search box or an agent that has a string and no key yet. Every hit carries `type`, a `label` to show, and an `href` — the gateway path that returns the full record — so the result can be followed without knowing which product owns it.\n\n**What each type matches.** `address` is PropCloud's address index, the same backend as GET /property/search; each hit carries the `cadastreNumber` (NMA) the address sits on. `company` is a NAME search over Enhetsregisteret — the gateway's only one, since GET /company/search takes an organisation number and rejects a name. `cadastre` appears only when `q` is itself an NMA.\n\n**Exact keys short-circuit.** A 9-digit `q` is looked up as an organisation number and an NMA-shaped `q` as a matrikkelenhet; the exact hit is returned first with `score` 1.0, ahead of the fuzzy ones. Otherwise hits are ordered address-first, then company by trigram score — the two sources are not ranked against each other, because PropCloud returns its addresses unranked and a made-up cross-source score would be a lie.\n\n**Limits.** Company name matching needs at least 3 characters; shorter terms search addresses only. `meta.total` is how many hits were retrieved, not how many exist — this is a typeahead, not a corpus walk. `meta.counts` breaks the hits down by type and `meta.partial` names any source that did not answer in time, so a slow company index degrades to an address-only answer instead of a 502.","parameters":[{"schema":{"type":"string","minLength":1,"example":"Karl Johans gate 1"},"in":"query","name":"q","required":true,"description":"Free text: an address, a company name, an organisation number or an NMA."},{"schema":{"type":"string","example":"address,company"},"in":"query","name":"types","required":false,"description":"Comma-separated subset of address,company,cadastre. Default: all three."},{"schema":{"type":"integer","minimum":1,"default":1,"example":1},"in":"query","name":"page","required":false},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"in":"query","name":"pageSize","required":false}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/ai/recommend":{"post":{"tags":["ai"],"description":"AI-assisted endpoint search. Pass a natural-language query, get back 1–4 recommended gateway endpoints.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","minLength":3,"maxLength":500},"language":{"type":"string","enum":["no","en"],"default":"no"}},"example":{"query":"Karl Johans gate 1","language":"no"}},"example":{"query":"Karl Johans gate 1","language":"no"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/search-properties-by-address":{"post":{"tags":["property"],"description":"**DEPRECATED — duplicate.** Use GET /property/search?q=<address> (canonical PropCloud typeahead). Original summary: Typing in search bar","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"deprecated":true,"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/search-landlords":{"post":{"tags":["property"],"description":"Typing in search bar","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/search-tenants":{"post":{"tags":["property"],"description":"Typing in search bar","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/search-persons":{"post":{"tags":["property"],"description":"Typing in search bar","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/search-places":{"post":{"tags":["property"],"description":"Typing in search bar (Google Places)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/search/landlord-result":{"post":{"tags":["property"],"description":"Clicking a landlord search result","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Newsec landlord UUID from /search-landlords","example":"89a8e13f-f5ea-c2bd-8d26-bbc5be1f210f"}},"additionalProperties":false,"example":{"id":"89a8e13f-f5ea-c2bd-8d26-bbc5be1f210f"}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/datasets/mine":{"post":{"tags":["geo"],"description":"Datasett panel open","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/datasets/external-datasets":{"post":{"tags":["geo"],"description":"Datasett panel open","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/datasets/nsm-transaction-features":{"post":{"tags":["geo"],"description":"Enabling Newsecs transaksjonsliste layer","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/statistics/get-statistics-layer":{"post":{"tags":["geo"],"description":"Enabling Yield/Ledighet/Leie layer","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"layerId":{"type":"string","example":"nsm_statistics"}},"additionalProperties":true,"example":{"layerId":"nsm_statistics"}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/cadastre-bbox-by-id":{"post":{"tags":["property"],"description":"Clicking a property on map","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/base-property-data":{"post":{"tags":["property"],"description":"Property panel – Info tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/property-data-buildings":{"post":{"tags":["property"],"description":"Property panel – Bygg tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/property-data-datasets":{"post":{"tags":["property"],"description":"Property panel – Datasett tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/property-data-tenants":{"post":{"tags":["property"],"description":"Property panel – Leietakere tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/property-tenants-summary":{"post":{"tags":["property"],"description":"Property panel load","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/property-enova-attests":{"post":{"tags":["property"],"description":"Property panel – ESG tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/property-breeam-nor-attests":{"post":{"tags":["property"],"description":"Property panel – ESG tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/property-breeam-in-use-attests":{"post":{"tags":["property"],"description":"Property panel – ESG tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/get-cadastre-ownership-trees":{"post":{"tags":["property"],"description":"Property panel – Eiere tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/get-housing-share-tree":{"post":{"tags":["property"],"description":"Property panel – Eiere tab (borettsandel)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/get-viewport-entity-properties-ids":{"post":{"tags":["property"],"description":"Landlord/tenant map view","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/properties-point-representations-bounds":{"post":{"tags":["property"],"description":"Landlord/tenant map view","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/transaction/registered-transactions-dataset-summary":{"post":{"tags":["property"],"description":"Datasett panel open","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/transaction/unregistered-transactions-dataset-summary":{"post":{"tags":["property"],"description":"Datasett panel open","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/transaction/get-cadastre-transactions-summary":{"post":{"tags":["property"],"description":"Property panel load","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["cadastreId"],"properties":{"cadastreId":{"type":"string","description":"Newsec internal cadastre ID (integer as string), from property panel data","example":"62648984"}},"additionalProperties":false,"example":{"cadastreId":"0301-207-80-0-0"}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/transaction/get-cadastre-transactions":{"post":{"tags":["property"],"description":"Property panel – Transaksjoner tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/transaction/get-owner-transactions-summary":{"post":{"tags":["property"],"description":"Landlord panel load","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/transaction/get-owner-transactions":{"post":{"tags":["property"],"description":"Landlord – Transaksjoner tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/landlord/landlord-properties":{"post":{"tags":["company"],"description":"Landlord – Eiendommer tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/landlord/landlord-tenants-summary":{"post":{"tags":["company"],"description":"Landlord panel load","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/landlord/landlord-tenants":{"post":{"tags":["company"],"description":"Landlord – Leietakere tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/landlord/landlord-details":{"post":{"tags":["company"],"description":"Landlord – Info tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/landlord/landlord-members":{"post":{"tags":["company"],"description":"Landlord – Styret tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/get-company-portfolio-tree":{"post":{"tags":["company"],"description":"Landlord – Portefølje tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["ownershipNodeId"],"properties":{"ownershipNodeId":{"type":"string","description":"Newsec landlord UUID from /search-landlords","example":"89a8e13f-f5ea-c2bd-8d26-bbc5be1f210f"}},"additionalProperties":false,"example":{"ownershipNodeId":"89a8e13f-f5ea-c2bd-8d26-bbc5be1f210f"}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/get-company-owners-tree":{"post":{"tags":["company"],"description":"Landlord – Aksjonærer tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/company-financial-data":{"post":{"tags":["company"],"description":"Landlord – Info tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/tenant/tenant-data":{"post":{"tags":["company"],"description":"Clicking tenant in search results","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tenantId"],"properties":{"tenantId":{"type":"string","description":"Newsec tenant UUID from /search-tenants","example":"89a8e13f-f5ea-c2bd-8d26-bbc5be1f210f"}},"additionalProperties":false,"example":{"tenantId":"89a8e13f-f5ea-c2bd-8d26-bbc5be1f210f"}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/person/person/general-data":{"post":{"tags":["person"],"description":"Clicking person in search results","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/person/person/roles":{"post":{"tags":["person"],"description":"Person – Roller tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/list-summary":{"post":{"tags":["property"],"description":"\"Åpne sammendrag\" in list view","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/building/information":{"get":{"tags":["property"],"description":"**DEPRECATED — duplicate.** Use GET /property/buildings/{nma} (hand-curated). Original summary: Fetch information related to buildings","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"deprecated":true,"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/building/floors":{"get":{"tags":["property"],"description":"Fetch building floors information","parameters":[{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer"},"in":"query","name":"building-id","required":false,"description":"The Number used to identify a building"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/building/status-history":{"get":{"tags":["property"],"description":"Fetch the risk factors of any property","parameters":[{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer"},"in":"query","name":"building-id","required":false,"description":"The Number used to identify a building"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/all":{"get":{"tags":["listings"],"description":"Get all listings information","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":467493344},"in":"query","name":"finn-code","required":false,"description":"Finn Code"},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 924758716-4 / orgnummer-andelsnummer"},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/project":{"get":{"tags":["listings"],"description":"Get listings project information","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":467493344},"in":"query","name":"finn-code","required":false,"description":"Finn Code"},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 924758716-4 / orgnummer-andelsnummer"},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/rent/commercial":{"get":{"tags":["listings"],"description":"Get listings rent commercial information","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":467493344},"in":"query","name":"finn-code","required":false,"description":"Finn Code"},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/rent/homes":{"get":{"tags":["listings"],"description":"Get listings rent homes information","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":467493344},"in":"query","name":"finn-code","required":false,"description":"Finn Code"},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/sale/commercial":{"get":{"tags":["listings"],"description":"Get listings sale commercial information","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":467493344},"in":"query","name":"finn-code","required":false,"description":"Finn Code"},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/sale/homes":{"get":{"tags":["listings"],"description":"Get listings sale home information","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":467493344},"in":"query","name":"finn-code","required":false,"description":"Finn Code"},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 924758716-4 / orgnummer-andelsnummer"},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/sale/leisure":{"get":{"tags":["listings"],"description":"Get listings sale leisure information","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":467493344},"in":"query","name":"finn-code","required":false,"description":"Finn Code"},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/sale/plot":{"get":{"tags":["listings"],"description":"Get listings sale plot information","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":467493344},"in":"query","name":"finn-code","required":false,"description":"Finn Code"},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/car":{"get":{"tags":["listings"],"description":"Fetch car listings","parameters":[{"schema":{"type":"integer","example":467493344},"in":"query","name":"finn-code","required":false,"description":"Finn Code"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"updated-start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"updated-end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"WAUZZZ8E27A123456"},"in":"query","name":"chassis-number","required":false,"description":"A working example of a chassis number."},{"schema":{"type":"string"},"in":"query","name":"ad-type","required":false,"description":"A working example of an ad type."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/key-word-analysis":{"post":{"tags":["listings"],"description":"Fetch key word analysis for a given property","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"batch-id":{"type":"integer","title":"Batch-Id"},"property-id-nma":{"type":"string","title":"Property-Id-Nma"},"housing-association-id-nma":{"type":"string","title":"Housing-Association-Id-Nma"},"list-of-keywords":{"items":{},"type":"array","title":"List-Of-Keywords"},"start-date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start-Date"},"end-date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End-Date"},"page":{"type":"integer","title":"Page","default":1}},"type":"object","title":"KeywordAnalysisRequest","example":{"property-id-nma":"0301-229-10-0-0"}},"example":{"property-id-nma":"0301-229-10-0-0"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/construction-method":{"get":{"tags":["listings"],"description":"Fetch the construction method for a property or listing","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":467493344},"in":"query","name":"finn-code","required":false,"description":"Finn Code"},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 924758716-4 / orgnummer-andelsnummer"},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/listings/listing-ads-info":{"get":{"tags":["listings"],"description":"Fetch ads information from finn via single or multiple finn codes","parameters":[{"schema":{"type":"string","example":"467493344"},"in":"query","name":"finn-codes","required":false,"description":"Finn.no listing code (numeric). Plural forms take a comma-separated list."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/market-activity/summary":{"post":{"tags":["geo"],"description":"Fetch market activity summary for a specific area.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"bbox":{"properties":{"type":{"type":"string","title":"Type","description":"Type of geometry","default":"Polygon"},"coordinates":{"items":{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},"type":"array","title":"Coordinates","description":"Coordinates of the geometry","default":[[[10.776086561681458,59.9028339763978],[10.781317878721966,59.9028339763978],[10.781317878721966,59.90083870179467],[10.776086561681458,59.90083870179467],[10.776086561681458,59.9028339763978]]]}},"type":"object","title":"BboxGeometry"},"property-type":{"items":{"type":"integer"},"type":"array","title":"Property Type","description":"The property type for which the data is recorded. It is expected to be a list of integers, where the values represent,            0: 'leilighet', 1: 'enebolig', 2: 'tomannsbolig', 3: 'rekkehus', 4: 'fritidsbolig'.","example":[0,1,2,3,4]},"market-activity-type":{"items":{"type":"integer"},"type":"array","title":"Market Activity Type","description":"The market activity type for which the data is recorded. It is expected to be a list of integers, where            the values represent, 0: 'OPM_TRANSACTION', 1: 'AD', 2: 'FOR_SALE', 3: 'OTHER_TRANSACTION'. Here OPM_TRANSACTION            means Open Market Transaction meaning valid transactions, AD means this advertisement is not live/active for sale            anymore, FOR_SALE means they are currently live/active for sale, OTHER_TRANSACTION did not happen in open market.","example":[0,1,2,3]},"time-period":{"type":"string","enum":["3 mo","6 mo","1 yr","2 yr","3 yr","4 yr","5 yr","10 yr"],"title":"Time Period","description":"For last how many days of data should be fetched. The values can be '3 mo', '6 mo', '1 yr', '2 yr', '3 yr',        '4 yr', '5 yr', '10 yr'.","example":"3 mo"},"bra":{"properties":{"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Minimum BRA","description":"Minimum BRA of a range","example":0},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Maximum BRA","description":"Maximum BRA of a range","example":100}},"type":"object","title":"BRARangeSchema"},"price":{"properties":{"min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minimum Price","description":"Minimum price of a range","example":10000},"max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Maximum Price","description":"Maximum price of a range","example":10000000}},"type":"object","title":"PriceRangeSchema"},"area-limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Area Limit","description":"Area Limit in km²"},"time-period-built-year":{"anyOf":[{"type":"string","enum":["0 yr","10 yr","20 yr","30 yr","40 yr","50 yr"],"title":"TimePeriodYears"},{"type":"null"}],"title":"Time Period Built Year","description":"For last how many years of data should be fetched based on the built year. The values can be '10 yr', '20 yr', '30 yr', '40 yr', '50 yr'.","example":"10 yr"}},"type":"object","required":["bbox","bra","price"],"title":"MarketActivityRequest","example":{"bbox":{"type":"Polygon","coordinates":[[[10.776086561681458,59.9028339763978],[10.781317878721966,59.9028339763978],[10.781317878721966,59.90083870179467],[10.776086561681458,59.90083870179467],[10.776086561681458,59.9028339763978]]]},"property-type":[0,1,2,3,4],"market-activity-type":[0,1,2,3],"time-period":"3 mo","bra":{"min":0,"max":100},"price":{"min":10000,"max":10000000},"area-limit":10,"time-period-built-year":"0 yr"}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/chart/number-of-transaction":{"post":{"tags":["geo"],"description":"Fetch market activity summary for a specific area.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"bbox":{"properties":{"type":{"type":"string","title":"Type","description":"Type of geometry","default":"Polygon"},"coordinates":{"items":{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},"type":"array","title":"Coordinates","description":"Coordinates of the geometry","default":[[[10.776086561681458,59.9028339763978],[10.781317878721966,59.9028339763978],[10.781317878721966,59.90083870179467],[10.776086561681458,59.90083870179467],[10.776086561681458,59.9028339763978]]]}},"type":"object","title":"BboxGeometry"},"property-type":{"items":{"type":"integer"},"type":"array","title":"Property Type","description":"The property type for which the data is recorded. It is expected to be a list of integers, where the values represent,            0: 'leilighet', 1: 'enebolig', 2: 'tomannsbolig', 3: 'rekkehus', 4: 'fritidsbolig'.","example":[0,1,2,3,4]},"market-activity-type":{"items":{"type":"integer"},"type":"array","title":"Market Activity Type","description":"The market activity type for which the data is recorded. It is expected to be a list of integers, where            the values represent, 0: 'OPM_TRANSACTION', 1: 'AD', 2: 'FOR_SALE', 3: 'OTHER_TRANSACTION'. Here OPM_TRANSACTION            means Open Market Transaction meaning valid transactions, AD means this advertisement is not live/active for sale            anymore, FOR_SALE means they are currently live/active for sale, OTHER_TRANSACTION did not happen in open market.","example":[0,1,2,3]},"time-period":{"type":"string","enum":["3 mo","6 mo","1 yr","2 yr","3 yr","4 yr","5 yr","10 yr"],"title":"Time Period","description":"For last how many days of data should be fetched. The values can be '3 mo', '6 mo', '1 yr', '2 yr', '3 yr',        '4 yr', '5 yr', '10 yr'.","example":"3 mo"},"bra":{"properties":{"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Minimum BRA","description":"Minimum BRA of a range","example":0},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Maximum BRA","description":"Maximum BRA of a range","example":100}},"type":"object","title":"BRARangeSchema"},"price":{"properties":{"min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minimum Price","description":"Minimum price of a range","example":10000},"max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Maximum Price","description":"Maximum price of a range","example":10000000}},"type":"object","title":"PriceRangeSchema"},"area-limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Area Limit","description":"Area Limit in km²"},"time-period-built-year":{"anyOf":[{"type":"string","enum":["0 yr","10 yr","20 yr","30 yr","40 yr","50 yr"],"title":"TimePeriodYears"},{"type":"null"}],"title":"Time Period Built Year","description":"For last how many years of data should be fetched based on the built year. The values can be '10 yr', '20 yr', '30 yr', '40 yr', '50 yr'.","example":"10 yr"}},"type":"object","required":["bbox","bra","price"],"title":"MarketActivityRequest","example":{"bbox":{"type":"Polygon","coordinates":[[[10.776086561681458,59.9028339763978],[10.781317878721966,59.9028339763978],[10.781317878721966,59.90083870179467],[10.776086561681458,59.90083870179467],[10.776086561681458,59.9028339763978]]]},"property-type":[0,1,2,3,4],"market-activity-type":[0,1,2,3],"time-period":"3 mo","bra":{"min":0,"max":100},"price":{"min":10000,"max":10000000},"area-limit":10,"time-period-built-year":"0 yr"}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/chart/property-type":{"post":{"tags":["geo"],"description":"Fetch market activity summary for a specific area.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"bbox":{"properties":{"type":{"type":"string","title":"Type","description":"Type of geometry","default":"Polygon"},"coordinates":{"items":{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},"type":"array","title":"Coordinates","description":"Coordinates of the geometry","default":[[[10.776086561681458,59.9028339763978],[10.781317878721966,59.9028339763978],[10.781317878721966,59.90083870179467],[10.776086561681458,59.90083870179467],[10.776086561681458,59.9028339763978]]]}},"type":"object","title":"BboxGeometry"},"property-type":{"items":{"type":"integer"},"type":"array","title":"Property Type","description":"The property type for which the data is recorded. It is expected to be a list of integers, where the values represent,            0: 'leilighet', 1: 'enebolig', 2: 'tomannsbolig', 3: 'rekkehus', 4: 'fritidsbolig'.","example":[0,1,2,3,4]},"market-activity-type":{"items":{"type":"integer"},"type":"array","title":"Market Activity Type","description":"The market activity type for which the data is recorded. It is expected to be a list of integers, where            the values represent, 0: 'OPM_TRANSACTION', 1: 'AD', 2: 'FOR_SALE', 3: 'OTHER_TRANSACTION'. Here OPM_TRANSACTION            means Open Market Transaction meaning valid transactions, AD means this advertisement is not live/active for sale            anymore, FOR_SALE means they are currently live/active for sale, OTHER_TRANSACTION did not happen in open market.","example":[0,1,2,3]},"time-period":{"type":"string","enum":["3 mo","6 mo","1 yr","2 yr","3 yr","4 yr","5 yr","10 yr"],"title":"Time Period","description":"For last how many days of data should be fetched. The values can be '3 mo', '6 mo', '1 yr', '2 yr', '3 yr',        '4 yr', '5 yr', '10 yr'.","example":"3 mo"},"bra":{"properties":{"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Minimum BRA","description":"Minimum BRA of a range","example":0},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Maximum BRA","description":"Maximum BRA of a range","example":100}},"type":"object","title":"BRARangeSchema"},"price":{"properties":{"min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minimum Price","description":"Minimum price of a range","example":10000},"max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Maximum Price","description":"Maximum price of a range","example":10000000}},"type":"object","title":"PriceRangeSchema"},"area-limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Area Limit","description":"Area Limit in km²"},"time-period-built-year":{"anyOf":[{"type":"string","enum":["0 yr","10 yr","20 yr","30 yr","40 yr","50 yr"],"title":"TimePeriodYears"},{"type":"null"}],"title":"Time Period Built Year","description":"For last how many years of data should be fetched based on the built year. The values can be '10 yr', '20 yr', '30 yr', '40 yr', '50 yr'.","example":"10 yr"}},"type":"object","required":["bbox","bra","price"],"title":"MarketActivityRequest","example":{"bbox":{"type":"Polygon","coordinates":[[[10.776086561681458,59.9028339763978],[10.781317878721966,59.9028339763978],[10.781317878721966,59.90083870179467],[10.776086561681458,59.90083870179467],[10.776086561681458,59.9028339763978]]]},"property-type":[0,1,2,3,4],"market-activity-type":[0,1,2,3],"time-period":"3 mo","bra":{"min":0,"max":100},"price":{"min":10000,"max":10000000},"area-limit":10,"time-period-built-year":"0 yr"}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/geo/sold-information":{"post":{"tags":["geo"],"description":"Fetch information regarding properties that were sold in recent days","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"point":{"properties":{"type":{"type":"string","title":"Geometry Type","description":"The type of geometry. Currently only 'Point' is supported.","default":"Point"},"coordinates":{"items":{"type":"number"},"type":"array","title":"Coordinates","description":"The coordinates of the point in the format [longitude, latitude]."}},"type":"object","required":["coordinates"],"title":"PointGeometry","description":"A Point Geometry with list of coordinates.","example":{"coordinates":[10.7522,59.9139],"type":"Point"}},"radius":{"type":"number","title":"Radius","description":"Radius in kilometers to search for sold properties in the area.","default":1,"example":1},"days":{"type":"integer","title":"Days","description":"Last number of days to search for sold properties in the area.","default":90,"example":90}},"type":"object","required":["point"],"title":"Body_sold_information_data_map_layer_sold_information_post","example":{"point":{"coordinates":[10.7522,59.9139],"type":"Point"},"radius":1,"days":90}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/person/person-info":{"get":{"tags":["person"],"description":"Fetch data related to persons","parameters":[{"schema":{"type":"integer"},"in":"query","name":"person-id","required":false,"description":"Unique identifier for a person. \n The field is called PersonId in Matrikkelen with the Norwegian Mapping Authority"},{"schema":{"type":"string"},"in":"query","name":"person-number","required":false,"description":"For physical persons: 11 digit person number, </br> For companies: 9 digit organization number"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/person/phone-info":{"get":{"tags":["person"],"description":"Fetch phone data related to persons","parameters":[{"schema":{"type":"integer"},"in":"query","name":"person-id","required":false,"description":"Unique identifier for a person. \n The field is called PersonId in Matrikkelen with the Norwegian Mapping Authority"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/person/properties":{"get":{"tags":["person"],"description":"Fetch all the properties related to a person","parameters":[{"schema":{"type":"integer"},"in":"query","name":"person-id","required":false,"description":"Unique identifier for a person. \n The field is called PersonId in Matrikkelen with the Norwegian Mapping Authority"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/summary":{"get":{"tags":["property"],"description":"Property summary","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/distance-to-fire-station":{"get":{"tags":["property"],"description":"Fetch the closest fire station to any property and their distance","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/risk-factors":{"get":{"tags":["property"],"description":"Fetch the risk factors of any property","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/sections":{"get":{"tags":["property"],"description":"Fetch Section information of a property","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/residents":{"get":{"tags":["property"],"description":"Fetch residents on a property","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/address/search":{"get":{"tags":["property"],"description":"**DEPRECATED — duplicate.** Use GET /property/search?q=<address> (canonical). Original summary: Search for property by address","parameters":[{"schema":{"type":"string","example":"Karl Johans gate 1"},"in":"query","name":"search-term","required":false,"description":"Search Term."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"deprecated":true,"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/address/{property_id_nma}":{"get":{"tags":["property"],"description":"Get the address of a property by property id","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"path","name":"property_id_nma","required":true,"description":"Property ID NMA."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/transaction/data":{"get":{"tags":["property"],"description":"**DEPRECATED — duplicate.** Use GET /property/transactions/{nma} (hand-curated). Original summary: Retrieve Transaction Data Information","parameters":[{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"updated-start-date","required":false,"description":"The start datetime for the datetime range. Format: YYYY-MM-DDTHH:MM:SS."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"updated-end-date","required":false,"description":"The end datetime for the datetime range. Format: YYYY-MM-DDTHH:MM:SS."},{"schema":{"type":"integer"},"in":"query","name":"appearance-id-start","required":false,"description":"The start value for the range."},{"schema":{"type":"integer"},"in":"query","name":"appearance-id-end","required":false,"description":"The end value for the range."}],"deprecated":true,"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/transaction/history-persons":{"get":{"tags":["property"],"description":"Retrieve Person Data of Transaction History","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 924758716-4 / orgnummer-andelsnummer"},{"schema":{"type":"integer"},"in":"query","name":"person-id","required":false,"description":"Unique identifier for a person. \n The field is called PersonId in Matrikkelen with the Norwegian Mapping Authority"},{"schema":{"type":"string"},"in":"query","name":"person-number","required":false,"description":"For physical persons: 11 digit person number, </br> For companies: 9 digit organization number"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/transaction/information":{"get":{"tags":["property"],"description":"Retrieve information regarding properties transactions","parameters":[{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/transaction/transaction-parties-information":{"get":{"tags":["property"],"description":"Retrieve information regarding transactions buyer or seller","parameters":[{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"updated-start-date","required":false,"description":"The start datetime for the datetime range. Format: YYYY-MM-DDTHH:MM:SS."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"updated-end-date","required":false,"description":"The end datetime for the datetime range. Format: YYYY-MM-DDTHH:MM:SS."},{"schema":{"type":"integer"},"in":"query","name":"change-id-start","required":false,"description":"The start value for the range."},{"schema":{"type":"integer"},"in":"query","name":"change-id-end","required":false,"description":"The end value for the range."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/information":{"get":{"tags":["company"],"description":"**DEPRECATED — duplicate.** Use GET /company/{orgnr} (hand-curated). Original summary: Retrieve Information related to Companies","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","example":977074010},"in":"query","name":"org-id","required":false,"description":"The Number used to identify an organization"}],"deprecated":true,"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/housing-companies":{"get":{"tags":["company"],"description":"Retrieve Information related to Housing Companies","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","example":977074010},"in":"query","name":"org-id","required":false,"description":"The Number used to identify an organization"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/housing-company-units":{"get":{"tags":["company"],"description":"Retrieve Information related to Housing Company Units","parameters":[{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"string"},"in":"query","name":"property-id-nma-main","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"string"},"in":"query","name":"property-id-nma-section","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":977074010},"in":"query","name":"org-id","required":false,"description":"The Number used to identify an organization"},{"schema":{"type":"integer"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 233910997 / orgnummer-andelsnummer"},{"schema":{"type":"integer","example":286509646},"in":"query","name":"unit-id","required":false,"description":"Unique identifier for a unit (bruksenhet).   \n​  \n The field is called BruksenhetId in Matrikkelen with the Norwegian Mapping Authority.  \n​  \n Feltet heter BruksenhetId i Matrikkelen hos Kartverket."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/insurance":{"get":{"tags":["company"],"description":"Retrieve insurance information related to Companies","parameters":[{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"integer","example":977074010},"in":"query","name":"org-id","required":false,"description":"The Number used to identify an organization"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/roles":{"get":{"tags":["company"],"description":"**DEPRECATED — duplicate.** Use GET /company/{orgnr}/roles (hand-curated, path-keyed) — same PropCloud /companies/roles upstream. Original summary: Get roles of owners of a company","parameters":[{"schema":{"type":"string","example":"977074010"},"in":"query","name":"organization-number","required":false,"description":"A working example of an organization number."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"deprecated":true,"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/housing-company-accounting-statements":{"get":{"tags":["company"],"description":"Get pdf of a housing company","parameters":[{"schema":{"type":"integer","example":977074010},"in":"query","name":"org-id","required":false,"description":"The Number used to identify an organization"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/company/building-overview":{"get":{"tags":["company"],"description":"Retrieve an overview of the buildings owned by an organization","parameters":[{"schema":{"type":"string","example":"977074010"},"in":"query","name":"organization-number","required":false,"description":"The organization number for the building overview."},{"schema":{"type":"boolean","default":true},"in":"query","name":"include-building-ids","required":false,"description":"Whether to include building IDs in the response"},{"schema":{"type":"boolean","default":true},"in":"query","name":"include-building-numbers","required":false,"description":"Whether to include building numbers in the response"},{"schema":{"type":"boolean","default":true},"in":"query","name":"include-property-id-nmas","required":false,"description":"Whether to include property-id-nmas in the response"},{"schema":{"type":"boolean","default":true},"in":"query","name":"include-ufs-totals","required":false,"description":"Whether to include UFS totals in the response"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/owners/property-owners":{"get":{"tags":["property"],"description":"**DEPRECATED — duplicate.** Use GET /property/owners/{nma} (hand-curated, NMA-keyed). Original summary: Property owners","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer"},"in":"query","name":"person-id","required":false,"description":"Unique identifier for a person. \n The field is called PersonId in Matrikkelen with the Norwegian Mapping Authority"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"deprecated":true,"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/owners/housing-association-owners":{"get":{"tags":["property"],"description":"Search for owners of property which were sold using housing associations","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":286509646},"in":"query","name":"unit-id","required":false,"description":"Unique identifier for a unit (bruksenhet).   \n​  \n The field is called BruksenhetId in Matrikkelen with the Norwegian Mapping Authority.  \n​  \n Feltet heter BruksenhetId i Matrikkelen hos Kartverket."},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 924758716-4 / orgnummer-andelsnummer"},{"schema":{"type":"integer"},"in":"query","name":"person-id","required":false,"description":"Unique identifier for a person. \n The field is called PersonId in Matrikkelen with the Norwegian Mapping Authority"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/owners/encumbrances":{"get":{"tags":["property"],"description":"Fetch the encumbrances data of any property","parameters":[{"schema":{"type":"string"},"in":"query","name":"legal-type-code-name","required":false,"description":"Name of the legal type"},{"schema":{"type":"string"},"in":"query","name":"legal-right-type-code-name","required":false,"description":"Name of the legal right type"},{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 924758716-4 / orgnummer-andelsnummer"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"start-date","required":false,"description":"The start date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"end-date","required":false,"description":"The end date for the date range. Format: YYYY-MM-DD."},{"schema":{"type":"integer","default":1,"example":1},"in":"query","name":"page","required":false,"description":"The page number to fetch. Default: 1."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"updated-start-date","required":false,"description":"The start datetime for the datetime range. Format: YYYY-MM-DDTHH:MM:SS."},{"schema":{"type":"string","example":"2026-01-01"},"in":"query","name":"updated-end-date","required":false,"description":"The end datetime for the datetime range. Format: YYYY-MM-DDTHH:MM:SS."},{"schema":{"type":"integer"},"in":"query","name":"change-id-start","required":false,"description":"The start value for the range."},{"schema":{"type":"integer"},"in":"query","name":"change-id-end","required":false,"description":"The end value for the range."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/valuation/type/propcloud-value-estimate":{"get":{"tags":["valuation"],"description":"**DEPRECATED — duplicate.** Use GET /valuation/estimate/{nma} (hand-curated). Original summary: Fetched estimation of property price.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":286509646},"in":"query","name":"unit-id","required":false,"description":"Unique identifier for a unit (bruksenhet).   \n​  \n The field is called BruksenhetId in Matrikkelen with the Norwegian Mapping Authority.  \n​  \n Feltet heter BruksenhetId i Matrikkelen hos Kartverket."},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 924758716-4 / orgnummer-andelsnummer"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"deprecated":true,"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/valuation/type/propcloud-rental-estimate":{"get":{"tags":["valuation"],"description":"**DEPRECATED — duplicate.** Use GET /valuation/rental-estimate/{nma} (hand-curated). Original summary: Fetch valuation of rental estimation","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":286509646},"in":"query","name":"unit-id","required":false,"description":"Unique identifier for a unit (bruksenhet).   \n​  \n The field is called BruksenhetId in Matrikkelen with the Norwegian Mapping Authority.  \n​  \n Feltet heter BruksenhetId i Matrikkelen hos Kartverket."},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 924758716-4 / orgnummer-andelsnummer"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"deprecated":true,"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/valuation/type/rent":{"post":{"tags":["valuation"],"description":"**DEPRECATED — duplicate.** Use GET /valuation/rental-estimate/{nma} (hand-curated). Original summary: Fetch valuation of rent estimation","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"unit-id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"UNIT ID","description":"Unit ID of a property","example":11731402},"property-id-nma":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"PROPERTY ID NMA","description":"Property ID NMA of a property","example":"5059-719-105-0-0"},"floor-number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"FLOOR NUMBER","description":"Floor number of a property","example":4},"floors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"FLOORS","description":"Number of floors of a property","example":4},"built-year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"BUILT YEAR","description":"Built year of a property","example":2005},"land-area":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"LAND AREA","description":"Land area of a property","example":372},"bra":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"BRA","description":"BRA of a property","example":303},"bta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"BTA","description":"BTA of a property","example":303},"prom":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"PROM","description":"PROM of a property","example":251},"rooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"ROOMS","description":"Number of rooms of a property","example":7},"bathrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"BATHROOMS","description":"Number of bathrooms of a property","example":3},"bedrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"BEDROOMS","description":"Number of bedrooms of a property","example":5},"energy-label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"ENERGY LABEL","description":"Energy label of a property","example":"E"},"building-type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"BUILDING TYPE","description":"Building type of living units","example":"Enebolig"}},"type":"object","required":["floor-number","bra","rooms","energy-label","building-type"],"title":"ValueEstimateRequestModel","example":{"unit-id":11731402,"property-id-nma":"0301-207-80-0-0","floor-number":4,"floors":4,"built-year":2005,"land-area":372,"bra":303,"bta":303,"prom":251,"rooms":7,"bathrooms":3,"bedrooms":5,"energy-label":"E","building-type":"Enebolig"}}}}},"deprecated":true,"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/valuation/indexed-price":{"get":{"tags":["valuation"],"description":"Fetched information regarding indexed price.","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"integer","example":286509646},"in":"query","name":"unit-id","required":false,"description":"Unique identifier for a unit (bruksenhet).   \n​  \n The field is called BruksenhetId in Matrikkelen with the Norwegian Mapping Authority.  \n​  \n Feltet heter BruksenhetId i Matrikkelen hos Kartverket."},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/valuation/type/comparable-transactions":{"post":{"tags":["valuation"],"description":"Fetch valuation of comparable data","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"LATITUDE","description":"Latitude of a property","example":59.15133487209797},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"LONGITUDE","description":"Longitude of a property","example":9.661562840728426},"city-number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"CITY NUMBER","description":"city number of a property","example":"4001"},"unit-id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"UNIT NUMBER","description":"unit id of a property","example":41293132},"building-type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"BUILDING TYPE","description":"building type of living units","example":"Enebolig"},"bra":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"BRA","description":"BRA of a property","example":303},"built-year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"BUILT YEAR","description":"built year of a property","example":2005}},"type":"object","title":"ValuationComparableRequest","example":{"lat":59.911,"lon":10.735,"city-number":"4001","unit-id":41293132,"building-type":"Enebolig","bra":303,"built-year":2005}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/valuation/info/index":{"get":{"tags":["valuation"],"description":"Fetch index prices by index-id","parameters":[{"schema":{"type":"integer","example":1},"in":"query","name":"index-id","required":false,"description":"Housing price index identifier (integer). List via /valuation/info/index."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/units":{"get":{"tags":["property"],"description":"**DEPRECATED — duplicate.** Use GET /property/units/{nma} (hand-curated). Original summary: Fetch unit multiple fields","parameters":[{"schema":{"type":"integer","example":286509646},"in":"query","name":"unit-id","required":false,"description":"Unique identifier for a unit (bruksenhet).   \n​  \n The field is called BruksenhetId in Matrikkelen with the Norwegian Mapping Authority.  \n​  \n Feltet heter BruksenhetId i Matrikkelen hos Kartverket."},{"schema":{"type":"integer"},"in":"query","name":"address-id","required":false,"description":"The Number used to identify an address"},{"schema":{"type":"integer","example":284782559},"in":"query","name":"property-id","required":false,"description":"Unik identifikator for eiendommen. <br/> Feltet heter _MatrikkelenhetId_ i Matrikkelen"},{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 924758716-4 / orgnummer-andelsnummer"},{"schema":{"type":"integer"},"in":"query","name":"building-id","required":false,"description":"The Number used to identify a building"},{"schema":{"type":"number","example":80482345},"in":"query","name":"building-number","required":false,"description":"The Number used to identify a building"},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-organization-id","required":false,"description":"The organization ID used to identify a housing association"},{"schema":{"type":"number","example":986540560},"in":"query","name":"housing-company-org-id","required":false,"description":"The organization ID used to identify a housing company"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"deprecated":true,"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}},"/property/documents/sales-documents":{"get":{"tags":["property"],"description":"Fetch sales document links","parameters":[{"schema":{"type":"string","example":"0301-207-80-0-0"},"in":"query","name":"property-id-nma","required":false,"description":"Unique identifier for a property compiled from Norwegian Mapping Authority values separated by a '-'.  \n​  \n English: *'CITY_NUMBER-GROUND_NUMBER-USAGE_NUMBER-LEASE_NUMBER-SECTION_NUMBER'*  \n​  \n Norwegian: *'KOMMUNENUMMER-GÅRDSNUMMER-BRUKSNUMMER-FESTENUMMER-SEKSJONSNUMMER'*  \n​  \n Example: *'1119-26-33-0-1'*"},{"schema":{"type":"string","example":"986540560"},"in":"query","name":"housing-association-id","required":false,"description":"Unique identifier for the housing association unit, formatted as organization number-share number, i.e. 924758716-4 / orgnummer-andelsnummer"},{"schema":{"type":"integer","example":0},"in":"query","name":"batch-id","required":false,"description":"PropCloud generated batch ID for batch downloads of large datasets.  \n NB! Batch download does not work very well in the Swagger documentation UI."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"JSON response. Most endpoints wrap the payload in `{ data, meta }` where `meta` carries pagination and a timestamp; some return a domain-specific shape. Call the endpoint or check Swagger UI at `/docs` for the exact fields.","additionalProperties":true}}}}}}}},"servers":[{"url":"https://data.placepoint.no","description":"Production"},{"url":"http://localhost:3000","description":"Local dev"}],"security":[{"bearerAuth":[]}]}