Graveinfo.Kobler gravere og infrastruktureiere

API-referanse

Basis-URL: https://graveinfo.no/api/v1

Autentisering og nøkler

Alle endepunkter unntatt GET /organizations/search krever en API-nøkkel i Authorization-headeren:

http
Authorization: Bearer gv_live_<64 hex-tegn>

Nøkler opprettes under API-nøkler i dashbordet av en administrator hos organisasjonen (ledningseier) eller entreprenørprofilen. Nøkkelen tilhører den organisasjonen eller entreprenøren som opprettet den, og alle kall skjer på dens vegne. Nøkkelen vises kun én gang ved opprettelse.

En entreprenør som også er registrert som ledningseier (samme organisasjonsnummer) kan bruke én og samme nøkkel mot både gravemelding- og innboks-endepunktene.

Scopes

Nøkler tildeles scopes ved opprettelse. Søk og kommunedekning krever ikke scope. Manglende scope gir HTTP 403.

gravemeldinger:writePOST /gravemeldinger og POST /gravemeldinger/{id}/send
gravemeldinger:readGET /gravemeldinger og GET /gravemeldinger/{id}
innboks:readGET /innboks
innboks:writePOST /innboks/{recipientId}/svar

Rate limiting

Grensene er per API-nøkkel og per minutt (fast vindu). Ved overskridelse svarer API-et med HTTP 429. Det sendes ingen X-RateLimit-*-headere.

GET /organizations/search20 per IP uten nøkkel, 100 med nøkkel
GET /coverageIngen grense
GET /gravemeldinger60
POST /gravemeldinger10
GET /gravemeldinger/{id}Ingen grense
POST /gravemeldinger/{id}/send5
GET /innboks60
POST /innboks/{recipientId}/svar30

Feilformat

Alle feil returneres som JSON med et error-objekt. code er en maskinlesbar SCREAMING_SNAKE_CASE-streng. field (søk) eller fields (gravemeldinger) følger med ved valideringsfeil.

json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Validation failed",
    "fields": {
      "plannedStart": "Må være i fremtiden"
    }
  }
}

Merk: 401- og 429-kodene varierer mellom endepunktgruppene (INVALID_API_KEY / UNAUTHORIZED, RATE_LIMIT_EXCEEDED / RATE_LIMIT). Sjekk HTTP-statusen, ikke koden, for disse to tilfellene.

Koordinater

Alle polygoner i API-et er GeoJSON i EPSG:4326 (WGS84) med [lengdegrad, breddegrad]. Graveinfo konverterer selv til og fra sitt interne UTM-system. Et polygon i UTM-koordinater treffer ingen kommune og gir NO_MUNICIPALITIES_FOUND.

GET/

Rotendepunkt for tjenesteoppdagelse. Returnerer navn, versjon, lenke til dokumentasjonen og en liste over de offentlige endepunktene. Krever ikke API-nøkkel.

Eksempel

http
GET /api/v1

Responsskjema (200 OK)

json
{
  "name": "Graveinfo API",
  "version": "v1",
  "documentation": "https://graveinfo.no/for-utviklere/api-referanse",
  "endpoints": [
    {
      "method": "GET",
      "path": "/api/v1/organizations/search",
      "description": "Søk etter infrastruktureiere og entreprenører."
    },
    {
      "method": "GET",
      "path": "/api/v1/coverage",
      "description": "Infrastruktureiere registrert i en gitt kommune."
    },
    {
      "method": "POST",
      "path": "/api/v1/gravemeldinger",
      "description": "Opprett en gravemelding som utkast (autoSend: true sender den)."
    }
  ]
}

Listen er forkortet. Hvert element i endpoints har method, path og description.

Søker etter ledningseiere og/eller entreprenører på navn eller organisasjonsnummer. Støtter kommunefilter og paginering. Kan kalles uten API-nøkkel (20 kall/minutt per IP) eller med nøkkel (100 kall/minutt). Krever ikke scope.

Eksempel

http
GET /api/v1/organizations/search?q=Elvia&type=owner&limit=5
Authorization: Bearer gv_live_...   (valgfritt)

Query-parametere

