API-integration for revisionsfirmaer: kom i gang med LegalDock
Lær, hvordan dit revisionsfirma integrerer LegalDock's API og begynder at generere juridiske dokumenter programmatisk. Guide med curl og TypeScript.
# API-integration for revisionsfirmaer: kom i gang med LegalDock
Moderne revisionsfirmaer digitaliserer i stigende grad. Klienter forventer hurtige svar, og de interne systemer — fra bogholderisoftware til klientportaler — skal hænge bedre sammen. Juridiske dokumenter er det næste led i den digitale kæde.
LegalDock's API giver revisionsfirmaer mulighed for at generere, udfylde og sende juridiske dokumenter programmatisk — direkte fra jeres eget system. Ingen manuel kopiering, ingen forældet Word-skabeloner, ingen printede underskrifter.
Denne guide viser dig, hvordan du integrerer LegalDock API på under en time.
---
Hvad kan LegalDock API?
LegalDock's REST API giver adgang til:
| Funktion | Beskrivelse |
|---|---|
| Dokumentgenerering | Udfyld en skabelon med felter og modtag en færdig PDF |
| Digital underskrift | Send dokumentet til underskrift via MitID |
| Webhooks | Modtag events når dokumentet underskrives, afvises eller udløber |
| Skabelonliste | Hent alle tilgængelige skabeloner og feltbeskrivelser |
| Dokumentarkiv | Hent, download og administrér oprettede dokumenter |
Alle kald sker over HTTPS. Autentificering bruger API-nøgler (Bearer token). Rate limits: 100 kald/minut på Partner Pro, 1.000 kald/minut på Partner API-planen.
---
Forudsætninger
Inden du begynder:
1. LegalDock Partner API-konto — Partner Pro eller Partner API plan ([opret her](/partner/signup))
2. API-nøgle — Hent den under Indstillinger → API → Generér nøgle
3. HTTP-klient — `curl` til test, Node.js 18+ til TypeScript-eksemplerne
---
Trin 1: Verificer forbindelsen
```bash
curl https://api.legaldock.org/v1/ping \
-H "Authorization: Bearer DIN_API_NØGLE"
```
Forventet svar:
```json
{ "status": "ok", "version": "1.0" }
```
En `401 Unauthorized`-fejl betyder, at API-nøglen er ugyldig eller udløbet. Generér en ny under Indstillinger.
---
Trin 2: Hent tilgængelige skabeloner
```bash
curl https://api.legaldock.org/v1/templates \
-H "Authorization: Bearer DIN_API_NØGLE"
```
```json
{
"templates": [
{ "id": "ansaettelseskontrakt", "name": "Ansættelseskontrakt" },
{ "id": "nda-standard", "name": "NDA – Fortrolighedsaftale" },
{ "id": "lejekontrakt-erhverv", "name": "Erhvervslejekontrakt" },
{ "id": "aktionaeroverenskomst", "name": "Aktionæroverenskomst" },
{ "id": "konsulentaftale", "name": "Konsulentaftale" }
]
}
```
Inspicér en skabelon for at se feltlisten:
```bash
curl https://api.legaldock.org/v1/templates/nda-standard \
-H "Authorization: Bearer DIN_API_NØGLE"
```
---
Trin 3: Generér et dokument
```bash
curl -X POST https://api.legaldock.org/v1/documents \
-H "Authorization: Bearer DIN_API_NØGLE" \
-H "Content-Type: application/json" \
-d '{
"templateId": "nda-standard",
"fields": {
"part1Navn": "TechStart ApS",
"part2Navn": "Udvikler A/S",
"formaal": "Drøftelse af muligt teknologisamarbejde",
"varighed": "2 år",
"dato": "2026-06-01"
},
"meta": {
"reference": "klient-456-nda-2026"
}
}'
```
Svar:
```json
{
"documentId": "doc_xyz789",
"status": "draft",
"downloadUrl": "https://api.legaldock.org/v1/documents/doc_xyz789/pdf",
"previewUrl": "https://app.legaldock.org/preview/doc_xyz789"
}
```
Tip: Brug `meta.reference` til at gemme jeres interne klient- eller sagsnummer. Det gør det muligt at finde dokumentet fra jeres eget system og koble API-svaret til den rigtige klientjournal.
---
Trin 4: Anmod om digital underskrift
```bash
curl -X POST https://api.legaldock.org/v1/documents/doc_xyz789/sign \
-H "Authorization: Bearer DIN_API_NØGLE" \
-H "Content-Type: application/json" \
-d '{
"signers": [
{ "name": "Klaus Jensen", "email": "kj@techstart.dk", "role": "party1" },
{ "name": "Sara Holm", "email": "sh@udvikler-as.dk", "role": "party2" }
],
"deadline": "2026-06-15",
"notifyOnSigned": "webhook",
"webhookUrl": "https://jeres-system.dk/webhooks/legaldock"
}'
```
LegalDock sender e-mail til begge parter med signeringslink. Begge underskriver via MitID på desktop eller mobil.
---
TypeScript-integration
Eksempel på en genbrugelig hjælpeklasse til Node.js/TypeScript:
```typescript
// src/legaldock.ts
const BASE = 'https://api.legaldock.org/v1';
interface CreateDocumentPayload {
templateId: string;
fields: Record;
reference: string;
}
interface Signer {
name: string;
email: string;
role: string;
}
export async function createDocument(
apiKey: string,
payload: CreateDocumentPayload
): Promise<{ documentId: string; downloadUrl: string }> {
const res = await fetch(`${BASE}/documents`, {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
templateId: payload.templateId,
fields: payload.fields,
meta: { reference: payload.reference },
}),
});
if (!res.ok) {
const { message } = await res.json() as { message: string };
throw new Error(`LegalDock createDocument: ${message}`);
}
return res.json() as Promise<{ documentId: string; downloadUrl: string }>;
}
export async function requestSignature(
apiKey: string,
documentId: string,
signers: Signer[],
webhookUrl: string,
deadline?: string
): Promise<{ signingSessionId: string }> {
const res = await fetch(`${BASE}/documents/${documentId}/sign`, {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
signers,
deadline,
notifyOnSigned: 'webhook',
webhookUrl,
}),
});
if (!res.ok) {
const { message } = await res.json() as { message: string };
throw new Error(`LegalDock requestSignature: ${message}`);
}
return res.json() as Promise<{ signingSessionId: string }>;
}
```
Integrer i din eksisterende kodebase:
```typescript
import { createDocument, requestSignature } from './src/legaldock';
const API_KEY = process.env.LEGALDOCK_API_KEY!;
const WEBHOOK = process.env.LEGALDOCK_WEBHOOK_URL!;
// Kaldt når revisor onboarder ny klient-medarbejder
export async function issueEmploymentContract(
employeeName: string,
employeeEmail: string,
employerName: string,
employerEmail: string,
startDate: string,
monthlySalary: number,
clientRef: string
) {
const doc = await createDocument(API_KEY, {
templateId: 'ansaettelseskontrakt',
fields: {
medarbejdernavn: employeeName,
virksomhedsnavn: employerName,
startdato: startDate,
maanesdsloenn: monthlySalary,
arbejdssted: 'Se separat bilag',
},
reference: clientRef,
});
await requestSignature(
API_KEY,
doc.documentId,
[
{ name: employeeName, email: employeeEmail, role: 'employee' },
{ name: employerName, email: employerEmail, role: 'employer' },
],
WEBHOOK,
'2026-07-01'
);
return doc.documentId;
}
```
---
Webhooks: modtag events automatisk
Undgå manuel polling — brug webhooks til at opdatere jeres system, når dokumenter underskrives.
```typescript
// Express webhook handler
import express from 'express';
import crypto from 'crypto';
const router = express.Router();
router.post('/webhooks/legaldock', express.json(), (req, res) => {
const sig = req.headers['x-legaldock-signature'] as string;
const expected = crypto
.createHmac('sha256', process.env.LEGALDOCK_WEBHOOK_SECRET!)
.update(JSON.stringify(req.body))
.digest('hex');
if (sig !== expected) {
return res.status(401).json({ error: 'Invalid signature' });
}
const { event, documentId, reference } = req.body as {
event: string;
documentId: string;
reference: string;
};
if (event === 'document.signed') {
// Opdatér klientjournal, send bekræftelse, arkivér PDF
console.log(`Underskrevet: ${documentId} (klient ref: ${reference})`);
}
res.json({ ok: true });
});
export default router;
```
---
Bedste praksis for revisionsfirmaer
Brug sandbox til test. LegalDock tilbyder et sandbox-miljø på `https://api-sandbox.legaldock.org/v1`. Brug det under integration — dokumenter tæller ikke mod kvoten og sender ikke rigtige e-mails.
Gem altid PDF lokalt. Download og arkivér PDF-filen i jeres eget system straks efter underskrift. Brug `downloadUrl` fra API-svaret.
Sæt deadline på underskriftsanmodninger. En NDA der ikke underskrives i tide skaber forvirring. Brug `deadline`-feltet til at styre forventningsafstemning.
Overvåg fejlrate. Log alle API-kald og overvåg 4xx/5xx-svar. En pludselig stigning i 429-fejl (rate limit) signalerer, at I skal opgradere planen eller implementere backoff.
---
Fejlhåndtering: reference tabel
| HTTP-kode | Årsag | Løsning |
|---|---|---|
| 400 | Ugyldige felter | Tjek feltnavne mod skabelonens spec |
| 401 | Ugyldig API-nøgle | Generér ny nøgle under Indstillinger |
| 403 | Planbegrænsning | Opgrader til Partner API |
| 404 | Ressource ikke fundet | Tjek `templateId`/`documentId` |
| 429 | Rate limit | Implementér exponential backoff |
| 500 | LegalDock serverfejl | Kontakt [support@legaldock.org](mailto:support@legaldock.org) |
---
Klar til at integrere?
Kom i gang med LegalDock API i dag:
1. [Opret en gratis partnerkonto](/partner/signup)
2. [Generér din API-nøgle](/partner/settings/api)
3. [Læs den fulde API-reference](/api/docs)
4. [Kontakt partnersupport](mailto:partner@legaldock.org)
Se også: [Hvordan revisorer automatiserer juridiske dokumenter](/blog/revisorer-automatiser-juridiske-dokumenter) — for det strategiske perspektiv.
Få mere juridisk viden
Tilmeld dig vores nyhedsbrev og bliv klogere på dansk jura.