DIGT API Integration Guide
A practical guide for integration partners using the DIGT (Digitale Sterbefall-Meldung) API.
Version: 0.1.0 Last Updated: 2026-07-21
Table of Contents
- Introduction
- Authentication
- Core Concepts
- Memento Endpoint
- Report Retrieval Endpoints
- Error Handling
- Reference
Introduction
The DIGT API enables clinical information systems (KIS) and undertaker software (Bestatter-Software) to pre-fill a digital death notification (Sterbefall-Meldung) for the civil registry office (Standesamt) via xPersonenstand integration. This API allows integration partners to:
- Create form mementos to generate pre-filled form URLs from case data
- Enable user review by staff before official submission
- Retrieve report results and status after end users submit forms to the Standesamt
Use Case
DIGT solves the digital transmission of a Sterbefall-Meldung:
- Source system (KIS / Bestatter-Software) has case data but wants staff to review and complete the form before xPersonenstand submission
- System calls API with report data as JSON, populating exactly one of the three report-type slots
- API returns an encrypted memento string and a magic link
- System uses the
magicLinkto open a pre-filled form - User reviews, completes missing info, and submits to the Standesamt
- System automatically polls for the processing status and confirmation PDF
KIS / Bestatter-Software
↓
[1] POST /api/digt/v1/memento (API user credentials)
↓
[2] Receives { "memento": "...", "magicLink": "/mtl/...?m=..." }
↓
[3] Constructs absolute URL: https://elim.vertamob.de + magicLink
↓
[4] Opens URL in browser — authenticated via MTL token
↓
End User
↓
[5] Reviews pre-filled data, completes form → submits to Standesamt
↓
KIS / Bestatter-Software (asynchronous)
↓
[6] GET /api/digt/v1/reports/{id} → status (PENDING, SUCCESS, FAILURE) + receipt PDF
Benefits:
- No direct automated submission — users maintain control and can review/correct data
- Form validation happens in browser (immediate feedback)
- Secure, encrypted mementos protect sensitive personal data
Prerequisites
Before using the API, you need:
- API User Credentials: Username and password provided by your administrator
OpenAPI Specification
The complete OpenAPI specification is available at:
https://elim.vertamob.de/api/docs/swagger-ui/index.html?urls.primaryName=DIGT
Authentication
The API uses HTTP Basic Authentication with your API user credentials (the service account provided by your administrator). End users accessing the form do not need separate credentials.
Example
curl -u "api-username:api-password" \
-X POST \
-H "Content-Type: application/json" \
-d '{"id":"DIGT-2026-001","Einrichtung":{}}' \
https://elim.vertamob.de/api/digt/v1/memento
Core Concepts
Sterbefall-Meldung and its three report types
DIGT covers three xPersonenstand message types. A single memento request wraps all three in slots, of which exactly one must be populated. The populated slot determines which HTML form variant the memento targets:
| Slot | Message type | Form / target | Reporter |
|---|---|---|---|
Einrichtung |
084020 | Sterbefallanzeige (Einrichtung) | Hospital / care facility |
Bestatter |
084021 | Sterbefallanzeige (Bestatter) | Undertaker |
Todesbescheinigung |
084040 | Leichenschau-Mitteilung | Death certificate / examination |
Populating zero or more than one slot is a validation error (400). The active slot determines which form the link opens after redemption (/digt/{084020|084021|084040}) — that target is encrypted inside the token, not part of the magicLink path itself.
Memento Pattern
A memento is an encrypted, URL-safe string that contains form pre-fill data:
- Generated from JSON report data
- Tamper-proof and URL-safe
- Used as query parameter:
?m={memento}
Magic Token Link (MTL)
The magicLink field in the API response is a server-issued, time-limited URL that:
- Authenticates the end user automatically (no login page)
- Redirects to /digt/{reportType}?m={memento} on success
- Is a relative path — prepend your instance host to make it absolute
The link itself is /mtl/{token}?m={memento}. The redirect target (/digt/{reportType}) is encrypted inside the opaque token — it is not a readable path segment.
magicLink: "/mtl/eyJ...token...?m=eyJ...memento..."
Full URL: https://elim.vertamob.de/mtl/eyJ...token...?m=eyJ...memento..."
See Magic Token Link (MTL) for security details and token lifetime.
Report ID
The id field must be unique per API user. It serves multiple purposes:
- Form pre-fill and correlation: Correlates your case data to the form
- Status retrieval key: After submission, used to retrieve delivery status via
GET /api/digt/v1/reports/{id}
Memento Endpoint
Endpoint: POST /api/digt/v1/memento
Purpose: Create an encrypted memento string and magic link to pre-fill a DIGT reporting form.
This endpoint does not submit the report — it only creates a pre-fill token for the interactive HTML form.
Request Body
The body wraps all three report types (Einrichtung, Bestatter, Todesbescheinigung). You must populate exactly one slot — it selects the target form (and thus the redirect target /digt/084020|084021|084040, encrypted in the token). Supplying zero or more than one slot returns 400 Bad Request.
Within the chosen slot, only the top-level id is mandatory; every other field is optional to allow partial pre-filling (see Formal API Definition for the complete schema).
Minimal Example (084020 — Einrichtung):
{
"id": "DIGT-2026-00001",
"Einrichtung": {}
}
Extended Example (084020 — Einrichtung):
{
"id": "DIGT-2026-00123",
"Einrichtung": {
"anzeigender": {
"nameOrganisation": "Universitätsklinikum Musterstadt",
"ansprechpartner": {
"vornamen": "Anna",
"familienname": "Schmidt"
},
"kontaktdaten": [
{ "kanal": "telefon", "kennung": "+49 30 123456" }
]
},
"verstorbener": {
"vorname": "Hans Wilhelm",
"familienname": "Mueller",
"geburtsname": "Schmidt",
"geburtstag": "1945-03-22",
"geschlecht": "maennlich",
"letzterWohnsitz": {
"strasse": "Musterstrasse 1",
"plz": "10115",
"ort": "Berlin"
}
},
"sterbefall": {
"todeszeitpunkt": {
"todestag": {
"zeitpunkt": "2026-04-12T14:30:00+02:00",
"uhrzeitExakt": true
}
},
"sterbeort": {
"strasse": "Klinikstraße",
"hausnummer": "1",
"ort": "Berlin"
}
},
"leichenID": "L-2026-04-001"
}
}
To pre-fill an undertaker form, populate Bestatter instead; for a death-certificate form, populate Todesbescheinigung. See the OpenAPI schema for the field structure of each slot.
Response
Returns a JSON object containing the encrypted memento and a ready-to-use magic link:
{
"memento": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..DGG5lQvJC8OpYrCt.Xm8YR...",
"magicLink": "/mtl/eyJ...token...?m=eyJ...memento..."
}
| Field | Type | Nullable | Description |
|---|---|---|---|
memento |
string | No | Encrypted, URL-safe string containing report data. Use as ?m={memento} query parameter. |
magicLink |
string | Yes | Relative URL for authenticated single-click access. Prepend your instance host: https://elim.vertamob.de + magicLink |
Report Retrieval Endpoints
DIGT reports are delivered asynchronously via xPersonenstand/XTA2 transport.
GET /reports — List pending report IDs
Endpoint: GET /api/digt/v1/reports
Returns an array of id strings for reports that have been submitted but not yet retrieved (unpolled). Reports disappear from this list once retrieved without ?peek=true.
Request:
curl -u "api-user:api-pass" \
https://elim.vertamob.de/api/digt/v1/reports
Response (200):
["DIGT-2026-00123", "DIGT-2026-00124"]
An empty array [] means no submissions are pending retrieval.
GET /reports/{id} — Retrieve report result
Endpoint: GET /api/digt/v1/reports/{id}
Parameters:
id(path, required)peek(query, optional):truefor non-destructive read. Default:false.
Non-destructive peek:
curl -u "api-user:api-pass" \
"https://elim.vertamob.de/api/digt/v1/reports/DIGT-2026-00123?peek=true"
Response (200 — SUCCESS):
{
"id": "DIGT-2026-00123",
"status": "SUCCESS",
"module": "DIGT",
"submittedAt": "2026-04-12T14:32:00Z",
"portal": "GOVCONNECT",
"receiptPdf": "JVBERi0xLjQK...",
"failureReason": null
}
Status semantics:
PENDING: Sent but delivery not yet confirmed. Not marked as polled.SUCCESS: Successfully delivered to receiver. ContainsreceiptPdf(base64).FAILURE: Transport failed. ContainsfailureReason.
Note: By default, reading a SUCCESS or FAILURE report is destructive (it is marked as polled and disappears from future calls unless ?peek=true is used).
Testing
The following mock IDs are reserved for testing to simulate different delivery outcomes without triggering real backend lookups or network requests:
DIGT-TEST-SUCCESS: Always returns a SUCCESS response with a mock PDF receipt.DIGT-TEST-PENDING: Always returns a PENDING response.DIGT-TEST-FAILURE: Always returns a FAILURE response with a simulated failure reason.
Error Handling
HTTP Status Codes
| Code | Status | Meaning |
|---|---|---|
| 200 | OK | Request successful |
| 400 | Bad Request | Invalid JSON, missing id, or zero / more than one report-type slot populated |
| 401 | Unauthorized | Missing or invalid API credentials |
| 404 | Not Found | Report ID does not exist |
| 410 | Gone | Report was already retrieved (use ?peek=true to avoid) |
Validation Errors
If the request data is invalid (e.g. missing id), a 400 Bad Request is returned:
{
"errors": ["id must not be null"]
}
Reference
Formal API Definition
API Endpoints Summary
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/digt/v1/memento |
Create memento |
| GET | /api/digt/v1/reports |
List pending report IDs |
| GET | /api/digt/v1/reports/{id} |
Retrieve report delivery status |
Date & Time Format
- Date: ISO 8601 format (
YYYY-MM-DD, e.g.,2026-03-22) - Date-time: ISO 8601 format (
YYYY-MM-DDThh:mm:ss±hh:mm, e.g.,2026-04-12T14:30:00+02:00)
Document Version: 0.1.0 Last Updated: 2026-07-21 API Version: v1