ParameterTypePåkrevdBeskrivelse
qstringNei*Fritekst - delstrengsøk i navn og org.nr.
orgnrstringNei*Eksakt org.nr.-oppslag (9 siffer). Er både q og orgnr satt, brukes orgnr.
typeenumNei"owner" (standard), "contractor" eller "all".
municipalitystringNei4-sifret kommunenummer. Begrenser ledningseiere til de som er registrert i kommunen. Påvirker ikke entreprenører.
limitintegerNeiMaks resultater per side. Standard: 20, maks: 100.
offsetintegerNeiHopp over N resultater. Brukes for paginering. Standard: 0.

* Uten q eller orgnr returneres en tom liste.

Responsskjema (200 OK)

json
{
  "data": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "name": "Elvia AS",
      "orgnr": "920415523",
      "type": "owner",
      "address": "Postboks 853, 0104 Oslo",
      "email": "gravemelding@elvia.no",
      "phone": null,
      "website": "https://www.elvia.no",
      "gravemottak": "api",
      "claimed": true
    }
  ],
  "meta": {
    "total": 1,
    "limit": 5,
    "offset": 0
  }
}

Feltbeskrivelser - data[]

id
uuid
Graveinfos interne ID for organisasjonen eller entreprenøren.
name
string
Registrert navn.
orgnr
string
9-sifret norsk organisasjonsnummer.
type
"owner" | "contractor"
"owner" = ledningseier, "contractor" = entreprenør.
address
string | null
Postadresse.
email
string | null
Offentlig e-postadresse.
phone
string | null
Telefonnummer.
website
string | null
Nettsted.
gravemottak
"api" | "email" | "none" | null
"api" = Graveinfo håndterer mottaket, "email" = organisasjonen mottar på e-post eller via eksternt skjema, "none" = ikke registrert. null for entreprenører.
claimed
boolean
true hvis organisasjonen har bekreftet profilen sin i Graveinfo.

Feilkoder

400INVALID_PARAMETERUgyldig verdi på ett av parameterne. Feltet er oppgitt i error.field.
401INVALID_API_KEYNøkkel oppgitt, men ugyldig.
429RATE_LIMIT_EXCEEDEDFor mange kall. Vent til neste minutt.
json
{
  "error": {
    "code": "INVALID_PARAMETER",
    "message": "type must be one of: owner, contractor, all",
    "field": "type"
  }
}
GET/coverage

Returnerer alle ledningseiere registrert i den oppgitte kommunen, med infrastrukturtyper og gravemottak. Nyttig for å bygge oversikter og for å finne hvem som er mottakere av gravemeldinger i et område. Krever API-nøkkel, men ikke scope. Ingen rate limit.

Eksempel

http
GET /api/v1/coverage?municipality=0301
Authorization: Bearer gv_live_...

Query-parametere

ParameterTypePåkrevdBeskrivelse
municipalitystringJa4-sifret kommunenummer (f.eks. 0301 for Oslo).
typestringNeiBare ledningseiere med denne infrastrukturtypen (samme vokabular som workTypes, f.eks. vann_avlop).

Responsskjema (200 OK)

json
{
  "municipality": {
    "number": "0301",
    "name": "Oslo"
  },
  "owners": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "name": "Oslo kommune VAV",
      "orgnr": "991765887",
      "infrastructureTypes": ["vann_avlop"],
      "gravemottak": "api",
      "email": "gravemelding@vav.oslo.kommune.no"
    },
    {
      "id": "7cb5ab12-8901-4de5-b3fc-1a234d56e78f",
      "name": "Elvia AS",
      "orgnr": "920415523",
      "infrastructureTypes": ["lavspenning", "hoyspenning"],
      "gravemottak": "api",
      "email": "gravemelding@elvia.no"
    }
  ],
  "total": 2
}

Feltbeskrivelser - owners[]

id
uuid
Intern ID for organisasjonen.
name
string
Navn på ledningseier.
orgnr
string
9-sifret norsk organisasjonsnummer.
infrastructureTypes
string[]
Infrastrukturtyper organisasjonen har registrert i kommunen (f.eks. vann_avlop, hoyspenning, lavspenning).
gravemottak
"api" | "email" | "none"
"api" = Graveinfo håndterer mottaket, "email" = e-post eller eksternt skjema, "none" = ikke registrert.
email
string | null
E-postadresse for gravemeldinger.

