Skip to content

210 × 297 mm

HR & employment

Arbeitszeugnis (employment reference)

A German qualified employment reference on letterhead: the template writes the opening, the overall rating, the conduct sentence and the closing formula from the rating and the reason for leaving, in the right grammatical forms, switches to an interim reference with one field, and ends with two signature lines.

A4 portraitLocale de-DEHTML + JinjaHeader & footer

Opens Dynamic Document API with this template preloaded in a free workspace.

Template language features

  • Loops
  • Conditionals
  • Macros
  • Filters
  • Date formatting
  • Header & footer
  • Page numbers
  • signature

Filters such as format_currency and qrcode are described in the template language reference.

Variables

Derived from the sample data: 7 top-level fields, 38 paths in total. Send the same shape as data.

PathTypeExample
companyobject
company.namestring"Sternkopf Logistiksoftware GmbH"
company.short_namestring"Sternkopf"
company.streetstring"Ganghoferstraße 68"
company.postcodestring"80339"
company.citystring"München"
company.phonestring"+49 89 99998 020"
company.emailstring"personal@sternkopf.example.com"
company.websitestring"sternkopf.example.com"
company.registerstring"Amtsgericht München, HRB 123456"
company.managing_directorsstring"Katharina Lenz, Dr. Malte Ehrhardt"
company.descriptionstring"Die Sternkopf Logistiksoftware GmbH entwickelt…"
referenceobject
reference.typestring"final"
reference.placestring"München"
reference.datedate"2026-09-30"
reference.ratingstring"sehr gut"
reference.leaving_reasonstring"own_request"
reference.interim_occasionstring""
employeeobject
employee.salutationstring"Herr"
employee.first_namestring"Jonas"
employee.last_namestring"Albrecht"
employee.academic_titlestring""
employee.date_of_birthdate"1991-03-14"
employee.place_of_birthstring"Regensburg"
employmentobject
employment.start_datedate"2021-04-01"
employment.end_datedate"2026-09-30"
employment.positionstring"Senior Data Analyst"
employment.departmentstring"Business Intelligence"
employment.summarystring"Herr Albrecht verantwortete in unserem Team Bu…"
employment.dutiesarray<string> · 7"Aufbau und Weiterentwicklung des zentralen Ken…"
assessmentarray<string> · 4"Herr Albrecht verfügt über ein umfassendes und…"
behaviour_notestring"Wegen seiner offenen und hilfsbereiten Art war…"
signatoriesarray<object> · 2
signatories[].namestring"Katharina Lenz"
signatories[].titlestring"Geschäftsführerin"

Sample data

Fictional records used for previews. Replace them with your own data when you call the API.

