Get notified straight away
Create, list and delete subscriptions to changes for a property or a company, delivered as signed CloudEvents webhooks to a URL you supply yourself.
Nøkkelen virker i dag på Leietaker-API og dagens Data API; Placepoint API godtar samme nøkkel når det lanseres.
Prøv med et ekte bygg: Oslo S, Jernbanetorget 1
- Trial key with GitHub in under a minute
- Signed webhooks
- CloudEvents 1.0
- At-least-once delivery
- Idempotent creation
ℹ️ The endpoint responds once Placepoint API has launched. The contract below is final; the Tenant API already responds.
From change to alert
These calls answer the question of how a system gets notified when something actually changes, instead of polling an object again every hour. Banks following up mortgage security need an alert when an owner or an encumbrance changes, managers need an alert when a new transaction is registered on a property in the portfolio, and systems monitoring many companies at once avoid fetching each company again just to find out that nothing has happened.
A subscription targets either a property or a company plus a list of event types, for example OWNER_CHANGED or TRANSACTION_REGISTERED. Each event is delivered as a signed CloudEvents 1.0 webhook, and delivery is at-least-once, so the receiver must handle the same id arriving more than once.
Idempotent creation
createSubscriptionrequires anIdempotency-Keyheader, so a retry of the same creation gives the same response for 24 hours instead of a duplicate subscription.Signed and verifiable
Every webhook carries thePlacepoint-Signatureheader, to verify with HMAC before you trust the content.At-least-once, handle duplicates
A failed attempt is retried for up to 24 hours, so the sameidcan arrive more than once on the receiving side.
Fields that actually tell you something
Three calls cover the whole life cycle of a subscription, all with the subscriptions.write scope.
Create a subscription.
/subscriptionscurl -X POST "https://data.placepoint.no/subscriptions" \
-H "Authorization: Bearer $TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"target":{"kind":"PROPERTY","country":"NO","cadastreId":"0301-207-76-0-0"},"events":["OWNER_CHANGED","TRANSACTION_REGISTERED"],"webhookUrl":"https://example.com/webhooks/placepoint","secret":"whsec_REPLACE_WITH_32_RANDOM_CHARS"}'
svar · 201
{
"id": "sub_9f2c1a",
"target": {
"kind": "PROPERTY",
"country": "NO",
"cadastreId": "0301-207-76-0-0"
},
"events": [
"OWNER_CHANGED",
"TRANSACTION_REGISTERED"
],
"webhookUrl": "https://example.com/webhooks/placepoint",
"status": "ACTIVE",
"createdAt": "2026-09-07T10:15:00Z"
}
List your own subscriptions
listSubscriptions shows your own active and paused subscriptions.
/subscriptionscurl -X GET "https://data.placepoint.no/subscriptions" \
-H "Authorization: Bearer $TOKEN"
svar · 200
{
"items": [
{
"id": "sub_9f2c1a",
"target": {
"kind": "PROPERTY",
"country": "NO",
"cadastreId": "0301-207-76-0-0"
},
"events": [
"OWNER_CHANGED",
"TRANSACTION_REGISTERED"
],
"webhookUrl": "https://example.com/webhooks/placepoint",
"status": "ACTIVE",
"createdAt": "2026-09-07T10:15:00Z"
}
]
}
Delete a subscription
deleteSubscription stops delivery immediately.
/subscriptions/{subscriptionId}curl -X DELETE "https://data.placepoint.no/subscriptions/sub_9f2c1a" \
-H "Authorization: Bearer $TOKEN"
A delivered event looks like this:
{
"specversion": "1.0",
"type": "no.placepoint.property.owner_changed",
"source": "https://data.placepoint.no/subscriptions/sub_9f2c1a",
"id": "evt_4b2a1c",
"time": "2026-09-07T10:15:00Z",
"datacontenttype": "application/json",
"data": {
"country": "NO",
"cadastreId": "0301-208-15-0-0",
"changedField": "owners"
}
}
Verify the signature in the Placepoint-Signature: t=<unix>,v1=<hex> header before you trust the content:
const crypto = require("node:crypto");
function isValid(header, rawBody, secret) {
const [t, v1] = header.split(",").map((p) => p.split("=")[1]);
const expected = crypto
.createHmac("sha256", secret)
.update(`${t}.${rawBody}`)
.digest("hex");
return crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}
Three steps to your first response
Log in with GitHub
One click, under a minute, no payment card. The key comes back to this page.Call the endpoint
The curl above fills in with your key once you are logged in.createSubscriptionneeds a target (property or company), event types and anIdempotency-Key.Use the response
Verify the signature inPlacepoint-Signaturewith your secret before you trust the content, using the function in the example above.
Data and sources
The alerts are triggered by the same changes that the rest of the API exposes: change of owner, new transaction and equivalent events on the property or company the subscription covers.
See also
Questions and answers
What happens if I send the same creation twice?
Idempotency-Key header makes a retry safe: the same key within 24 hours returns the same response instead of a new subscription.Can the same event arrive several times?
id arriving more than once.How do I verify that a webhook really comes from Placepoint?
Placepoint-Signature: t=<unix>,v1=<hex> header carries an HMAC signature over the timestamp and body. Compute the same HMAC with your secret and compare, as in the example above.Which event types can I subscribe to?
OWNER_CHANGED and TRANSACTION_REGISTERED are the core, with more event types on property and company as the API is built out.