Feilkoder

400MISSING_PARAMETERmunicipality-parameteret er ikke oppgitt.
400INVALID_PARAMETERmunicipality er ikke et 4-sifret tall.
401UNAUTHORIZEDManglende eller ugyldig API-nøkkel.
404MUNICIPALITY_NOT_FOUNDKommunenummeret finnes ikke i Graveinfo.
500INTERNAL_ERRORIntern feil. Prøv igjen om noen sekunder.
GET/gravemeldinger

Lister gravemeldinger som tilhører entreprenøren nøkkelen er knyttet til, nyeste først. Krever scope gravemeldinger:read. Rate limit: 60 kall/minutt.

Eksempel

http
GET /api/v1/gravemeldinger?status=sent&limit=10
Authorization: Bearer gv_live_...

Query-parametere

ParameterTypePåkrevdBeskrivelse
statusenumNei"draft", "sent", "in_progress" eller "completed".
fromISO 8601NeiOpprettet fra og med (dato eller tidspunkt).
toISO 8601NeiOpprettet til og med (dato eller tidspunkt).
limitintegerNeiMaks resultater per side. Standard: 20, maks: 100.
offsetintegerNeiHopp over N resultater. Standard: 0.

Responsskjema (200 OK)

json
{
  "data": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "referenceNumber": "GI-2026-00042",
      "status": "sent",
      "title": "Graving Storgata 12",
      "plannedStart": "2026-10-01",
      "plannedEnd": "2026-10-14",
      "createdAt": "2026-09-15T10:00:00.000Z",
      "sentAt": "2026-09-15T10:00:01.000Z",
      "summary": {
        "total": 2,
        "responded": 1,
        "pending": 1,
        "hasConflicts": false
      }
    }
  ],
  "meta": {
    "total": 42,
    "limit": 10,
    "offset": 0
  }
}

Feltbeskrivelser - data[]

id
uuid
Gravemeldingens ID.
referenceNumber
string | null
Menneskelig lesbart referansenummer, f.eks. GI-2026-00042.
status
enum
Se statuskoder under.
title
string
Tittel på gravemeldingen.
plannedStart
date
Planlagt startdato.
plannedEnd
date | null
Planlagt sluttdato.
createdAt
ISO 8601 | null
Opprettet.
sentAt
ISO 8601 | null
Tidspunkt for sending. null for utkast.
summary
object
total, responded, pending og hasConflicts (minst én mottaker har svart "conflict").

Statuskoder

draftOpprettet, ikke sendt.
sentSendt, venter på svar.
in_progressAlle har svart, eller saken venter på kommunen.
completedGravemeldingen er klar eller arkivert.

Feilkoder

400INVALID_PARAMETERUgyldig verdi på ett av parameterne.
401INVALID_API_KEYManglende eller ugyldig API-nøkkel.
403FORBIDDENNøkkelen mangler scope gravemeldinger:read.
403MISSING_CONTRACTORNøkkelen er ikke knyttet til en registrert entreprenør.
429RATE_LIMIT_EXCEEDEDFor mange kall. Maks 60 per minutt.
POST/gravemeldinger

Oppretter en gravemelding som utkast for entreprenøren nøkkelen tilhører, og finner ledningseierne som dekker polygonet. Kommunen utledes fra polygonet. Utkastet sendes med POST /gravemeldinger/{id}/send, eller umiddelbart med autoSend: true.

Krever scope gravemeldinger:write. Nøkkelen må tilhøre, eller dele organisasjonsnummer med, en registrert entreprenør; ellers MISSING_CONTRACTOR.

Rate limit: 10 kall per minutt. Sending via /send har egen grense på 5 per minutt. Design systemet ditt for å spre sendingene over tid.

Polygon-koordinater: location er GeoJSON i WGS84 (EPSG:4326) med [lengdegrad, breddegrad]. Første og siste punkt i ringen skal være like. UTM-koordinater gir NO_MUNICIPALITIES_FOUND. Se guiden for sending av gravemeldinger.

