Skip to Content

API Template Email

L’API Template Email consente agli amministratori di personalizzare le email transazionali inviate da Auris. Ognuno dei tredici tipi di template corrisponde a un evento specifico (verifica, reset password, magic link, avvisi di sicurezza, …) e può essere personalizzato con HTML e variabili dinamiche, in modo indipendente per ogni lingua.

Auris include template predefiniti per tutti i tipi in cinque lingue (en, it, fr, de, es). Quando esiste un template personalizzato per un tipo e una lingua, viene usato per tutte le email future di quel tipo; altrimenti viene usato il default con il branding del tenant. Ordine di risoluzione all’invio: personalizzato (lingua richiesta) -> personalizzato (en) -> default (lingua richiesta) -> default (en).

Tutti gli endpoint richiedono un token Bearer con il permesso manage:security e selezionano il tenant tramite l’header x-tenant (l’identificatore del realm del tenant).

Questi endpoint restituiscono oggetti JSON semplici — non usano l’involucro { ok, data } presente in altre parti dell’API Auris.

Elenca i Template

GET/api/email-templatesRequires: manage:security

Elenca tutti i tredici tipi di template con lo stato di personalizzazione per il tenant. I corpi HTML completi non sono inclusi — usa la lettura del singolo template.

Risposta di successo (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", "it"] } ], "availableLocales": ["en", "it", "fr", "de", "es"], "wellKnownLocales": { "en": "English", "it": "Italiano", "pt-BR": "Português (Brasil)" } }
CampoTipoDescrizione
typestringIdentificatore del tipo di template (vedi Tipi di Template più sotto)
labelstringNome leggibile del template
descriptionstringQuando viene inviata l’email
variablesstring[]Variabili disponibili per questo tipo, incluse le variabili di data globali auto-iniettate (year, month, day, date)
hasCustomTemplatebooleantrue se esiste almeno una versione personalizzata (in qualsiasi lingua)
activebooleanSe una versione personalizzata è attiva (true quando non esiste alcun template personalizzato — il default è sempre attivo)
updatedAtstring | nullTimestamp ISO 8601 dell’ultima personalizzazione, oppure null
customLocalesstring[]Lingue per cui esiste una versione personalizzata
availableLocalesstring[]Lingue con template predefiniti integrati
wellKnownLocalesobjectMappa codice lingua -> etichetta usata dalla Console

Ottieni un Template

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

Ottiene un template per una lingua: il contenuto personalizzato (se esiste) più la baseline predefinita con il branding del tenant. Il parametro locale ha default en.

Risposta di successo (200)

{ "type": "verification", "locale": "it", "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": "Verifica il tuo indirizzo email", "defaultHtmlBody": "<!DOCTYPE html>...", "availableLocales": ["en", "it", "fr", "de", "es"], "customLocales": ["en"], "hasDefaultTemplate": true, "wellKnownLocales": { "en": "English", "it": "Italiano" } }

subject, htmlBody e metadata sono null quando non esiste un template personalizzato per la lingua richiesta. defaultSubject e defaultHtmlBody contengono sempre il template integrato, renderizzato con il branding del tenant (logo, colore, footer white-label) esattamente come per un invio reale. hasDefaultTemplate indica se la lingua richiesta ha un default integrato (en, it, fr, de, es); le altre lingue ricadono sull’inglese.

Risposte di errore

HTTPDescrizione
400Tipo di template o codice lingua non valido
401 / 403Autenticazione mancante o permessi insufficienti
404Tenant non trovato

Aggiorna un Template

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

Crea o aggiorna il template personalizzato per una lingua. La lingua può essere passata nel body o come parametro query; default en. Il template salvato è attivo immediatamente.

Body della richiesta

{ "subject": "Verifica la tua email — {{email}}", "htmlBody": "<!DOCTYPE html><html><body><h1>Verifica la tua email</h1><p>Ciao {{email}},</p><p><a href=\"{{link}}\">Conferma il tuo indirizzo</a></p><p>Il link scade tra {{expiresIn}}.</p></body></html>", "locale": "it", "metadata": { "source": "code" } }
CampoTipoObbligatorioDescrizione
subjectstringSìOggetto dell’email. Può includere placeholder {{variabile}}
htmlBodystringSìCorpo HTML completo. Dimensione massima 500 KB
localestringNoCodice lingua (stile BCP-47, es. en, pt-BR). Default en
metadataobjectNoStato dell’editor usato dalla Console (tema, layout builder, modalità). Validato contro uno schema chiuso — i campi non riconosciuti vengono rifiutati, non scartati in silenzio. Dimensione massima 256.000 caratteri

Il corpo HTML viene sanificato lato server prima del salvataggio: tag <script>, attributi di gestione eventi (onclick, …), URI javascript:/data:, tag <iframe>/<embed>/<object>/<form>/<base> e costrutti CSS pericolosi vengono rimossi.

Risposta di successo (200) — il record del template salvato:

{ "id": "cltpl123", "tenantId": "tnt_ScUtrVKUKGxtu7WY", "type": "verification", "locale": "it", "subject": "Verifica la tua email — {{email}}", "htmlBody": "<!DOCTYPE html>...", "metadata": { "source": "code" }, "active": true, "createdAt": "2026-07-23T09:00:00.000Z", "updatedAt": "2026-07-23T09:00:00.000Z" }

Risposte di errore

HTTPDescrizione
400Tipo non valido, lingua non valida, oppure subject/htmlBody mancanti
413htmlBody supera il limite di 500 KB, oppure metadata supera i 256.000 caratteri
422metadata non rispetta lo schema previsto (forma o campo non riconosciuti)

Le modifiche hanno effetto immediato per tutte le email future di quel tipo e di quella lingua. Non esiste un meccanismo di bozze — visualizza l’anteprima e testa il template prima di salvare.

Elimina un Template

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

Elimina il template personalizzato e ripristina il default integrato. Con il parametro locale viene eliminata solo quella lingua; senza, vengono eliminate TUTTE le lingue del tipo.

Risposta di successo (200)

{ "success": true }

Anteprima di un Template

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

Renderizza oggetto e corpo HTML con variabili di esempio realistiche per il tipo di template. Non viene inviato né salvato nulla.

Body della richiesta

{ "subject": "Verifica la tua email — {{email}}", "htmlBody": "<!DOCTYPE html>..." }

Risposta di successo (200)

{ "subject": "Verifica la tua email — [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" } }

