Email Troubleshooting
Hit something unexpected? Find your symptom below.
”Email Marketing requires an active plan”
Shown when you visit /email, /email/templates, /email/campaigns, or /settings/email-domain.
Cause: your plan doesn’t have the Email Marketing feature flag enabled.
Fix:
- If you’re on a trial, the feature is free during the trial window. Confirm trial isn’t expired in Settings → Manage Subscriptions
- If you’re on a paid plan, ask the platform admin to enable Email Marketing on your plan via Admin → Plans → [your plan] → Bundled Features → Email Marketing
- Refresh after enabling
”from_email domain is not verified”
Shown when you try to send a campaign or call the public API.
Cause: the from_email you specified is on a domain you haven’t completed DNS verification for.
Fix:
- Go to Settings → Email Domain
- Find the domain in question
- If status is Pending, click Verify now. Per-record errors (SPF / DKIM / DMARC) tell you which DNS record is missing
- If the domain isn’t there at all, click Add domain and publish the 3 DNS records — see Sender Domain →
“domain not verified” on send (sprint 1+)
Same root cause as above, surfaced from the email-sender worker. Check the campaign detail page or outbox row’s last_error for the exact failure.
DNS records published but verification fails
Cause: DNS propagation lag, wrong hostname, or value mismatch.
Fixes in order of likelihood:
- Wait 15 minutes. We auto-recheck pending domains every 15 min via Cloudflare 1.1.1.1 / Google 8.8.8.8 directly (bypassing system caches). Most resolve themselves
- Confirm the record exists by querying any external DNS checker (e.g. dnschecker.org ) — paste the exact hostname (e.g.,
_spf.acme-store.com) - Check “Found” vs “Expected” in the verify result on Email Domain . If Found is blank, the record isn’t published yet. If Found has a value but doesn’t match Expected, you have a typo
- Double-suffix issue: some DNS providers (DigitalOcean, etc.) auto-append your zone to the hostname. If you typed
_spf.acme-store.comas the hostname, the provider stored it at_spf.acme-store.com.acme-store.com. Fix: re-enter the hostname as just_spf(the provider adds your domain automatically) - Cloudflare proxy: if your DKIM CNAME is showing the orange-cloud (proxied) icon, switch it to grey (DNS-only). Cloudflare flattens proxied CNAMEs to A records, breaking the chain
”daily_free_limit_exceeded”
Cause: you hit 100 emails for the day across all sources (campaigns + public API). The counter resets at 00:00 UTC.
Fix:
- Wait until midnight UTC for the counter to reset, or
- Wait for sprint 6 (wallet billing) — beyond the free limit, additional sends will charge ₹0.10 (marketing) / ₹0.05 (transactional) per email from your wallet. Currently still in dev
”insufficient_balance”
Cause (post sprint 6): wallet doesn’t have enough to cover a paid send.
Fix: recharge at Wallet — minimum top-up varies by plan.
Email landed in spam
Causes in rough order:
- Sender domain not yet verified → verify it
- Brand new domain or IP → reputation takes 4-8 weeks to build. Send small volumes (50/day → 200/day → 1k/day) for the first 6 weeks
- Spam-trigger words in subject or body → “FREE!!!”, “100% guaranteed”, excessive caps, !!!! style punctuation
- No unsubscribe → impossible since the Footer block auto-injects, but if you removed Footer from the template, restore it
- Image-only email → ratio of images to text matters. Keep at least 60% of body as readable text
- Too many links → 1 primary CTA + 2 secondary is fine. 10 links per email looks like phishing
- Bounce rate above 5% → your list has invalid addresses, hurting reputation. Suppress hard bounces, remove obvious typos before sending
Use mail-tester.com to score your template — aim for 9+/10.
”Renderer service unavailable” in template editor
Cause: the email-renderer Node sidecar is unreachable.
Fix: should auto-recover within seconds. If it persists, refresh the page; if still broken, raise a support ticket — this is platform-side, not on you.
High bounce rate on a campaign
Cause: list quality. Common patterns:
- Imported from a CSV with old contacts — emails go stale. ~10% of B2B emails decay/year
- Imported from a public source (LinkedIn, etc.) — opt-in is questionable, addresses unreliable
- Wrong format — typos like
gmial.com, missing TLD, etc.
Fix:
- Stop the campaign if bounce rate > 5% on the first batch
- Use a list-cleaning service (NeverBounce, ZeroBounce, etc.) before the next send
- Build segments based on engagement — only send to contacts who interacted in the last 90 days
Variable showing as {{first_name}} literally in the email
Cause: variable substitution didn’t fire. Two reasons:
- You changed the template but didn’t save — sends use the last-saved version. Click Save, then send again
- Variable name doesn’t match the contact attribute —
{{first_name}}looks for an attribute literally namedfirst_name. Check the attribute spelling at Settings → Attributes . Common:firstNamevsfirst_name
For the public API, {{var}} looks up var in the variables object you sent. Mismatched key = empty replacement.
Recipients say they didn’t unsubscribe but still got marked
Cause: gmail’s native “Unsubscribe” button (powered by RFC 8058 List-Unsubscribe-Post) is one click — sometimes accidental. Or someone reported as spam, which counts as unsubscribe.
Fix: admin can manually remove from the suppression list at Admin → Email System → Suppression. But only do this with explicit confirmation from the recipient — re-mailing a suppressed address damages your reputation.
Public API: Invalid API key.
Cause:
- Key revoked or regenerated since last use
- Wrong header format (
Authorization: Basic <key>is correct;Beareris wrong for our public API) - Key copied with leading/trailing whitespace
Fix: regenerate at Settings → Developer . Test with curl:
curl -X POST https://apis.splashifypro.com/api/v1/public/email/send \
-H "Authorization: Basic sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{"to":"you@example.com","subject":"test","html":"<p>test</p>","from_email":"hello@your-verified-domain.com"}'Public API: Rate limit exceeded
Cause: per-plan rate limit (e.g., 40 requests/minute on starter plans).
Fix:
- Reduce send rate
- Implement exponential backoff in your code on 429 responses
- Upgrade your plan for a higher limit
- See Rate Limits
Status endpoint returns “queued” forever
Cause: the email-sender worker isn’t processing your queue. Either it’s down (rare) or your specific message hit a permanent error early.
Fix:
- Wait 30 seconds — most queued messages reach
sentwithin 5 sec - If still queued after 60 sec, check Settings → Track Expenses to see if any deduction happened (suggests it actually sent)
- If genuinely stuck, raise a support ticket with the
message_id
Still stuck?
- Try the Public API Live API Tester for API issues
- Ask Maya — the in-app AI assistant has the full email-marketing knowledge base loaded. Open Maya from the headset icon
- Raise a support ticket from Settings → Support — include the
message_idif it’s a delivery issue