Eksempel

http
POST /api/v1/gravemeldinger
Authorization: Bearer gv_live_...
Content-Type: application/json

{
  "title": "Graving Storgata 12",
  "description": "Legging av fiberkabel langs Storgata 12-18",
  "workTypes": ["telekommunikasjon", "grunnarbeid"],
  "location": {
    "type": "Polygon",
    "coordinates": [
      [
        [10.7522, 59.9139],
        [10.7535, 59.9139],
        [10.7535, 59.9150],
        [10.7522, 59.9150],
        [10.7522, 59.9139]
      ]
    ]
  },
  "plannedStart": "2026-10-01",
  "plannedEnd": "2026-10-14",
  "contactPerson": {
    "name": "Ola Nordmann",
    "phone": "91234567"
  },
  "autoSend": false
}

Request body-felt

title
string (påkrevd)
Kort beskrivelse av arbeidet.
location
GeoJSON Polygon (påkrevd)
Arbeidsområdet. coordinates er påkrevd; type er valgfri, men må være "Polygon" hvis satt.
plannedStart
date (påkrevd)
Planlagt startdato, YYYY-MM-DD. Dagens dato eller senere.
plannedEnd
date (påkrevd)
Planlagt sluttdato, YYYY-MM-DD. Samme dag som eller etter plannedStart.
workTypes
string[] (påkrevd)
Minst én. Gyldige verdier: telekommunikasjon, vann_avlop, hoyspenning, lavspenning, veiarbeid, grunnarbeid, fjernvarme, annet, pressing, boring.
contactPerson
object (påkrevd)
name (påkrevd), phone (påkrevd) og email (valgfritt - tas imot, men lagres ikke i dag).
description
string (valgfritt)
Utfyllende beskrivelse av arbeidet.
autoSend
boolean (valgfritt)
Standard false. true sender gravemeldingen i samme kall og returnerer /send-svaret med HTTP 201. Feiler sendingen, returneres utkastet med _warnings.

Responsskjema (201 Created)

json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "referenceNumber": "GI-2026-00042",
  "status": "draft",
  "recipients": [
    {
      "organizationId": "7cb5ab12-8901-4de5-b3fc-1a234d56e78f",
      "name": "Elvia AS",
      "status": "pending"
    },
    {
      "organizationId": "9ab12cd3-4567-8ef9-a0bc-1d234e56f78a",
      "name": "Oslo kommune VAV",
      "status": "pending"
    }
  ],
  "createdAt": "2026-09-15T10:00:00.000Z",
  "_links": {
    "self": "/api/v1/gravemeldinger/3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "send": "/api/v1/gravemeldinger/3fa85f64-5717-4562-b3fc-2c963f66afa6/send"
  }
}

Feltbeskrivelser - respons

id
uuid
Gravemeldingens ID. Brukes i /send og GET.
referenceNumber
string | null
Menneskelig lesbart referansenummer, f.eks. GI-2026-00042.
status
"draft"
Alltid "draft" uten autoSend.
recipients
object[]
Ledningseiere Graveinfo fant for polygonet (organizationId, name, status "pending"). Kan være tom; da feiler /send med NO_RECIPIENTS_FOUND.
createdAt
ISO 8601
Opprettet.
_links
object
self (GET-lenke) og send (POST-lenke for å sende utkastet).
_warnings
object[] (kun ved autoSend)
Bare til stede når autoSend: true ble bedt om og sendingen feilet. Utkastet finnes; kall /send på nytt. code er AUTO_SEND_FAILED og detail inneholder feilkroppen fra /send.

Respons med autoSend og feilet sending

json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "referenceNumber": "GI-2026-00042",
  "status": "draft",
  "recipients": [],
  "createdAt": "2026-09-15T10:00:00.000Z",
  "_links": { "self": "...", "send": ".../send" },
  "_warnings": [
    {
      "code": "AUTO_SEND_FAILED",
      "message": "Draft created but auto-send failed. Use the /send endpoint to retry.",
      "detail": {
        "error": {
          "code": "NO_RECIPIENTS_FOUND",
          "message": "Ingen ledningseiere funnet i det angitte området"
        }
      }
    }
  ]
}

