The two default emails
Both emails carry a 6-digit code. The recovery email also includes a “if you didn’t request this, ignore” line.
Customizing templates
Open App Services → Authentication Providers → Archie Auth → Settings and scroll to the Email Templates section. The editor has:- Template selector — switch between Verification and Recovery.
- Subject — plain-text input.
- Body — rich-text editor (TipTap) with inline variable chips.
- Live preview — renders the email with branding and sample variable values in real time.
Template variables
Insert variables as colored chips in the body. Click a variable in the toolbar to drop it at the cursor.Reset to default
The Reset to Default button discards your custom template and falls back to the platform default. Reset is per-template — resetting Verification doesn’t touch Recovery.Templates are per-environment. Editing the template in
staging doesn’t affect master. Branching an environment doesn’t copy templates — start from default in the new environment, or copy the body manually.Customizing via the GraphQL API
For codified configuration, set templates withconfigureProjectAuth:
configureProjectAuth input.
Branding
Customize the visual identity of the emails — logo, company name, sender name, footer link.Branding fields
Set these in the Email Branding section of Settings, or programmatically:
Branding behavior
- Custom branding overrides Archie’s defaults in the header, footer, and sender name.
- The overall email layout — structure, responsiveness — stays consistent. Only the branding slots change.
- Empty fields fall back to platform defaults.
- The
senderNamefield overrides the SendGrid “From Name” without changing the verified sender email address (which stays platform-managed). - Branding is per-environment —
stagingandmastercan use different logos and company names.
Email delivery
Two transports back the same MJML templates:
The transport is configured at the platform level and isn’t changeable per project. Both transports deliver identical emails.
For projects routing through SendGrid, see the SendGrid integration.
Rate limiting
Email sending is rate-limited to 5 emails per user per hour to defend against abuse (someone repeatedly triggering recovery emails to flood an inbox).FAQ
Why aren't templates copied when I branch an environment?
Why aren't templates copied when I branch an environment?
Same reason auth secrets aren’t — environment isolation. Branching a
staging environment from master shouldn’t silently propagate template wording you might be testing. Copy manually if you want them to match.Can I add my own variables to a template?
Can I add my own variables to a template?
Today the supported variables are
{{otp}} and {{otpExpirationMinutes}}. Anything else in {{...}} is rendered as literal text. To inject more context, do it server-side via the auth events and send your own email through a custom function.The user reports they didn't receive the email — what do I check?
The user reports they didn't receive the email — what do I check?
First, the spam folder. Then verify the address in the user record (typos at signup are common). If consistently undelivered, check transport-level delivery logs in your email provider (SES or SendGrid) and confirm the sender domain’s DKIM / SPF records are valid.
Can I send a custom email from auth events?
Can I send a custom email from auth events?
Yes — subscribe to events like
auth.user.registered from a custom function or webhook and send your own email via the integrated provider. The built-in templates handle the OTP delivery; everything else (welcome flow, marketing onboarding) is yours.Does the senderName appear in the From: header?
Does the senderName appear in the From: header?
Yes — it overrides the display name. The sender email address stays the platform-verified address, which is what the receiving mail server validates against DKIM / SPF.