Skip to Content

E-Mail-Vorlagen-API

Mit der E-Mail-Vorlagen-API können Administratoren die von Auris gesendeten Transaktions-E-Mails anpassen. Jeder der dreizehn Vorlagentypen entspricht einem bestimmten Ereignis (Verifizierung, Passwort-Reset, Magic Link, Sicherheitswarnungen, …) und kann mit HTML und dynamischen Variablen angepasst werden, unabhängig pro Sprache.

Auris liefert Standardvorlagen für alle Typen in fünf Sprachen (en, it, fr, de, es). Existiert eine eigene Vorlage für einen Typ und eine Sprache, wird sie für alle zukünftigen E-Mails dieses Typs verwendet; andernfalls der Standard mit dem Tenant-Branding. Auflösungsreihenfolge beim Versand: eigene Vorlage (angeforderte Sprache) -> eigene Vorlage (en) -> Standard (angeforderte Sprache) -> Standard (en).

Alle Endpunkte erfordern ein Bearer-Token mit der Berechtigung manage:security und wählen den Tenant über den Header x-tenant (die Realm-Kennung des Tenants).

Diese Endpunkte liefern einfache JSON-Objekte — sie verwenden nicht die { ok, data }-Hülle, die in anderen Teilen der Auris-API üblich ist.

Vorlagen auflisten

GET/api/email-templatesRequires: manage:security

Listet alle dreizehn Vorlagentypen mit ihrem Anpassungsstatus für den Tenant. Vollständige HTML-Inhalte sind nicht enthalten — dafür einzelne Vorlagen abrufen.

Erfolgsantwort (200)

{ "templates": [ { "type": "verification", "label": "Email Verification", "description": "Sent when a new user registers to verify their email address.", "variables": ["email", "link", "expiresIn", "year", "month", "day", "date"], "hasCustomTemplate": true, "active": true, "updatedAt": "2026-07-20T10:00:00.000Z", "customLocales": ["en", "de"] } ], "availableLocales": ["en", "it", "fr", "de", "es"], "wellKnownLocales": { "en": "English", "de": "Deutsch", "pt-BR": "Português (Brasil)" } }
FeldTypBeschreibung
typestringKennung des Vorlagentyps (siehe Vorlagentypen unten)
labelstringLesbarer Name der Vorlage
descriptionstringWann die E-Mail gesendet wird
variablesstring[]Verfügbare Variablen für diesen Typ, inklusive der automatisch injizierten globalen Datumsvariablen (year, month, day, date)
hasCustomTemplatebooleantrue, wenn mindestens eine eigene Version existiert (beliebige Sprache)
activebooleanOb eine eigene Version aktiv ist (true, wenn keine eigene Vorlage existiert — der Standard ist immer aktiv)
updatedAtstring | nullISO-8601-Zeitstempel der letzten Anpassung, oder null
customLocalesstring[]Sprachen, für die eine eigene Version existiert
availableLocalesstring[]Sprachen mit integrierten Standardvorlagen
wellKnownLocalesobjectZuordnung Sprachcode -> Anzeigename, von der Konsole verwendet

Vorlage abrufen

GET/api/email-templates/{type}?locale={locale}Requires: manage:security

Ruft eine Vorlage für eine Sprache ab: den eigenen Inhalt (falls vorhanden) plus die Standard-Baseline mit dem Tenant-Branding. Der locale-Parameter ist standardmäßig en.

Erfolgsantwort (200)

{ "type": "verification", "locale": "de", "label": "Email Verification", "description": "Sent when a new user registers to verify their email address.", "variables": ["email", "link", "expiresIn", "year", "month", "day", "date"], "hasCustomTemplate": false, "subject": null, "htmlBody": null, "metadata": null, "active": true, "updatedAt": null, "defaultSubject": "Bestätige deine E-Mail-Adresse", "defaultHtmlBody": "<!DOCTYPE html>...", "availableLocales": ["en", "it", "fr", "de", "es"], "customLocales": ["en"], "hasDefaultTemplate": true, "wellKnownLocales": { "en": "English", "de": "Deutsch" } }

subject, htmlBody und metadata sind null, wenn für die angeforderte Sprache keine eigene Vorlage existiert. defaultSubject und defaultHtmlBody enthalten immer die integrierte Vorlage, gerendert mit dem Branding des Tenants (Logo, Farbe, White-Label-Footer) — genau wie bei einem echten Versand. hasDefaultTemplate gibt an, ob die angeforderte Sprache einen integrierten Standard hat (en, it, fr, de, es); andere Sprachen fallen auf Englisch zurück.