Feilkoder

400INVALID_JSONKroppen er ikke gyldig JSON.
400VALIDATION_ERROREtt eller flere felt mangler eller er ugyldige. Feilmelding per felt i error.fields (title, location.coordinates, location.type, plannedStart, plannedEnd, workTypes, contactPerson.name, contactPerson.phone).
400NO_MUNICIPALITIES_FOUNDPolygonet treffer ingen norsk kommune (typisk feil koordinatsystem).
401INVALID_API_KEYManglende eller ugyldig API-nøkkel.
403INSUFFICIENT_SCOPENøkkelen mangler scope gravemeldinger:write.
403MISSING_CONTRACTORNøkkelen er ikke knyttet til en registrert entreprenør.
429RATE_LIMIT_EXCEEDEDFor mange kall. Maks 10 per minutt.
500SERVER_ERRORIntern feil. Prøv igjen om noen sekunder.
json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Validation failed",
    "fields": {
      "location.coordinates": "Required",
      "plannedStart": "Required"
    }
  }
}
GET/gravemeldinger/{id}

Returnerer full status for én gravemelding, inkludert mottakerliste og svar fra hver ledningseier. Gravemeldinger som tilhører andre gir 404. Krever scope gravemeldinger:read. Ingen rate limit.

Eksempel

http
GET /api/v1/gravemeldinger/3fa85f64-5717-4562-b3fc-2c963f66afa6
Authorization: Bearer gv_live_...

Responsskjema (200 OK)

json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "referenceNumber": "GI-2026-00042",
  "status": "sent",
  "title": "Graving Storgata 12",
  "location": {
    "type": "Polygon",
    "coordinates": [
      [[10.7522, 59.9139], [10.7535, 59.9139], [10.7535, 59.9150],
       [10.7522, 59.9150], [10.7522, 59.9139]]
    ]
  },
  "plannedStart": "2026-10-01",
  "plannedEnd": "2026-10-14",
  "createdAt": "2026-09-15T10:00:00.000Z",
  "sentAt": "2026-09-15T10:00:01.000Z",
  "recipients": [
    {
      "organizationId": "7cb5ab12-8901-4de5-b3fc-1a234d56e78f",
      "name": "Elvia AS",
      "status": "responded",
      "response": "no_conflict",
      "responseNote": "Ingen kabler i dette området.",
      "respondedAt": "2026-09-15T14:30:00.000Z",
      "hasKartblad": true,
      "kartbladUrl": "https://storage.graveinfo.no/kartblad/...?signature=..."
    },
    {
      "organizationId": "9ab12cd3-4567-8ef9-a0bc-1d234e56f78a",
      "name": "Oslo kommune VAV",
      "status": "pending",
      "response": null,
      "responseNote": null,
      "respondedAt": null,
      "hasKartblad": false,
      "kartbladUrl": null
    }
  ],
  "summary": {
    "total": 2,
    "responded": 1,
    "pending": 1,
    "hasConflicts": false
  }
}

Feltbeskrivelser - recipients[]

organizationId
uuid
Intern ID for mottakerorganisasjonen.
name
string | null
Navn på organisasjonen.
status
"pending" | "responded"
Om mottakeren har svart.
response
"no_conflict" | "conflict" | "needs_meeting" | null
"no_conflict" = ingen infrastruktur i området, "conflict" = mottakeren har infrastruktur i området, ta kontakt, "needs_meeting" = trenger befaring eller mer informasjon. null hvis ikke svart.
responseNote
string | null
Fritekstkommentar fra mottaker.
respondedAt
ISO 8601 | null
Tidspunkt for svar.
hasKartblad
boolean
Om mottakeren har lastet opp kartblad.
kartbladUrl
string | null
Signert nedlastingslenke til kartbladet, gyldig i én time. Hent detaljen på nytt for en ny lenke.

Feilkoder

