Email Branding
Customize how Koolbase's transactional emails look to your users. Display name, from name, reply-to address, logo, primary color, and verified custom sender domains — all configurable per project from the dashboard.
Where this applies
Email branding affects the three transactional emails Koolbase sends on your behalf:
- Verification emails sent at signup
- Password reset emails sent when users request a reset
- "No account" courtesy emails sent when a reset is requested for an unregistered address — a UX nicety that lets the user know they probably signed up with a different email
Visual branding settings live under Branding in your project sidebar. Custom domains live under Sender Domains.
Display name
The display name is the brand identifier shown throughout the email body — subject lines, headers (when no logo is set), and footer copyright. It also flows through to other settings as a fallback when they're blank.
Falls back to: your project name. If your project is called "StrideHx Inc" and you don't set a display name, all emails read "StrideHx Inc" by default.
From name
The display name in the From: header of the email — what recipients see in their inbox preview alongside the actual sender address (e.g., StrideHx Inc <[email protected]>).
Falls back to: the display name, then the project name. Most projects set this once and forget it.
Reply-to email
Where replies to transactional emails should route. When set, Koolbase adds a Reply-To: header so any reply from the recipient goes directly to your address instead of bouncing off the shared Koolbase sender.
Leave blank if you don't want recipients to reply at all — the Reply-To header simply won't be set.
Logo
Logo image rendered at the top of every transactional email, replacing the text display name in the header. When no logo is uploaded, the display name renders as bold white text.
- Format: PNG or JPEG only. SVGs aren't supported — mail clients render them inconsistently.
- Size limit: 1 MB.
- Rendered height: 40px, scaled proportionally.
Designs that look right on dark backgrounds
#0a0c10). Logos designed for white backgrounds — black text or dark elements — won't be visible. Use a transparent PNG with light or white-colored designs, or a logo with built-in contrast.Primary color
Accent color used as the background of primary buttons in transactional emails — specifically the "Verify Email" and "Reset Password" buttons. Six-digit hex format (e.g., #E63946).
Falls back to: Koolbase blue (#2b8cee) when blank.
Button text picks its color automatically
Email link URLs
Where the buttons in verification and password-reset emails point. Two independent templates — Verification URL and Password Reset URL — each of which must contain {token}, substituted with the real token at send time.
Leave both blank for the recommended default: Koolbase-hosted https pages that complete verification and password reset with no app-side setup, working in every mail client.
To route users into your mobile app instead, set them to https Universal Links / App Links on your own domain — see Deep Linking Auth Emails for the complete setup.
Custom URL schemes are not clickable in email
A template like myapp://reset?token={token} sends and renders fine, but most mail clients — Gmail included — strip non-https link targets. The button appears and does nothing when tapped, which reads as a delivery failure and sends you debugging the wrong layer.
Use custom schemes for local testing only. The dashboard flags them inline when you save a non-https template.
Check which field you're pasting into
Sender domains
By default, Koolbase's transactional emails send from the shared [email protected] address. To send from your own domain (e.g., [email protected]), register and verify a custom sender domain.
Each project can register multiple domains and switch between them, but only one is the active sender at a time.
1. Add your domain
From the Sender Domains tab in your project sidebar, click Add domain and enter the root domain or subdomain you want to send from. Koolbase registers it with our delivery provider and returns the DNS records you need to publish.
curl -X POST https://api.koolbase.com/v1/projects/{project_id}/domains \
-H "Authorization: Bearer YOUR_DASHBOARD_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "domain": "yourdomain.com" }'2. Publish the DNS records
The response includes a list of DNS records — typically one MX (SPF), one TXT (SPF), and two or three CNAME (DKIM) records. Add each one at your DNS provider. Each card in the Sender Domains tab has copy buttons so you can paste the values directly.
[
{
"type": "MX",
"name": "send",
"value": "feedback-smtp.us-east-1.amazonses.com",
"priority": 10,
"ttl": "Auto"
},
{
"type": "TXT",
"name": "send",
"value": "\"v=spf1 include:amazonses.com ~all\""
},
{
"type": "CNAME",
"name": "{selector}._domainkey",
"value": "{selector}.dkim.amazonses.com."
}
]Trailing dots and DNS providers
3. Verify
After publishing your records, click Verify on the domain card. Koolbase triggers a DNS check on our delivery provider; the status updates from pending to verified once the records resolve correctly.
DNS propagation can take time
pending, wait a few minutes and click Verify again.4. Activate
Once verified, click Activate on the domain card. From that moment, all transactional emails for this project send from [email protected] instead of [email protected]. Click Deactivate any time to switch back to the shared sender without removing the registration.
Activation is project-scoped
Fallback chain
Koolbase applies fallback logic so emails always have sensible defaults, even when branding is partially configured:
| Field | Falls back to |
|---|---|
| Display name | Project name |
| From name | Display name, then project name |
| Reply-to | No Reply-To header |
| Logo | Display name as bold white text |
| Primary color | Koolbase blue (#2b8cee) |
| Sender domain | [email protected] |
API reference
Most projects configure branding from the dashboard, but every setting is also reachable via the API for automation or CI workflows.
| Method | Description |
|---|---|
GET /v1/projects/{id} | Fetch current branding state |
PATCH /v1/projects/{id}/branding | Update display name, from name, reply-to, primary color |
POST /v1/projects/{id}/branding/logo | Upload logo (multipart, field name: logo) |
POST /v1/projects/{id}/domains | Register a new sender domain |
GET /v1/projects/{id}/domains | List registered domains for the project |
POST /v1/projects/{id}/domains/{did}/verify | Trigger DNS verification on a domain |
DELETE /v1/projects/{id}/domains/{did} | Remove a domain registration |
PUT /v1/projects/{id}/sender-domain | Set or clear the active sender domain |