data.json
{
  "company": {
    "name": "Sternkopf Logistiksoftware GmbH",
    "short_name": "Sternkopf",
    "street": "Ganghoferstraße 68",
    "postcode": "80339",
    "city": "München",
    "phone": "+49 89 99998 020",
    "email": "personal@sternkopf.example.com",
    "website": "sternkopf.example.com",
    "register": "Amtsgericht München, HRB 123456",
    "managing_directors": "Katharina Lenz, Dr. Malte Ehrhardt",
    "description": "Die Sternkopf Logistiksoftware GmbH entwickelt Software für die Tourenplanung und Lagersteuerung mittelständischer Speditionen und beschäftigt an den Standorten München und Augsburg rund 140 Mitarbeiterinnen und Mitarbeiter."
  },
  "reference": {
    "type": "final",
    "place": "München",
    "date": "2026-09-30",
    "rating": "sehr gut",
    "leaving_reason": "own_request",
    "interim_occasion": ""
  },
  "employee": {
    "salutation": "Herr",
    "first_name": "Jonas",
    "last_name": "Albrecht",
    "academic_title": "",
    "date_of_birth": "1991-03-14",
    "place_of_birth": "Regensburg"
  },
  "employment": {
    "start_date": "2021-04-01",
    "end_date": "2026-09-30",
    "position": "Senior Data Analyst",
    "department": "Business Intelligence",
    "summary": "Herr Albrecht verantwortete in unserem Team Business Intelligence die Auswertung von Transport- und Lagerdaten für interne Fachbereiche und für unsere Kunden. Seit dem 1. Januar 2024 leitete er zusätzlich ein Team von drei Analystinnen und Analysten.",
    "duties": [
      "Aufbau und Weiterentwicklung des zentralen Kennzahlensystems für Liefertermintreue, Auslastung und Kosten je Sendung",
      "Konzeption von Dashboards für Geschäftsführung, Vertrieb und Kundenbetreuung",
      "Modellierung und Pflege der Datenstrecken aus Telematik-, Lager- und ERP-Systemen",
      "Prognosemodelle für Sendungsmengen als Grundlage der Personal- und Fahrzeugplanung",
      "Beratung von Kunden bei der Einführung unserer Auswertungsmodule",
      "Fachliche und disziplinarische Führung von drei Mitarbeitenden",
      "Schulungen zur Datenkompetenz für Kolleginnen und Kollegen anderer Abteilungen"
    ]
  },
  "assessment": [
    "Herr Albrecht verfügt über ein umfassendes und fundiertes Fachwissen in Statistik, Datenmodellierung und Visualisierung, das er stets sicher und zielgerichtet in der Praxis einsetzte. In neue Werkzeuge und Methoden arbeitete er sich schnell und gründlich ein; so führte er 2023 aus eigener Initiative eine automatisierte Prüfung unserer Datenqualität ein.",
    "Er arbeitete stets äußerst selbständig, sorgfältig und strukturiert. Auch unter hohem Termindruck behielt er den Überblick und lieferte Ergebnisse von durchweg hoher Qualität. Seine Analysen waren präzise, nachvollziehbar und auch für Fachfremde verständlich aufbereitet.",
    "Besonders hervorzuheben ist das von ihm entwickelte Prognosemodell für Sendungsmengen, mit dem drei Kunden ihre Fahrzeugplanung messbar verbessert haben. Im eigenen Haus verkürzte sein Kennzahlensystem die monatliche Berichterstellung von vier Arbeitstagen auf einen.",
    "Als Teamleiter führte Herr Albrecht seine Mitarbeitenden stets fair, motivierend und mit klaren Zielen. Er förderte ihre fachliche Entwicklung gezielt und genoss im Team hohe Anerkennung."
  ],
  "behaviour_note": "Wegen seiner offenen und hilfsbereiten Art war er ein gefragter Ansprechpartner und trug wesentlich zu einer vertrauensvollen Zusammenarbeit über Abteilungsgrenzen hinweg bei.",
  "signatories": [
    { "name": "Katharina Lenz", "title": "Geschäftsführerin" },
    { "name": "Tobias Wenger", "title": "Leiter Personal" }
  ]
}

Source

The body markup with Jinja, the stylesheet placed in <head> and the header and footer settings.