401INVALID_API_KEYManglende eller ugyldig API-nøkkel.
403FORBIDDENNøkkelen mangler scope gravemeldinger:read.
404NOT_FOUNDGravemeldingen finnes ikke, eller tilhører en annen entreprenør.
POST/gravemeldinger/{id}/send

Sender et utkast til mottakerne: varsler ledningseierne, setter frister og endrer status fra draft til sent. Ingen request body. Kan bare kalles én gang per gravemelding.

Krever scope gravemeldinger:write. Rate limit: 5 kall/minutt.

Eksempel

http
POST /api/v1/gravemeldinger/3fa85f64-5717-4562-b3fc-2c963f66afa6/send
Authorization: Bearer gv_live_...

Responsskjema (200 OK)

json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "referenceNumber": "GI-2026-00042",
  "status": "sent",
  "sentAt": "2026-09-15T10:00:01.000Z",
  "recipients": [
    {
      "organizationId": "7cb5ab12-8901-4de5-b3fc-1a234d56e78f",
      "name": "Elvia AS",
      "status": "pending"
    },
    {
      "organizationId": "9ab12cd3-4567-8ef9-a0bc-1d234e56f78a",
      "name": "Oslo kommune VAV",
      "status": "pending"
    }
  ],
  "emailResults": [
    { "recipientId": "a1b2c3d4-5678-90ab-cdef-1234567890ab", "success": true },
    { "recipientId": "b2c3d4e5-6789-01bc-def0-234567890abc", "success": true }
  ],
  "_links": {
    "self": "/api/v1/gravemeldinger/3fa85f64-5717-4562-b3fc-2c963f66afa6"
  }
}

Feltbeskrivelser - respons

status
"sent"
Gravemeldingen er sendt.
sentAt
ISO 8601
Tidspunkt for sending.
recipients
object[]
organizationId, name og status ("pending" | "responded"). "responded" for mottakere Graveinfo besvarer automatisk under sendingen.
emailResults
object[]
Resultat per e-postvarsel (recipientId, success, eventuelt error). Mottakere med gravemottak via eksternt skjema får ikke e-post og er ikke med her.
_links
object
self (GET-lenke til gravemeldingen).

Feilkoder

400VALIDATION_ERRORUtkastet mangler påkrevde felt.
400NO_RECIPIENTS_FOUNDIngen ledningseiere i området.
400INVALID_PLANGravemeldingen har kostnadsfri plan og kan ikke sendes via API.
401INVALID_API_KEYManglende eller ugyldig API-nøkkel.
403INSUFFICIENT_SCOPENøkkelen mangler scope gravemeldinger:write.
403MISSING_CONTRACTORNøkkelen er ikke knyttet til en registrert entreprenør.
403CONTRACTOR_NOT_FOUNDEntreprenøren nøkkelen viser til finnes ikke lenger.
403FORBIDDENGravemeldingen tilhører en annen entreprenør.
404NOT_FOUNDGravemeldingen finnes ikke.
409INVALID_STATUSGravemeldingen er allerede sendt, eller er ikke et utkast.
409PRACTICE_NOT_SENDABLEGravemeldingen er en onboarding-øvelse og kan ikke sendes.
429RATE_LIMIT_EXCEEDEDFor mange kall. Maks 5 per minutt.
500SERVER_ERRORIntern feil. Prøv igjen om noen sekunder.
json
{
  "error": {
    "code": "INVALID_STATUS",
    "message": "Kan kun sende utkast"
  }
}
GET/innboks

For ledningseiere: gravemeldinger der organisasjonen nøkkelen tilhører er mottaker, nyeste først. Utkast og gravemeldinger med kostnadsfri plan vises ikke. Bruk recipientId til å svare med POST /innboks/{recipientId}/svar.

Krever scope innboks:read. Nøkkelen må være knyttet til en organisasjon; ellers MISSING_ORGANIZATION. Rate limit: 60 kall/minutt.

Eksempel

http
GET /api/v1/innboks?status=pending&limit=20
Authorization: Bearer gv_live_...

Query-parametere

ParameterTypePåkrevdBeskrivelse
statusenumNei"pending", "responded" eller "all" (standard).
limitintegerNeiMaks resultater per side. Standard: 20. Verdier utenfor 1-100 klippes til grensen.
offsetintegerNeiHopp over N resultater. Standard: 0.