Fehlerantworten

HTTPBeschreibung
400Ungültiger Vorlagentyp oder ungültiger Sprachcode
401 / 403Fehlende Authentifizierung oder unzureichende Berechtigungen
404Tenant nicht gefunden

Vorlage aktualisieren

PUT/api/email-templates/{type}Requires: manage:security

Erstellt oder aktualisiert die eigene Vorlage für eine Sprache. Die Sprache kann im Body oder als Query-Parameter übergeben werden; Standard en. Die gespeicherte Vorlage ist sofort aktiv.

Request-Body

{ "subject": "Bestätige deine E-Mail — {{email}}", "htmlBody": "<!DOCTYPE html><html><body><h1>Bestätige deine E-Mail</h1><p>Hallo {{email}},</p><p><a href=\"{{link}}\">Adresse bestätigen</a></p><p>Der Link läuft in {{expiresIn}} ab.</p></body></html>", "locale": "de", "metadata": { "source": "code" } }
FeldTypErforderlichBeschreibung
subjectstringJaBetreffzeile. Kann {{variable}}-Platzhalter enthalten
htmlBodystringJaVollständiger HTML-Inhalt. Maximale Größe 500 KB
localestringNeinSprachcode (BCP-47-artig, z. B. en, pt-BR). Standard en
metadataobjectNeinEditor-Zustand der Konsole (Theme, Builder-Layout, Modus). Wird gegen ein festes Schema validiert — unbekannte Felder werden abgelehnt, nicht stillschweigend verworfen. Maximale Größe 256.000 Zeichen

Der HTML-Inhalt wird vor dem Speichern serverseitig bereinigt: <script>-Tags, Event-Handler-Attribute (onclick, …), javascript:/data:-URIs, <iframe>/<embed>/<object>/<form>/<base>-Tags und gefährliche CSS-Konstrukte werden entfernt.

Erfolgsantwort (200) — der gespeicherte Vorlagendatensatz:

{ "id": "cltpl123", "tenantId": "tnt_ScUtrVKUKGxtu7WY", "type": "verification", "locale": "de", "subject": "Bestätige deine E-Mail — {{email}}", "htmlBody": "<!DOCTYPE html>...", "metadata": { "source": "code" }, "active": true, "createdAt": "2026-07-23T09:00:00.000Z", "updatedAt": "2026-07-23T09:00:00.000Z" }

Fehlerantworten

HTTPBeschreibung
400Ungültiger Typ, ungültige Sprache, oder subject/htmlBody fehlen
413htmlBody überschreitet das 500-KB-Limit, oder metadata überschreitet 256.000 Zeichen
422metadata entspricht nicht dem erwarteten Schema (unbekannte Form oder unbekanntes Feld)

Änderungen gelten sofort für alle zukünftigen E-Mails dieses Typs und dieser Sprache. Es gibt keinen Entwurfsmechanismus — Vorschau ansehen und testen, bevor du speicherst.

Vorlage löschen

DELETE/api/email-templates/{type}?locale={locale}Requires: manage:security

Löscht die eigene Vorlage und kehrt zum integrierten Standard zurück. Mit dem locale-Parameter wird nur diese Sprache gelöscht; ohne werden ALLE Sprachen des Typs gelöscht.

Erfolgsantwort (200)

{ "success": true }

Vorlagenvorschau

POST/api/email-templates/{type}/previewRequires: manage:security

Rendert Betreff und HTML-Inhalt mit realistischen Beispielvariablen für den Vorlagentyp. Es wird nichts gesendet und nichts gespeichert.

Request-Body

{ "subject": "Bestätige deine E-Mail — {{email}}", "htmlBody": "<!DOCTYPE html>..." }

Erfolgsantwort (200)

{ "subject": "Bestätige deine E-Mail — [email protected]", "html": "<!DOCTYPE html>...", "variables": { "email": "[email protected]", "link": "https://console.auris.dev/verify-email?token=abc123", "expiresIn": "24 hours", "year": "2026", "month": "07", "day": "23", "date": "2026-07-23" } }

Das Feld variables gibt die eingesetzten Beispielwerte zurück. Der HTML-Inhalt wird vor dem Rendern bereinigt; der Betreff wird als reiner Text gerendert (kein HTML-Escaping der Werte).

Test-E-Mail

POST/api/email-templates/{type}/testRequires: manage:security

