Skip to Content

API Modèles d’E-mail

L’API Modèles d’E-mail permet aux administrateurs de personnaliser les e-mails transactionnels envoyés par Auris. Chacun des treize types de modèles correspond à un événement précis (vérification, réinitialisation de mot de passe, magic link, alertes de sécurité, …) et peut être personnalisé avec du HTML et des variables dynamiques, indépendamment pour chaque langue.

Auris fournit des modèles par défaut pour tous les types dans cinq langues (en, it, fr, de, es). Quand un modèle personnalisé existe pour un type et une langue, il est utilisé pour tous les futurs e-mails de ce type ; sinon c’est le défaut avec le branding du tenant qui est utilisé. Ordre de résolution à l’envoi : personnalisé (langue demandée) -> personnalisé (en) -> défaut (langue demandée) -> défaut (en).

Tous les endpoints exigent un jeton Bearer avec la permission manage:security et sélectionnent le tenant via l’en-tête x-tenant (l’identifiant de realm du tenant).

Ces endpoints renvoient des objets JSON simples — ils n’utilisent pas l’enveloppe { ok, data } présente ailleurs dans l’API Auris.

Lister les Modèles

GET/api/email-templatesRequires: manage:security

Liste les treize types de modèles avec leur statut de personnalisation pour le tenant. Les corps HTML complets ne sont pas inclus — utilise la lecture d’un modèle unique.

Réponse de succès (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", "fr"] } ], "availableLocales": ["en", "it", "fr", "de", "es"], "wellKnownLocales": { "en": "English", "fr": "Français", "pt-BR": "Português (Brasil)" } }
ChampTypeDescription
typestringIdentifiant du type de modèle (voir Types de Modèles plus bas)
labelstringNom lisible du modèle
descriptionstringQuand l’e-mail est envoyé
variablesstring[]Variables disponibles pour ce type, y compris les variables de date globales auto-injectées (year, month, day, date)
hasCustomTemplatebooleantrue si au moins une version personnalisée existe (toute langue)
activebooleanSi une version personnalisée est active (true quand aucun modèle personnalisé n’existe — le défaut est toujours actif)
updatedAtstring | nullHorodatage ISO 8601 de la dernière personnalisation, ou null
customLocalesstring[]Langues pour lesquelles une version personnalisée existe
availableLocalesstring[]Langues avec modèles par défaut intégrés
wellKnownLocalesobjectCarte code de langue -> libellé utilisée par la Console

Récupérer un Modèle

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

Récupère un modèle pour une langue : le contenu personnalisé (le cas échéant) plus la base par défaut avec le branding du tenant. Le paramètre locale vaut en par défaut.

Réponse de succès (200)

{ "type": "verification", "locale": "fr", "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": "Vérifie ton adresse e-mail", "defaultHtmlBody": "<!DOCTYPE html>...", "availableLocales": ["en", "it", "fr", "de", "es"], "customLocales": ["en"], "hasDefaultTemplate": true, "wellKnownLocales": { "en": "English", "fr": "Français" } }

subject, htmlBody et metadata sont null quand aucun modèle personnalisé n’existe pour la langue demandée. defaultSubject et defaultHtmlBody contiennent toujours le modèle intégré, rendu avec le branding du tenant (logo, couleur, footer white-label) exactement comme pour un envoi réel. hasDefaultTemplate indique si la langue demandée a un défaut intégré (en, it, fr, de, es) ; les autres langues retombent sur l’anglais.

Réponses d’erreur

HTTPDescription
400Type de modèle ou code de langue invalide
401 / 403Authentification manquante ou permissions insuffisantes
404Tenant introuvable

Mettre à Jour un Modèle

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

Crée ou met à jour le modèle personnalisé pour une langue. La langue peut être passée dans le corps ou en paramètre query ; défaut en. Le modèle enregistré est actif immédiatement.

Corps de la requête

{ "subject": "Vérifie ton e-mail — {{email}}", "htmlBody": "<!DOCTYPE html><html><body><h1>Vérifie ton e-mail</h1><p>Bonjour {{email}},</p><p><a href=\"{{link}}\">Confirme ton adresse</a></p><p>Le lien expire dans {{expiresIn}}.</p></body></html>", "locale": "fr", "metadata": { "source": "code" } }
ChampTypeRequisDescription
subjectstringOuiObjet de l’e-mail. Peut inclure des placeholders {{variable}}
htmlBodystringOuiCorps HTML complet. Taille maximale 500 Ko
localestringNonCode de langue (style BCP-47, ex. en, pt-BR). Défaut en
metadataobjectNonÉtat de l’éditeur utilisé par la Console (thème, layout du builder, mode). Validé contre un schéma fermé — les champs non reconnus sont rejetés, pas supprimés silencieusement. Taille maximale 256 000 caractères

Le corps HTML est assaini côté serveur avant l’enregistrement : balises <script>, attributs de gestion d’événements (onclick, …), URI javascript:/data:, balises <iframe>/<embed>/<object>/<form>/<base> et constructions CSS dangereuses sont supprimés.

Réponse de succès (200) — l’enregistrement du modèle sauvegardé :

{ "id": "cltpl123", "tenantId": "tnt_ScUtrVKUKGxtu7WY", "type": "verification", "locale": "fr", "subject": "Vérifie ton 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" }

Réponses d’erreur

HTTPDescription
400Type invalide, langue invalide, ou subject/htmlBody manquants
413htmlBody dépasse la limite de 500 Ko, ou metadata dépasse 256 000 caractères
422metadata ne correspond pas au schéma attendu (forme ou champ non reconnu)

Les modifications prennent effet immédiatement pour tous les futurs e-mails de ce type et de cette langue. Il n’y a pas de mécanisme de brouillon — prévisualise et teste le modèle avant d’enregistrer.

Supprimer un Modèle

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

Supprime le modèle personnalisé et revient au défaut intégré. Avec le paramètre locale, seule cette langue est supprimée ; sans, TOUTES les langues du type sont supprimées.

Réponse de succès (200)

{ "success": true }

Prévisualiser un Modèle

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

Rend un objet et un corps HTML avec des variables d’exemple réalistes pour le type de modèle. Rien n’est envoyé ni enregistré.

Corps de la requête

{ "subject": "Vérifie ton e-mail — {{email}}", "htmlBody": "<!DOCTYPE html>..." }

Réponse de succès (200)

{ "subject": "Vérifie ton 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" } }