Responsskjema (200 OK)

json
{
  "data": [
    {
      "recipientId": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
      "gravemelding": {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "referenceNumber": "GI-2026-00042",
        "title": "Graving Storgata 12",
        "plannedStart": "2026-10-01",
        "plannedEnd": "2026-10-14",
        "location": {
          "type": "Polygon",
          "coordinates": [
            [[10.7522, 59.9139], [10.7535, 59.9139], [10.7535, 59.9150],
             [10.7522, 59.9150], [10.7522, 59.9139]]
          ]
        },
        "workTypes": ["telekommunikasjon", "grunnarbeid"],
        "description": "Legging av fiberkabel langs Storgata 12-18",
        "contractor": {
          "name": "Graving AS",
          "orgnr": "987654321",
          "contactPerson": "Ola Nordmann",
          "phone": "91234567",
          "email": "post@graving.no"
        }
      },
      "status": "pending",
      "receivedAt": "2026-09-15T10:00:01.000Z"
    }
  ],
  "meta": {
    "total": 1,
    "limit": 20,
    "offset": 0
  }
}

Feltbeskrivelser - data[]

recipientId
uuid
ID for mottakerrelasjonen. Brukes i POST /innboks/{recipientId}/svar.
gravemelding
object
id, referenceNumber, title, plannedStart, plannedEnd, location (GeoJSON Polygon i WGS84), workTypes, description og contractor.
gravemelding.contractor
object | null
name, orgnr, contactPerson, phone og email for entreprenøren.
status
"pending" | "responded"
Om organisasjonen har svart.
receivedAt
ISO 8601
Tidspunkt gravemeldingen ble mottatt.

Feilkoder

400BAD_REQUESTUgyldig verdi for status.
401UNAUTHORIZEDManglende eller ugyldig API-nøkkel.
403FORBIDDENNøkkelen mangler scope innboks:read.
403MISSING_ORGANIZATIONNøkkelen er ikke knyttet til en organisasjon.
429RATE_LIMITFor mange kall. Maks 60 per minutt. Svaret har Retry-After: 60.
POST/innboks/{recipientId}/svar

For ledningseiere: registrerer svar på en mottatt gravemelding. Et nytt kall på samme recipientId overskriver forrige svar og varsler entreprenøren på nytt hvis note er satt.

Krever scope innboks:write. Rate limit: 30 kall/minutt.

Eksempel

http
POST /api/v1/innboks/a1b2c3d4-5678-90ab-cdef-1234567890ab/svar
Authorization: Bearer gv_live_...
Content-Type: application/json

{
  "response": "no_conflict",
  "note": "Ingen ledninger i dette området."
}

Request body-felt

response
enum (påkrevd)
"no_conflict" = ingen infrastruktur i graveområdet, "conflict" = vi har infrastruktur i området, ta kontakt, "needs_meeting" = trenger befaring eller mer informasjon.
note
string (valgfritt)
Fritekst til entreprenøren.
attachmentUrl
string | null (valgfritt)
Tas imot og logges, men vises ikke for entreprenøren i dag. Legg lenken i note hvis entreprenøren skal se den.

Responsskjema (200 OK)

json
{
  "recipientId": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
  "status": "responded",
  "respondedAt": "2026-09-15T14:30:00.000Z"
}

Feilkoder

400BAD_REQUESTUgyldig JSON eller ugyldig verdi for response.
401UNAUTHORIZEDManglende eller ugyldig API-nøkkel.
403FORBIDDENNøkkelen mangler scope innboks:write, eller mottakeren tilhører en annen organisasjon.
404NOT_FOUNDrecipientId finnes ikke.
429RATE_LIMITFor mange kall. Maks 30 per minutt. Svaret har Retry-After: 60.
500INTERNAL_ERRORIntern feil. Prøv igjen om noen sekunder.

Fullstendig maskinlesbar OpenAPI-spesifikasjon er publisert på https://graveinfo.no/openapi.yaml. Følg med på endringsloggen for nye tillegg.