Il campo variables riporta i valori di esempio sostituiti. Il corpo HTML viene sanificato prima del render; l’oggetto viene renderizzato come testo semplice (senza escape HTML dei valori).

Email di Test

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

Renderizza oggetto e corpo HTML con dati di esempio e li invia come email reale. Di default l’email va all’indirizzo dell’amministratore autenticato.

Body della richiesta

{ "subject": "Verifica la tua email — {{email}}", "htmlBody": "<!DOCTYPE html>...", "recipientEmail": "[email protected]" }
CampoTipoObbligatorioDescrizione
subjectstringSìOggetto (con placeholder)
htmlBodystringSìCorpo HTML (con placeholder)
recipientEmailstringNoDestinatario alternativo opzionale. Se omesso (o vuoto), il test viene inviato alla casella dell’amministratore autenticato. Deve essere un indirizzo email valido

Risposta di successo (200)

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

Risposte di errore

HTTPDescrizione
400Tipo non valido, subject/htmlBody mancanti, recipientEmail non valido, oppure impossibile determinare l’email del chiamante
500Invio dell’email fallito

L’oggetto renderizzato viene prefissato con [TEST] così le email di test sono facili da distinguere dalle email transazionali reali. La consegna usa la configurazione SMTP del tenant quando presente e attiva, altrimenti il mittente predefinito della piattaforma.

Tipi di Template

Auris supporta tredici tipi di template email transazionali:

TipoQuando viene inviataVariabili
verificationUn nuovo utente si registra e deve verificare l’emailemail, link, expiresIn
password_resetUn utente richiede il reset della passwordemail, link, expiresIn
invitationUn utente viene invitato in un tenantemail, orgName, role, inviterEmail, link, expiresIn
mfa_codeAutenticazione a due fattori via emailemail, code, expiresIn
magic_linkLogin senza password via magic linkemail, link, approveLink, expiresIn, tenantName
login_alertNuovo accesso rilevato sull’accountemail, device, ipAddress, location, time
welcomeL’utente verifica con successo la propria emailemail, name, orgName, dashboardLink
password_changedConferma del cambio passwordemail, name, time, ipAddress
account_lockedAccount bloccato dopo tentativi fallitiemail, name, lockDuration, attempts, ipAddress, time
suspicious_loginAccesso inusuale rilevatoemail, name, device, ipAddress, location, time, reason
email_changedCambio dell’email principale (inviata al vecchio indirizzo)email, name, newEmail, time
license_issuedEmissione di una chiave di licenzakey, jwtToken, product, expiresAt, features
cibaApprovazione dell’accesso richiesta via flusso CIBAemail, appName, bindingMessage, approveUrl, denyUrl

Le variabili di data globali year, month, day e date (formato YYYY-MM-DD) vengono iniettate automaticamente in ogni render, in aggiunta alle variabili per tipo elencate sopra.

Sintassi dei Template

  • {{variabile}} — sostituita con il valore. Nel corpo HTML i valori subiscono escape HTML automatico per prevenire injection; nell’oggetto vengono inseriti come testo semplice.
  • {{{variabile}}} — interpolazione raw senza escape. Solo per frammenti HTML fidati costruiti lato server.
  • {{#if variabile}}...{{/if}} — il blocco viene mantenuto solo quando la variabile ha un valore non vuoto; altrimenti viene rimosso interamente (markup incluso). Esempio: il template predefinito di magic_link mostra il pulsante di approvazione secondario solo quando approveLink è valorizzato.

I placeholder sconosciuti restano invariati nell’output. Dot notation e cicli non sono supportati.

<h1>Accedi a {{tenantName}}</h1> <p><a href="{{link}}">Accedi su questo dispositivo</a></p> {{#if approveLink}} <p><a href="{{approveLink}}">Approva sul dispositivo di origine</a></p> {{/if}} <p>Il link scade tra {{expiresIn}}.</p>

Riferimento Permessi

PermessoDescrizione
manage:securityElencare, vedere, aggiornare, eliminare, visualizzare in anteprima e testare tutti i template email del tenant

Correlati