API-reference · v1
Sløring som et API-kald
Upload et dokument, læs hvad Northdocs fandt, beslut, anvend og hent den slørede fil. Ren JSON over HTTPS, bearer-nøgler, hostet i EU.
- Basis-URL
- https://northdocs.com/api/v1
- Godkendelse
- Bearer API-nøgle
- Grænse
- 120 kald/min pr. nøgle
- Hosting
- Kun EU
Introduktion
Northdocs API er et REST API med forudsigelige URL'er, JSON-kroppe og almindelige HTTP-statuskoder. Alle stier i denne reference er relative til basis-URL'en.
Dokumenter gemmes og behandles i EU, præcis som når de uploades i appen. Hvert kald kører med rollen hos det medlem, der oprettede nøglen, så en reviewer-nøgle kan beslutte fund, men ikke uploade eller anvende.
https://northdocs.com/api/v1Godkendelse
Godkend med en API-nøgle i Authorization-headeren. Administratorer og security-rollen opretter nøgler under Indstillinger, API-nøgler. En nøgle vises én gang: gem den i jeres hemmelighedsboks med det samme.
Authorization: Bearer bd_live_3f9c...e21a
Nøgler starter med bd_live_. Læg aldrig en nøgle i en browser eller mobilapp.
En nøgle holder op med at virke, når den tilbagekaldes, eller når medlemmet, der oprettede den, forlader organisationen. Kald svarer så 401 eller 403.
curl "https://northdocs.com/api/v1/documents" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY"Scopes
Hver nøgle har scopes. Et kald uden det scope, det kræver, svarer 403. Giv hver integration det mindste sæt, den har brug for.
documents:readListe dokumenter og læse status, fund, tekst og downloads. Læser også sager og jobs.documents:writeUploade dokumenter, beslutte eller omklassificere fund og anvende. Opretter også sager.cases:readListe og læse sager.cases:writeOprette sager.jobs:readListe seneste behandlingsjobs.outbound_guardTekstsløring og de Outbound Guard-endpoints, som Outlook-tilføjelsesprogrammet bruger.
Kom i gang
Fire kald fører en PDF fra upload til sløret download. Scriptet til højre er hele forløbet i bash med curl og jq.
- 1
Upload filen. Northdocs udtrækker tekst, kører OCR hvor det er nødvendigt og finder personoplysninger.
- 2
Spørg på status, indtil den er ready_for_review, eller send resultUrl med uploadet og vent på kaldet tilbage.
- 3
Anvend. acceptAll accepterer først alle ventende fund; beslut enkelte fund før dette kald for at beholde nogle.
- 4
Hent den slørede PDF, når status er completed.
# 1. Upload
DOC=$(curl -s -X POST "https://northdocs.com/api/v1/documents" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY" \
-F "file=@contract.pdf" | jq -r .id)
# 2. Wait for review
until [ "$(curl -s "https://northdocs.com/api/v1/documents/$DOC" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY" | jq -r .status)" = "ready_for_review" ]; do
sleep 3
done
# 3. Accept every finding and redact
curl -s -X POST "https://northdocs.com/api/v1/documents/$DOC/apply" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"redact","acceptAll":true}'
# 4. Download when completed
curl -s "https://northdocs.com/api/v1/documents/$DOC/download" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY" -o contract-redacted.pdfDokumentets forløb
Et dokument går gennem disse statusser. Spørg på GET /documents/{id}, eller abonnér på webhooken document.completed.
uploaded- Gemt og venter på en worker.
extracting- Læser tekst og kører OCR på scannede sider.
detecting- Finder personoplysninger.
ready_for_review- Fundene er klar til at blive læst og besluttet.
applying- Brænder sløringen ind i filen og verificerer resultatet.
completed- Det slørede resultat kan hentes.
failed- Behandlingen stoppede. Feltet error siger hvorfor.
/documentsUpload et dokument
Uploader en fil og starter behandlingen. Send multipart/form-data med filen i feltet file. PDF, Office-dokumenter, billeder, e-mail og ren tekst understøttes.
Scopedocuments:write
Parametre
filefileformularpåkrævetFilen, der skal behandles.
caseIdstringformularSagens id.
resultUrlurlformularOffentlig HTTPS-URL, der modtager en signeret POST, når dokumentet er færdigt.
redirectUrlurlformularHvor gennemsynet i appen sender brugeren hen bagefter. Skal ligge på appens domæne.
curl -X POST "https://northdocs.com/api/v1/documents" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY" \
-F "file=@contract.pdf" \
-F "caseId=case_7Hq2"{
"id": "doc_9fK3a",
"status": "uploaded"
}/documentsListe dokumenter
Dokumenter, som nøglens ejer kan åbne, nyeste først. Filtrér på sag med caseId.
Scopedocuments:read
Parametre
caseIdstringqueryKun dokumenter i denne sag.
curl "https://northdocs.com/api/v1/documents?caseId=case_7Hq2" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY"[
{
"id": "doc_9fK3a",
"name": "contract.pdf",
"status": "ready_for_review",
"pageCount": 12,
"caseId": "case_7Hq2"
}
]/documents/{id}Hent et dokument
Status, sideantal, sag og fundet sprog for ét dokument. Spørg her, mens et dokument behandles.
Scopedocuments:read
Parametre
idstringstipåkrævetDokumentets id.
curl "https://northdocs.com/api/v1/documents/doc_9fK3a" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY"{
"id": "doc_9fK3a",
"name": "contract.pdf",
"status": "ready_for_review",
"pageCount": 12,
"caseId": "case_7Hq2",
"language": "da"
}/documents/{id}/applyAnvend sløring
Brænder accepterede fund ind i filen eller erstatter dem med konsekvente pseudonymer. Svarer 202 med det samme; status går til applying og derefter completed.
Scopedocuments:write
Parametre
idstringstipåkrævetDokumentets id.
mode"redact" | "pseudonymize"kropredact (standard) sværter værdier; pseudonymize erstatter dem konsekvent.
acceptAllbooleankropAcceptér alle ventende fund, før der anvendes.
curl -X POST "https://northdocs.com/api/v1/documents/doc_9fK3a/apply" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"redact","acceptAll":true}'{
"status": "applying"
}/documents/{id}/downloadHent resultatet
Returnerer den slørede PDF. Med format=text returneres den slørede tekst pr. side som JSON i stedet. Svarer 409, indtil sløringen er anvendt.
Scopedocuments:read
Parametre
idstringstipåkrævetDokumentets id.
format"text"queryReturnér sløret tekst som JSON i stedet for PDF'en.
curl "https://northdocs.com/api/v1/documents/doc_9fK3a/download?format=text" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY"{
"id": "doc_9fK3a",
"pages": [{ "pageNumber": 1, "text": "Lejer: [REDACTED], Nørregade 12" }],
"fullText": "Lejer: [REDACTED], Nørregade 12"
}/documents/{id}/textLæs udtrukket tekst
Rå tekst pr. side før sløring, til søgning og indeksering. Ikke en eksport, og afvist hvor organisationen begrænser adgang til uslørede dokumenter.
Scopedocuments:read
Parametre
idstringstipåkrævetDokumentets id.
curl "https://northdocs.com/api/v1/documents/doc_9fK3a/text" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY"{
"pages": [
{ "pageNumber": 1, "text": "Lejer: Jens Hansen, Nørregade 12", "ocr": false }
]
}/documents/{id}/detectionsListe fund
Alt hvad Northdocs fandt, med kategori, side, tekst og beslutning. Status possible er et usikkert forslag, der aldrig sløres, før det sættes til accepted. Værdier maskeres for roller, der ikke må se dem.
Scopedocuments:read
Parametre
idstringstipåkrævetDokumentets id.
curl "https://northdocs.com/api/v1/documents/doc_9fK3a/detections" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY"[
{
"id": "det_41xZ",
"category": "person",
"text": "Jens Hansen",
"pageNumber": 1,
"status": "pending",
"entityGroupId": "ent_02",
"pseudonym": null
}
]/documents/{id}/detections/{detectionId}Opdatér et fund
Acceptér, spring over eller nulstil ét fund, eller flyt det til en anden kategori. Reviewer-nøgler må beslutte, men ikke omklassificere.
Scopedocuments:write
Parametre
idstringstipåkrævetDokumentets id.
detectionIdstringstipåkrævetFundets id fra Liste fund.
status"pending" | "accepted" | "skipped"kropBeslutningen for dette fund.
categorystringkropFlyt fundet til en anden kategorinøgle.
curl -X PATCH "https://northdocs.com/api/v1/documents/doc_9fK3a/detections/det_41xZ" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"skipped"}'{
"ok": true
}/casesOpret en sag
Opretter en sag, der samler dokumenter. Send dens id som caseId ved upload.
Scopecases:write
Parametre
namestringkroppåkrævetSagens navn, som vises i appen.
referencestringkropJeres egen reference, for eksempel et journalnummer.
defaultMode"redact" | "pseudonymize"kropStandardtilstand ved anvendelse for dokumenter i sagen.
curl -X POST "https://northdocs.com/api/v1/cases" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Aktindsigt 2026-114","reference":"J.nr. 2026-114"}'{
"id": "case_7Hq2"
}/casesListe sager
Sager, som nøglens ejer kan åbne.
Scopecases:read
Parametre
Ingen parametre.
curl "https://northdocs.com/api/v1/cases" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY"[
{
"id": "case_7Hq2",
"name": "Aktindsigt 2026-114",
"status": "open",
"reference": "J.nr. 2026-114"
}
]/cases/{id}Hent en sag
Én sag med status og reference.
Scopecases:read
Parametre
idstringstipåkrævetSagens id.
curl "https://northdocs.com/api/v1/cases/case_7Hq2" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY"{
"id": "case_7Hq2",
"name": "Aktindsigt 2026-114",
"status": "open",
"reference": "J.nr. 2026-114"
}/jobsListe jobs
Seneste behandlingsjobs med type, status og fremdrift.
Scopejobs:read
Parametre
Ingen parametre.
curl "https://northdocs.com/api/v1/jobs" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY"[
{
"id": "job_k21P",
"kind": "process",
"status": "completed",
"documentId": "doc_9fK3a",
"progress": 100
}
]/sanitizeSlør tekst
Finder og slører eller erstatter personoplysninger i ren tekst. Intet gemmes.
Scopeoutbound_guard
Parametre
textstringkroppåkrævetTeksten, der skal sløres.
mode"redact" | "replace"kropredact (standard) sværter værdier; replace indsætter en pladsholder.
curl -X POST "https://northdocs.com/api/v1/sanitize" \
-H "Authorization: Bearer $NORTHDOCS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Ring til Jens Hansen på 20 30 40 50","mode":"redact"}'{
"cleanText": "Ring til ███████████ på ███████████",
"findings": [
{
"category": "person",
"label": "Person name",
"text": "Jens Hansen",
"start": 9,
"end": 20,
"replacement": "███████████",
"source": "regex"
},
{
"category": "phone",
"label": "Phone number",
"text": "20 30 40 50",
"start": 24,
"end": 35,
"replacement": "███████████",
"source": "regex"
}
],
"byCategory": { "person": 1, "phone": 1 },
"mode": "redact"
}Webhooks
Tilføj et endpoint under Indstillinger, Webhooks. Northdocs sender en signeret POST med en JSON-krop til jeres offentlige HTTPS-URL, når en abonneret hændelse sker.
document.completedEt dokument er færdigt med at blive anvendt, og resultatet kan hentes.outbound_guard.alertOutbound Guard stoppede eller advarede om en udgående mail.
Verificér hver levering. x-northdocs-signature er hex-HMAC SHA-256 af den rå krop med den signeringshemmelighed, der blev vist, da I tilføjede endpointet.
POST /northdocs-hook HTTP/1.1
Content-Type: application/json
x-northdocs-event: document.completed
x-northdocs-signature: 5f2c8a...e91a
{
"event": "document.completed",
"data": { "documentId": "doc_9fK3a", "mode": "redact" },
"timestamp": 1793500000000
}import { createHmac, timingSafeEqual } from "node:crypto";
export function isFromNorthdocs(rawBody: string, signature: string, secret: string) {
const expected = createHmac("sha256", secret).update(rawBody).digest("hex");
const a = Buffer.from(expected, "hex");
const b = Buffer.from(signature, "hex");
return a.length === b.length && timingSafeEqual(a, b);
}Fejl
Fejl bruger almindelige HTTP-statuskoder og en JSON-krop med en fejlbesked. Nogle har også en maskinlæsbar code.
400Et felt mangler eller er ugyldigt.401API-nøglen mangler, er forkert eller tilbagekaldt.402Abonnementet eller kvoten dækker ikke kaldet.403Scope mangler, eller ejerens rolle må ikke gøre dette.404Findes ikke, eller nøglens ejer kan ikke åbne det.409Forkert tilstand, for eksempel stadig under behandling.413Filen er for stor.415Filtypen understøttes ikke.429For mange kald. Vent og prøv igen.
HTTP/1.1 403 Forbidden
Content-Type: application/json
{
"error": "api key missing documents:write scope"
}Grænser
Hver nøgle må lave 120 kald i minuttet. Derover svarer API'et 429; vent et par sekunder og prøv igen. At spørge på ét dokument med få sekunders mellemrum ligger et godt stykke under grænsen.
Uploads tæller med i organisationens månedlige sidekvote, præcis som uploads i appen.
OpenAPI-specifikation
Hele API'et er beskrevet i et OpenAPI 3.1-dokument. Importér det i Postman eller Insomnia, eller generér en typet klient.
Mangler I et endpoint? Skriv til os fra Kontakt support i appen.
https://northdocs.com/api/v1
https://northdocs.com/api/v1/openapi.json