Webhooks
Oversikt
Nasjonalbiblioteket kan sende statusoppdateringer direkte til dine systemer via webhooks. Dette lar deg motta automatiske varsler om statusendringer i innleveringer og utleveringer uten å måtte spørre vårt API kontinuerlig.
Denne dokumentasjonen beskriver hvordan du som samarbeidspartner kan sette opp HTTP-endepunkter (webhooks) som vi vil kalle for å levere statusmeldinger.
Formål:
- Varsle om statusendringer i innleveringer
- Varsle om fullførte utleveringer
- Sikre trygg og forutsigbar levering med tydelige kontrakter
Tekniske krav
Transport og format
- Protokoll: HTTPS (TLS 1.2+)
- Metode: POST
- Format: JSON (
Content-Type: application/json; charset=utf-8) - Autentisering: Bearer-token (OAuth2 Client Credentials eller statisk), eller Basic auth over HTTPS
- Responstid: Må svare innen 5 sekunder ved normal drift
- Sertifikat: Må ha gyldig TLS-sertifikat
Endepunkt-oppsett
Du må eksponere en offentlig tilgjengelig URL, for eksempel:
POST https://partner.example.com/webhooks/statusAnbefalinger:
- Bruk IP-allowlist (vi kan oppgi faste utgående IP-er ved behov)
- Implementer logging for debugging
- Sett opp monitoring og alerting
Meldingsformat
Headere
Hver webhook-forespørsel inkluderer spesielle headere:
webhook-id: 74ea5da5-df40-47e9-9d44-4040b0c292fc
webhook-timestamp: 1757458468973Feltbeskrivelser:
webhook-id: Unik meldingsID som ikke endres ved retrywebhook-timestamp: Unix timestamp i millisekunder for når meldingen ble sendt
Meldingsstruktur
Alle meldinger følger samme grunnstruktur:
{
"type": "submission.preserved",
"timestamp": "2025-08-26T14:39:53.344522+02:00",
"data": {
"contractId": "ef23",
"submissionId": "8Z7x1T9rN0Xc2B5Yq4L3zP",
"archiveId": "68b803fb25d74833747835f7"
}
}Feltbeskrivelser:
type(string): Hendelsestype (se Hendelsestyper)timestamp(string): ISO 8601-tidsstempel med tidssone for statusendringdata(object): Hendelsespesifikke data
Fremtidig kompatibilitet: Vi kan legge til nye, ikke-påkrevde felter. Ditt endepunkt bør ignorere ukjente felter for å forbli kompatibel med fremtidige versjoner.
Hendelsestyper
Submission-hendelser
Følgende hendelsestyper sendes for innleveringer:
submission.validating- Innlevering valideressubmission.queued- Innlevering i kø for prosesseringsubmission.processing- Arkivobjekt behandles av DPSsubmission.archiving- Arkivobjekt sendes til lagringsubmission.preserved- Arkivobjekt kontrollert og bevartsubmission.rejected- Feil under validering, arkivobjekt avvises
Eksempel submission-melding:
{
"type": "submission.preserved",
"timestamp": "2025-08-26T14:39:53.344522+02:00",
"data": {
"contractId": "ef23",
"submissionId": "8Z7x1T9rN0Xc2B5Yq4L3zP",
"archiveId": "68b803fb25d74833747835f7"
}
}Dissemination-hendelser
For utleveringer sendes følgende hendelsestype:
dissemination.delivered- Utlevering er klar for nedlasting
Eksempel dissemination-melding:
{
"type": "dissemination.delivered",
"timestamp": "2025-10-15T12:18:42.315+02:00",
"data": {
"archiveId": "68ee1917e2768fd730076661",
"disseminationId": "0pS8bYb6KmJoRvBtZ3Qxd1",
"objectId": "5280df44-d34e-4195-ac6f-ee96fe0e01d4",
"clientId": "client-id",
"contractId": "ef23",
"sumSizeInBytes": 215040,
"files": [
{
"downloadURL": "https://s3.nb.no/bucket/0pS8bYb6KmJoRvBtZ3Qxd1/68ee1917e2768fd730076661/metadata.tar",
"filename": "metadata.tar",
"filesize": 163840,
"expirationDate": "2025-10-16T12:18:41.919934218+02:00",
"checksum": "43943b08cbfc1748abe7b30e2ffc9963",
"checksumAlgorithm": "MD5"
},
{
"downloadURL": "https://s3.nb.no/bucket/0pS8bYb6KmJoRvBtZ3Qxd1/68ee1917e2768fd730076661/primary_20251014.tar",
"filename": "primary_20251014.tar",
"filesize": 51200,
"expirationDate": "2025-10-16T12:18:41.934462292+02:00",
"checksum": "ae393a24d6e5c0f4e0bc6d544be56570",
"checksumAlgorithm": "MD5"
}
]
}
}Vi kan avtale hvilke hendelsestyper som skal sendes varsling på basert på dine behov.
Autentisering
Bearer Token (anbefalt)
Vi støtter to typer Bearer token-autentisering:
OAuth2 Client Credentials
Vi sender POST-forespørsel til ditt token-endepunkt med
grant_type=client_credentialsVi mottar et
access_token(JWT eller opaque)Ved hvert webhook-kall sender vi headeren:
Authorization: Bearer <access_token>Vi fornyer token automatisk ved utløp. Ved 401 Unauthorized henter vi nytt token og forsøker på nytt.
Statisk API-token
Du kan utstede en lang, tilfeldig API-token som vi sender i headeren:
Authorization: Bearer <API_token>Basic Authentication
Alternativt kan du kreve HTTP Basic over HTTPS:
Authorization: Basic <base64(username:password)>Viktig: Basic auth brukes kun over sikker TLS-forbindelse.
Tilleggstiltak
- IP-allowlist: Du kan begrense trafikk til våre utgående IP-adresser
- Rate limiting: Implementer beskyttelse mot for mange forespørsler
Responskrav
Ditt endepunkt må respondere med passende HTTP-statuskoder:
Suksess
200 OKeller204 No Content– Melding mottatt og lagret/prosessering startet
Klientfeil (4xx)
401 Unauthorized– Ugyldig autentisering403 Forbidden– Manglende tilgang404 Not Found– Endepunkt ikke funnet422 Unprocessable Entity– Ugyldig meldingsformat
Serverfeil (5xx)
500 Internal Server Error– Midlertidig feil på din side502 Bad Gateway– Gateway-feil503 Service Unavailable– Tjeneste ikke tilgjengelig
Viktig: Ved 4xx-feil anser vi meldingen som permanent mislykket og prøver ikke på nytt. Ved 5xx-feil implementerer vi retry-logikk.
Responsbody er valgfri og ignoreres.
Idempotens og re-levering
Duplikathåndtering
- Vi kan sende samme melding flere ganger ved nettverksfeil eller andre problemer
- Bruk
webhook-idfra headeren som dedup-nøkkel - Implementer idempotent behandling (ingen bivirkninger ved gjentatt prosessering)
Retry-strategi
Ved ikke-suksess (ikke 2xx-status) forsøker vi igjen med eksponentiell backoff:
Backoff-sekvens: 30s → 1m → 2m → 4m → 8m → 16m → 32m → 1t → 2t → 4t → 8t → 16t → deretter hvert døgn
Maksimal varighet: 5 dager total retry-periode
Etter maksimal tidsvindu markeres hendelsen som ikke-levert. Vi kan eventuelt sende en manuell rapport om mislykkede leveringer.
Feilsøking
Vanlige problemer
- Timeout-feil: Sørg for at endepunktet svarer innen 5 sekunder
- Sertifikatfeil: Verifiser at TLS-sertifikatet er gyldig og riktig konfigurert
- Autentiseringsfeil: Sjekk at Bearer token eller Basic auth er riktig implementert
- Duplikater: Implementer deduplisering basert på
webhook-id
Støtte
For spørsmål om webhook-oppsett eller problemer med leveringer, kontakt teamet for digital bevaring ved Nasjonalbiblioteket.
Vi kan også hjelpe med:
- Testing av webhook-endepunktet ditt
- Oppgi faste IP-adresser for allowlisting
- Feilsøking av leveringsproblemer