Rendert Betreff und HTML-Inhalt mit Beispieldaten und sendet sie als echte E-Mail. Standardmäßig geht die E-Mail an die Adresse des authentifizierten Administrators.

Request-Body

{ "subject": "Bestätige deine E-Mail — {{email}}", "htmlBody": "<!DOCTYPE html>...", "recipientEmail": "[email protected]" }
FeldTypErforderlichBeschreibung
subjectstringJaBetreff (mit Platzhaltern)
htmlBodystringJaHTML-Inhalt (mit Platzhaltern)
recipientEmailstringNeinOptionaler alternativer Empfänger. Fehlt er (oder ist leer), geht der Test an das Postfach des authentifizierten Administrators. Muss eine gültige E-Mail-Adresse sein

Erfolgsantwort (200)

{ "success": true, "sentTo": "[email protected]" }

Fehlerantworten

HTTPBeschreibung
400Ungültiger Typ, subject/htmlBody fehlen, recipientEmail ungültig, oder die E-Mail-Adresse des Aufrufers konnte nicht ermittelt werden
500E-Mail-Versand fehlgeschlagen

Der gerenderte Betreff erhält das Präfix [TEST], damit Test-E-Mails leicht von echten Transaktions-E-Mails zu unterscheiden sind. Der Versand nutzt die SMTP-Konfiguration des Tenants, wenn vorhanden und aktiv, andernfalls den Standardabsender der Plattform.

Vorlagentypen

Auris unterstützt dreizehn transaktionale E-Mail-Vorlagentypen:

TypWann gesendetVariablen
verificationEin neuer Benutzer registriert sich und muss seine E-Mail verifizierenemail, link, expiresIn
password_resetEin Benutzer fordert einen Passwort-Reset anemail, link, expiresIn
invitationEin Benutzer wird in einen Tenant eingeladenemail, orgName, role, inviterEmail, link, expiresIn
mfa_codeE-Mail-basierte Zwei-Faktor-Authentifizierungemail, code, expiresIn
magic_linkPasswortloser Login per Magic Linkemail, link, approveLink, expiresIn, tenantName
login_alertNeue Anmeldung auf dem Konto erkanntemail, device, ipAddress, location, time
welcomeDer Benutzer verifiziert erfolgreich seine E-Mailemail, name, orgName, dashboardLink
password_changedBestätigung einer Passwortänderungemail, name, time, ipAddress
account_lockedKonto nach fehlgeschlagenen Versuchen gesperrtemail, name, lockDuration, attempts, ipAddress, time
suspicious_loginUngewöhnliche Anmeldung erkanntemail, name, device, ipAddress, location, time, reason
email_changedÄnderung der primären E-Mail (an die alte Adresse gesendet)email, name, newEmail, time
license_issuedAusstellung eines Lizenzschlüsselskey, jwtToken, product, expiresAt, features
cibaAnmeldebestätigung über den CIBA-Flow angefordertemail, appName, bindingMessage, approveUrl, denyUrl

Die globalen Datumsvariablen year, month, day und date (Format YYYY-MM-DD) werden zusätzlich zu den oben aufgeführten typspezifischen Variablen automatisch in jedes Rendering injiziert.

Vorlagensyntax

  • {{variable}} — wird durch den Wert ersetzt. Im HTML-Inhalt werden Werte automatisch HTML-escaped, um Injection zu verhindern; im Betreff werden sie als reiner Text eingefügt.
  • {{{variable}}} — Raw-Interpolation ohne Escaping. Nur für vertrauenswürdige, serverseitig erzeugte HTML-Fragmente.
  • {{#if variable}}...{{/if}} — der Block bleibt nur erhalten, wenn die Variable einen nicht-leeren Wert hat; andernfalls wird er vollständig entfernt (samt Markup). Beispiel: die Standardvorlage von magic_link zeigt den sekundären Bestätigungs-Button nur, wenn approveLink gesetzt ist.

Unbekannte Platzhalter bleiben unverändert in der Ausgabe. Punktnotation und Schleifen werden nicht unterstützt.

<h1>Anmelden bei {{tenantName}}</h1> <p><a href="{{link}}">Auf diesem Gerät anmelden</a></p> {{#if approveLink}} <p><a href="{{approveLink}}">Auf dem Ursprungsgerät bestätigen</a></p> {{/if}} <p>Der Link läuft in {{expiresIn}} ab.</p>

Berechtigungsreferenz

BerechtigungBeschreibung
manage:securityAlle E-Mail-Vorlagen des Tenants auflisten, ansehen, aktualisieren, löschen, vorschauen und testen

Verwandt