{#- Qualifiziertes Arbeitszeugnis (German employment reference). `reference.type` switches between a final reference
    ("final", past tense, leaving sentence) and an interim one ("interim", present tense). The opening, the overall
    rating, the conduct sentence and the closing formula are written by the template from `reference.rating`
    ("sehr gut", "gut" or "befriedigend") and `reference.leaving_reason`, in the grammatical forms for
    "Herr", "Frau" or, for any other salutation, the person's name. Sample wording only, not legal advice. -#}
{%- set loc = "de-DE" -%}
{%- set final = reference.type != "interim" -%}
{%- set prefix = (employee.academic_title ~ " ") if employee.academic_title else "" -%}
{%- set full_name = prefix ~ employee.first_name ~ " " ~ employee.last_name -%}
{%- set forms = {
  "Herr": {"title": "Herr", "title_dat": "Herrn", "Nom": "Er", "dat": "ihm", "acc": "ihn", "poss": "seine", "poss_pl_dat": "seinen", "Poss_n": "Sein"},
  "Frau": {"title": "Frau", "title_dat": "Frau", "Nom": "Sie", "dat": "ihr", "acc": "sie", "poss": "ihre", "poss_pl_dat": "ihren", "Poss_n": "Ihr"}
} -%}
{%- set f = forms[employee.salutation] if employee.salutation in forms else {"title": "", "title_dat": "", "Nom": full_name, "dat": "", "acc": full_name, "poss": "die", "poss_pl_dat": "den", "Poss_n": "Das"} -%}
{%- set short_name = (f.title ~ " " ~ prefix ~ employee.last_name) if f.title else full_name -%}
{%- set short_name_dat = (f.title_dat ~ " " ~ prefix ~ employee.last_name) if f.title else full_name -%}
{%- set dat = (" " ~ f.dat) if f.dat else "" -%}
{%- set ratings = {
  "sehr gut": {"work": "stets zu unserer vollsten Zufriedenheit", "conduct": "stets vorbildlich"},
  "gut": {"work": "stets zu unserer vollen Zufriedenheit", "conduct": "stets einwandfrei"},
  "befriedigend": {"work": "zu unserer vollen Zufriedenheit", "conduct": "einwandfrei"}
} -%}
{%- set rating = ratings[reference.rating] if reference.rating in ratings else ratings["gut"] -%}
{%- set reasons = {
  "own_request": "auf eigenen Wunsch",
  "mutual": "im besten gegenseitigen Einvernehmen",
  "fixed_term": "mit Ablauf des befristeten Arbeitsvertrags",
  "operational": "aus betriebsbedingten Gründen"
} -%}
{%- set reason = reasons[reference.leaving_reason] if reference.leaving_reason in reasons else "" -%}

{%- macro day(value) -%}{{ value | format_date("long", loc) }}{%- endmacro -%}

<header class="letterhead">
  <div class="brand">
    <svg viewBox="0 0 44 44" aria-hidden="true">
      <circle cx="22" cy="22" r="21" fill="#1f4e79"/>
      <path d="M22 7l3.6 10.4L36 22l-10.4 3.6L22 37l-3.6-11.4L8 22l10.4-4.6z" fill="#ffffff"/>
      <circle cx="22" cy="22" r="3.2" fill="#f2b84b"/>
    </svg>
    <div>
      <div class="brand-name">{{ company.name }}</div>
      <div class="brand-sub">{{ company.website }}</div>
    </div>
  </div>
  <div class="company-contact">
    {{ company.street }}<br>
    {{ company.postcode }} {{ company.city }}<br>
    {{ company.phone }}<br>
    {{ company.email }}
  </div>
</header>

<section class="title">
  <h1>{{ "Arbeitszeugnis" if final else "Zwischenzeugnis" }}</h1>
  <div class="rule"></div>
</section>

<article class="body" lang="de">
  <p>
    {% if f.title %}{{ f.title }} {% endif %}{{ full_name }}{% if employee.date_of_birth %}, geboren am {{ day(employee.date_of_birth) }}{% if employee.place_of_birth %} in {{ employee.place_of_birth }}{% endif %},{% endif %}
    {% if final %}war vom {{ day(employment.start_date) }} bis zum {{ day(employment.end_date) }}{% else %}ist seit dem {{ day(employment.start_date) }}{% endif %}
    als {{ employment.position }} in unserer Abteilung {{ employment.department }} tätig.
  </p>

  <p>{{ company.description }}</p>

  <p>{{ employment.summary }}</p>

  <p class="duties-intro">Zu {{ f.poss_pl_dat }} Aufgaben {{ "gehörten" if final else "gehören" }} insbesondere:</p>
  <ul class="duties">
    {% for duty in employment.duties %}<li>{{ duty }}</li>{% endfor %}
  </ul>

  {% for paragraph in assessment %}<p>{{ paragraph }}</p>{% endfor %}

  <p>{{ f.Nom }} {{ "erledigte" if final else "erledigt" }} die{{ dat }} übertragenen Aufgaben {{ rating.work }}.</p>

  <p>
    {{ f.Poss_n }} Verhalten gegenüber Vorgesetzten, Kolleginnen und Kollegen sowie Kunden {{ "war" if final else "ist" }} {{ rating.conduct }}.
    {% if behaviour_note %}{{ behaviour_note }}{% endif %}
  </p>

  {% if final %}
  <p>
    {{ short_name }} verlässt unser Unternehmen zum {{ day(employment.end_date) }}{% if reason %} {{ reason }}{% endif %}.
    {% if reference.rating == "sehr gut" -%}
    Wir bedauern sehr, {{ f.acc }} zu verlieren, danken{{ dat }} für {{ f.poss }} stets hervorragenden Leistungen und wünschen{{ dat }} für {{ f.poss }} berufliche und private Zukunft alles Gute und weiterhin viel Erfolg.
    {%- elif reference.rating == "gut" -%}
    Wir bedauern, {{ f.acc }} zu verlieren, danken{{ dat }} für {{ f.poss }} guten Leistungen und wünschen{{ dat }} für die Zukunft alles Gute und viel Erfolg.
    {%- else -%}
    Wir danken{{ dat }} für die Zusammenarbeit und wünschen{{ dat }} für die Zukunft alles Gute.
    {%- endif %}
  </p>
  {% else %}
  <p>
    Dieses Zwischenzeugnis erstellen wir auf Wunsch von {{ short_name_dat }}{% if reference.interim_occasion %} anlässlich {{ reference.interim_occasion }}{% endif %}.
    Wir danken{{ dat }} für {{ f.poss }} bisherigen Leistungen und freuen uns auf die weitere Zusammenarbeit.
  </p>
  {% endif %}
</article>

<section class="signing">
  <p class="place-date">{{ reference.place }}, {{ day(reference.date) }}</p>
  <p class="company-line">{{ company.name }}</p>
  <div class="signatures">
    {% for person in signatories %}
    <div class="signature">
      <p class="signature-name">{{ person.name }}</p>
      <p class="signature-title">{{ person.title }}</p>
    </div>
    {% endfor %}
  </div>
</section>

Render it with the API

After adding the template to your workspace, render it by ID and pass your data. Arrays are shortened here.

curl -X POST https://api-eu.dynamicdocumentapi.com/v1/renders \
  -H "Authorization: Bearer $DYNAMIC_DOCUMENT_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "input": {
    "type": "template",
    "template_id": "tpl_01J9ZK3M7Q8V5W2X4Y6Z8A0B1C"
  },
  "data": {
    "company": {
      "name": "Sternkopf Logistiksoftware GmbH",
      "short_name": "Sternkopf",
      "street": "Ganghoferstraße 68",
      "postcode": "80339",
      "city": "München",
      "phone": "+49 89 99998 020",
      "email": "personal@sternkopf.example.com",
      "website": "sternkopf.example.com",
      "register": "Amtsgericht München, HRB 123456",
      "managing_directors": "Katharina Lenz, Dr. Malte Ehrhardt",
      "description": "Die Sternkopf Logistiksoftware GmbH entwickelt Software für die Tourenplanung und Lagersteuerung mittelständischer Speditionen und beschäftigt an den Standorten München und Augsburg rund 140 Mitarbeiterinnen und Mitarbeiter."
    },
    "reference": {
      "type": "final",
      "place": "München",
      "date": "2026-09-30",
      "rating": "sehr gut",
      "leaving_reason": "own_request",
      "interim_occasion": ""
    },
    "employee": {
      "salutation": "Herr",
      "first_name": "Jonas",
      "last_name": "Albrecht",
      "academic_title": "",
      "date_of_birth": "1991-03-14",
      "place_of_birth": "Regensburg"
    },
    "employment": {
      "start_date": "2021-04-01",
      "end_date": "2026-09-30",
      "position": "Senior Data Analyst",
      "department": "Business Intelligence",
      "summary": "Herr Albrecht verantwortete in unserem Team Business Intelligence die Auswertung von Transport- und Lagerdaten für interne Fachbereiche und für unsere Kunden. Seit dem 1. Januar 2024 leitete er zusätzlich ein Team von drei Analystinnen und Analysten.",
      "duties": [
        "Aufbau und Weiterentwicklung des zentralen Kennzahlensystems für Liefertermintreue, Auslastung und Kosten je Sendung",
        "Konzeption von Dashboards für Geschäftsführung, Vertrieb und Kundenbetreuung"
      ]
    },
    "assessment": [
      "Herr Albrecht verfügt über ein umfassendes und fundiertes Fachwissen in Statistik, Datenmodellierung und Visualisierung, das er stets sicher und zielgerichtet in der Praxis einsetzte. In neue Werkzeuge und Methoden arbeitete er sich schnell und gründlich ein; so führte er 2023 aus eigener Initiative eine automatisierte Prüfung unserer Datenqualität ein.",
      "Er arbeitete stets äußerst selbständig, sorgfältig und strukturiert. Auch unter hohem Termindruck behielt er den Überblick und lieferte Ergebnisse von durchweg hoher Qualität. Seine Analysen waren präzise, nachvollziehbar und auch für Fachfremde verständlich aufbereitet."
    ],
    "behaviour_note": "Wegen seiner offenen und hilfsbereiten Art war er ein gefragter Ansprechpartner und trug wesentlich zu einer vertrauensvollen Zusammenarbeit über Abteilungsgrenzen hinweg bei.",
    "signatories": [
      {
        "name": "Katharina Lenz",
        "title": "Geschäftsführerin"
      },
      {
        "name": "Tobias Wenger",
        "title": "Leiter Personal"
      }
    ]
  },
  "output": {
    "format": "pdf",
    "filename": "employment-reference.pdf"
  }
}'