Slå opp ledningseiere i din kommune
Graveinfo har et register over infrastruktureiere og hvilke kommuner de er aktive i. Denne guiden viser hvordan du bruker coverage-API og organisasjonssøk for å finne de rette eierne og forstå hvordan de håndterer gravemeldinger.
Hva du trenger
- ✓En API-nøkkel med scope organizations:read.
- ✓Kommunenummeret (4 siffer) for kommunen du vil undersøke.
Finner du ikke kommunenummeret ditt? Se Kartverkets liste eller søk på kommunenavnet.
Hent alle eiere i en kommune med GET /coverage
Endepunktet returnerer alle infrastruktureiere registrert for den oppgitte kommunen, med kontaktinfo og infrastrukturtyper:
# Alle infrastruktureiere i Oslo (0301)
curl "https://graveinfo.no/api/v1/coverage?municipality=0301" \
-H "Authorization: Bearer $GRAVEINFO_API_KEY"
# Filtrer på infrastrukturtype
curl "https://graveinfo.no/api/v1/coverage?municipality=0301&type=vann_avlop" \
-H "Authorization: Bearer $GRAVEINFO_API_KEY"{
"municipality": { "number": "0301", "name": "Oslo" },
"owners": [
{
"id": "org_...",
"name": "Oslo VAV",
"orgnr": "970205420",
"infrastructureTypes": ["vann_avlop"],
"gravemottak": "api",
"email": "gravemottak@oslo.kommune.no"
},
{
"id": "org_...",
"name": "Hafslund Nett AS",
"orgnr": "980489698",
"infrastructureTypes": ["lavspenning", "hoyspenning"],
"gravemottak": "api",
"email": "gravemottak@hafslundnett.no"
}
],
"total": 2
}Søk etter spesifikke eiere med GET /organizations/search
Bruk organisasjonssøket når du kjenner navn eller organisasjonsnummer, eller vil kombinere fritekst med kommunefilter:
# Søk etter infrastruktureiere med navn i Oslo
curl "https://graveinfo.no/api/v1/organizations/search?q=vann&type=owner&municipality=0301" \
-H "Authorization: Bearer $GRAVEINFO_API_KEY"
# Oppslag på organisasjonsnummer
curl "https://graveinfo.no/api/v1/organizations/search?orgnr=970205420" \
-H "Authorization: Bearer $GRAVEINFO_API_KEY"Forstå gravemottak-feltet
Feltet gravemottak forteller deg om eieren er Graveinfo-kunde og hvordan de håndterer innkommende gravemeldinger. Det er viktig for å forstå om automatisering er mulig:
// gravemottak-feltet forteller deg hvordan eieren håndterer gravemeldinger:
//
// "api" → Eieren er Graveinfo-kunde og håndteres automatisk via plattformen.
// Gravemeldinger sendes digitalt og eieren svarer via Graveinfo.
//
// "email" → Eieren mottar varsel på e-post og svarer manuelt.
//
// "none" → Eieren er registrert men har ikke konfigurert gravemottak.
// Graveinfo håndterer kontakten på vegne av eieren.
const coverage = await getCoverage('0301');
for (const owner of coverage.owners) {
if (owner.gravemottak === 'api') {
console.log(`${owner.name}: digitalt mottak via Graveinfo`);
} else if (owner.gravemottak === 'email') {
console.log(`${owner.name}: e-postvarsel til ${owner.email}`);
}
}Bygg en kommunematrise
Vil du ha oversikt over eiere på tvers av kommuner? Loop over kommunenumrene:
// Bygg en fullstendig kommunematrise
const municipalities = [
{ number: '0301', name: 'Oslo' },
{ number: '4601', name: 'Bergen' },
{ number: '1201', name: 'Stavanger' },
{ number: '5001', name: 'Trondheim' },
];
const matrix: Record<string, string[]> = {};
for (const mun of municipalities) {
const coverage = await getCoverage(mun.number);
matrix[mun.name] = coverage.owners.map((o) => o.name);
console.log(`${mun.name}: ${coverage.total} eiere`);
}
// Finn eiere som er i alle kommuner
const allOwnerNames = Object.values(matrix).flat();
const ownerCounts = allOwnerNames.reduce((acc, name) => {
acc[name] = (acc[name] ?? 0) + 1;
return acc;
}, {} as Record<string, number>);
const nationalOwners = Object.entries(ownerCounts)
.filter(([, count]) => count === municipalities.length)
.map(([name]) => name);
console.log('Eiere i alle kommuner:', nationalOwners);Komplett Python-eksempel
import os
import requests
GRAVEINFO_API_KEY = os.environ["GRAVEINFO_API_KEY"]
BASE_URL = "https://graveinfo.no/api/v1"
def get_coverage(municipality_number: str, infra_type: str | None = None) -> dict:
"""Hent infrastruktureiere for en gitt kommune."""
params: dict = {"municipality": municipality_number}
if infra_type:
params["type"] = infra_type
response = requests.get(
f"{BASE_URL}/coverage",
params=params,
headers={"Authorization": f"Bearer {GRAVEINFO_API_KEY}"},
timeout=10,
)
response.raise_for_status()
return response.json()
def search_organizations(query: str = "", orgnr: str = "", **kwargs) -> dict:
"""Søk etter organisasjoner."""
params: dict = {**kwargs}
if query:
params["q"] = query
if orgnr:
params["orgnr"] = orgnr
response = requests.get(
f"{BASE_URL}/organizations/search",
params=params,
headers={"Authorization": f"Bearer {GRAVEINFO_API_KEY}"},
timeout=10,
)
response.raise_for_status()
return response.json()
# Eksempel: hent alle vann/avløp-eiere i Bergen
coverage = get_coverage("4601", infra_type="vann_avlop")
print(f"Vann/avløp-eiere i {coverage['municipality']['name']}:")
for owner in coverage["owners"]:
print(f" {owner['name']} ({owner['orgnr']}) - {owner['gravemottak']}")
# Eksempel: finn Lyse Energi via organisasjonsnummer
result = search_organizations(orgnr="982257660")
if result["data"]:
org = result["data"][0]
print(f"Fant: {org['name']} - gravemottak: {org['gravemottak']}")Infrastrukturtyper
Bruk disse verdiene i type-parameteren på /coverage:
telekommunikasjonvann_avlophoyspenninglavspenningveiarbeidgrunnarbeidfjernvarmeannetKlar til å sende gravemeldinger basert på denne informasjonen?
Guide: Send gravemelding →