Støj
Façade Lden for one Danish address. This page is the agent front door. It is plain HTML.
Home · llms.txt · OpenAPI · SKILL.md · About
What this answers
One street address in. One façade road-noise level out, as Lden (day-evening-night). The call is keyless. GET and POST return the same JSON. Neither writes anything. Both may be retried.
Copenhagen official, and the Denmark-wide estimate
Inside the City of Copenhagen, a hit is status ok: one official façade Lden, a product band (green under 58 dB, yellow 58–68, red 68 and above), the source label “Københavns Kommune, beregnet vejstøj 2022 (Nord2000)”, and year 2022. An official hit wins over an estimate.
Outside Copenhagen the answer is status estimated, officialFacade: false, from the on-demand 007-traffic-diff model. The body includes the point when the model has one, the served range, and this measured error label:
Modelled estimate, not an official noise map. Independent København sample, N=200: bias +1.3 dB, MAE 4.8 dB, 41.0% within ±3 dB. It reads low on loud façades (≥68 dB truth band: bias −2.6 dB, N=50). A point below 50 dB is low confidence: on the København hold-out that band covered 50% of truths (2 of 4), against a nominal 80%. That error was measured in København only, so outside København it is an untested extrapolation.
When the model has no level, status stays outside_copenhagen and no dB is invented. A Copenhagen address with no official point is no_facade. The static indicative table is off (STOJ_SERVE_INDICATIVE is unset) and is not a result you should expect. Vejdirektoratet façade values and MST bands are not on this response.
GET
curl -sS 'https://stoj.multihead.dev/api/noise?address=Smedev%C3%A6nget%202%2C%204100%20Ringsted'
POST
curl -sS -X POST https://stoj.multihead.dev/api/noise \
-H 'content-type: application/json' \
-d '{"address":"Smedevænget 2, 4100 Ringsted"}'
Status
| HTTP | status | Meaning |
|---|---|---|
| 200 | ok | One official Copenhagen façade Lden. The product answer. An official hit wins. |
| 200 | estimated | Denmark-wide estimate outside Copenhagen. Point when present, range, error note. officialFacade is false. |
| 200 | indicative | Static table row. Served only when STOJ_SERVE_INDICATIVE is on. It is off. |
| 200 | outside_copenhagen, no_facade | Lookup finished. No official façade dB and no estimate. Do not invent a dB. Do not retry as an outage. |
| 400 | unresolved | Empty, too long (over 200 characters), or an address the parser cannot use. Fix the input. |
| 400 | error | POST body is not a JSON object. Fix the input. |
| 429 | error | Per-IP quota. Header Retry-After is seconds. Retry after that. |
| 502 | error | DAR or the Copenhagen WFS failed. Retry later. This is not “no façade”. |
| 503 | error | The rate-limit store is unavailable. Retry later. |
Attribution and licence
- @geodanmark
- Bygnings- og Boligregistret (BBR)
- Klimadatastyrelsen
- Kilde: Vejdirektoratet – www.vd.dk
- Københavns Kommune (Vejstøj 2022, Trafiktal, Trafikhastigheder)
- © OpenStreetMap contributors
- CC BY 4.0 – data bearbejdet af multihead
Geocoding uses the DAR husnummer snapshot 2026-10-04 (CC BY 4.0). Every JSON body carries the same attribution list.
Limits
- No API key and no signup on
/api/noise. - GET and POST share a per-IP quota. The default is 60 requests per minute (
STOJ_RATE_LIMIT_PER_MINUTE, 1–600). Over the quota: HTTP 429 andRetry-After. - The address query or JSON field is at most 200 characters.
POST /api/address-noiseis a separate endpoint. It requiresX-Api-Key. Keys are not self-serve. There is no paid call on the Hobby plan. Use/api/noise.
Skill
Agents that read a skill file: /SKILL.md (also apps/stoj/SKILL.md in the repo). Machine contract: /openapi.yaml.