Le champ variables renvoie les valeurs d’exemple substituées. Le corps HTML est assaini avant le rendu ; l’objet est rendu comme texte brut (sans échappement HTML des valeurs).

E-mail de Test

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

Rend l’objet et le corps HTML avec des données d’exemple et les envoie comme un vrai e-mail. Par défaut l’e-mail va à l’adresse de l’administrateur authentifié.

Corps de la requête

{ "subject": "Vérifie ton e-mail — {{email}}", "htmlBody": "<!DOCTYPE html>...", "recipientEmail": "[email protected]" }
ChampTypeRequisDescription
subjectstringOuiObjet (avec placeholders)
htmlBodystringOuiCorps HTML (avec placeholders)
recipientEmailstringNonDestinataire alternatif optionnel. S’il est omis (ou vide), le test est envoyé à la boîte de l’administrateur authentifié. Doit être une adresse e-mail valide

Réponse de succès (200)

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

Réponses d’erreur

HTTPDescription
400Type invalide, subject/htmlBody manquants, recipientEmail invalide, ou l’adresse e-mail de l’appelant n’a pas pu être déterminée
500Échec de l’envoi de l’e-mail

L’objet rendu est préfixé par [TEST] afin que les e-mails de test soient faciles à distinguer des e-mails transactionnels réels. L’envoi utilise la configuration SMTP du tenant si elle est présente et active, sinon l’expéditeur par défaut de la plateforme.

Types de Modèles

Auris supporte treize types de modèles d’e-mail transactionnels :

TypeQuand il est envoyéVariables
verificationUn nouvel utilisateur s’inscrit et doit vérifier son e-mailemail, link, expiresIn
password_resetUn utilisateur demande une réinitialisation de mot de passeemail, link, expiresIn
invitationUn utilisateur est invité dans un tenantemail, orgName, role, inviterEmail, link, expiresIn
mfa_codeAuthentification à deux facteurs par e-mailemail, code, expiresIn
magic_linkConnexion sans mot de passe via magic linkemail, link, approveLink, expiresIn, tenantName
login_alertNouvelle connexion détectée sur le compteemail, device, ipAddress, location, time
welcomeL’utilisateur vérifie avec succès son e-mailemail, name, orgName, dashboardLink
password_changedConfirmation d’un changement de mot de passeemail, name, time, ipAddress
account_lockedCompte verrouillé après des tentatives échouéesemail, name, lockDuration, attempts, ipAddress, time
suspicious_loginConnexion inhabituelle détectéeemail, name, device, ipAddress, location, time, reason
email_changedChangement de l’e-mail principal (envoyé à l’ancienne adresse)email, name, newEmail, time
license_issuedÉmission d’une clé de licencekey, jwtToken, product, expiresAt, features
cibaApprobation de connexion demandée via le flux CIBAemail, appName, bindingMessage, approveUrl, denyUrl

Les variables de date globales year, month, day et date (format YYYY-MM-DD) sont injectées automatiquement dans chaque rendu, en plus des variables par type listées ci-dessus.

Syntaxe des Modèles

  • {{variable}} — remplacée par la valeur. Dans le corps HTML, les valeurs sont échappées automatiquement pour prévenir l’injection ; dans l’objet elles sont insérées comme texte brut.
  • {{{variable}}} — interpolation brute sans échappement. Uniquement pour des fragments HTML de confiance construits côté serveur.
  • {{#if variable}}...{{/if}} — le bloc est conservé seulement quand la variable a une valeur non vide ; sinon il est supprimé entièrement (markup inclus). Exemple : le modèle par défaut de magic_link n’affiche le bouton d’approbation secondaire que lorsque approveLink est renseigné.

Les placeholders inconnus restent tels quels dans le rendu. La notation pointée et les boucles ne sont pas supportées.

<h1>Connecte-toi à {{tenantName}}</h1> <p><a href="{{link}}">Se connecter sur cet appareil</a></p> {{#if approveLink}} <p><a href="{{approveLink}}">Approuver sur l'appareil d'origine</a></p> {{/if}} <p>Le lien expire dans {{expiresIn}}.</p>

Référence des Permissions

PermissionDescription
manage:securityLister, voir, mettre à jour, supprimer, prévisualiser et tester tous les modèles d’e-mail du tenant

Associés