{"openapi":"3.0.3","info":{"title":"Placepoint Unified API","description":"Unified gateway for Norwegian property, company, and geospatial data","version":"0.1.0"},"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","energy:read":"Energy certificates A-G","search:read":"Unified search","analysis:read":"Area aggregates, transactions, market activity","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.","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"version":{"type":"string"},"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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/specs/{product}/ai-context.md":{"get":{"tags":["specs"],"parameters":[{"schema":{"type":"string","example":"property"},"in":"path","name":"product","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/auth/me":{"get":{"tags":["auth"],"description":"Return the calling token's identity + customer record summary (free tier shows daily limit).","responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/company/{id}":{"get":{"tags":["company"],"parameters":[{"schema":{"type":"string","example":"977074010"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/company/{id}/roles":{"get":{"tags":["company"],"parameters":[{"schema":{"type":"string","example":"977074010"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/property/search/landlord-result":{"post":{"tags":["property"],"description":"Clicking a landlord search result","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/property/transaction/get-cadastre-transactions-summary":{"post":{"tags":["property"],"description":"Property panel load","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/company/get-company-portfolio-tree":{"post":{"tags":["company"],"description":"Landlord – Portefølje tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/company/tenant/tenant-data":{"post":{"tags":["company"],"description":"Clicking tenant in search results","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/company/tenant-filter-search-summary":{"post":{"tags":["company"],"description":"Filter panel – Leietakere tab","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/property/property-filter-search-summary":{"post":{"tags":["property"],"description":"Filter panel – Eiendommer tab (count)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/property/property-filter-search":{"post":{"tags":["property"],"description":"Filter panel apply (map view, returns points)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/property/filter-search-properties":{"post":{"tags":["property"],"description":"Filter list view (paginated rows)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/listings/key-word-analysis":{"post":{"tags":["listings"],"description":"Fetch key word analysis for a given property","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/geo/market-activity/summary":{"post":{"tags":["geo"],"description":"Fetch market activity summary for a specific area.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/geo/chart/number-of-transaction":{"post":{"tags":["geo"],"description":"Fetch market activity summary for a specific area.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/geo/chart/property-type":{"post":{"tags":["geo"],"description":"Fetch market activity summary for a specific area.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/geo/sold-information":{"post":{"tags":["geo"],"description":"Fetch information regarding properties that were sold in recent days","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":{"type":"object","additionalProperties":true,"example":{}}}}},"deprecated":true,"responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/valuation/type/comparable-transactions":{"post":{"tags":["valuation"],"description":"Fetch valuation of comparable data","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"example":{}}}}},"responses":{"200":{"description":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}},"/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":"Default Response"}}}}},"servers":[{"url":"https://data.placepoint.no","description":"Production"},{"url":"http://localhost:3000","description":"Local dev"}],"security":[{"bearerAuth":[]}]}