What answers today
This guide documents the Placepoint API contract: /properties/{country}/{cadastreId} and its siblings. The host serves that contract from the facade launch onward. Until then data.placepoint.no answers on the product routes below, and a trial key reaches them today.
Three of them need no key at all, so they are the fastest way to see whether your setup works.
Without a key
# every product, its base path, its scope and its own spec
curl https://data.placepoint.no/discovery/
# the OpenAPI 3.1 spec for one product
curl https://data.placepoint.no/specs/property/openapi.json
# what an id looks like in each register, with examples
curl https://data.placepoint.no/reference/ids
# liveness
curl https://data.placepoint.no/health
/discovery/ is the authoritative list: it names every product, whether it is live or in beta, the scope a token needs, and a /specs/<product>/ai-context.md written for a model rather than a person. Read it before you hard-code anything from this page.
| Product | Base path | Status | Scope |
|---|---|---|---|
| Eiendomsdata | /property | live | property:read |
| Selskapsdata | /company | live | company:read |
| Verdivurdering | /valuation | live | valuation:read |
| Annonser | /listings | live | listings:read |
| Risiko | /risk | live | risk:read |
| Geodata og kart | /geo | live | geo:read |
| Unified søk | /search | live | search:read |
| Eierskap og reelle rettighetshavere | /person | beta | person:read |
| Reguleringsplaner | /plans | beta | plans:read |
| Svenske eiendommer | /se/properties | beta | se-properties:read |
| Svenske selskaper | /se/companies | beta | se-companies:read |
Product names are Norwegian because the API returns them that way.
With a trial key
Sign in with GitHub on any docs.placepoint.no/api page, set the key as TOKEN, and these answer:
# your token: its scopes and what it is allowed to reach
curl https://data.placepoint.no/auth/me -H "Authorization: Bearer $TOKEN"
# the tenants on one property, the route behind Leietaker-API
curl https://data.placepoint.no/properties/0301-209-369-0-0/tenants \
-H "Authorization: Bearer $TOKEN"
# resolve a free-text property or company reference to an id
curl "https://data.placepoint.no/resolve/property?q=Tordenskiolds%20gate%202" \
-H "Authorization: Bearer $TOKEN"
Every response is { "data": ..., "meta": { "page", "pageSize", "total" } }, and paging is ?page=1&pageSize=25 with 100 as the maximum. That is the current envelope, not the one in Pagination and filtering, which describes the contract.
How the two relate
| Product routes (today) | Placepoint API (contract) | |
|---|---|---|
| Path | /property/..., /company/..., /se/... | /properties/{country}/{cadastreId}/... |
| Country | Norway on the Norwegian routes, Sweden under /se/ | one path, country as a parameter |
| Spec | /specs/<product>/openapi.json, one per product | one spec, the reference |
| Key | the same trial key | the same trial key |
An integration you write against a product route keeps working; the contract is additive on top of it. If you are starting now and can wait for the facade, write against the contract and use the product routes to see real payloads meanwhile.
Checking a route before you build on it
ops/api-daily-sweep calls every route each morning and records whether it answered with data, answered empty, is broken, or needs an enterprise agreement. The four filter-search routes were withdrawn on 2026-09-15, because the backend behind them answered 500 whatever the input. Two address routes answered empty as of 2026-09-10. One more is worth knowing about before you call it: POST /geo/market-activity/summary answers, but with tens of thousands of rows in a single 22 MB response over 30 seconds or so, and it does not page. This repo keeps that measurement in scripts/api-examples/live-surface.json, and npm --prefix scripts run check:api-examples fails when a runnable example in these docs points at a route the sweep found broken or absent. Ask your contact at Placepoint for the current sweep if a route you need is not answering.