Troubleshooting
Common issues and how to fix them.
Emails not delivering
Check domain verification first. The most common cause is an unverified sending domain.
- Go to Domains in the dashboard
- Confirm your domain shows Verified status
- If pending, click Verify to re-check DNS records
If DNS records aren't verifying:
- Wait 10–30 minutes after adding records (propagation delay)
- Run
dig TXT sendr._domainkey.yourdomain.comto check if DKIM has propagated - Ensure there's no typo in the host field (e.g., some providers auto-append the domain)
domain_not_verified error even after verifying
Some DNS providers append the root domain automatically to subdomain records. For example, if your domain is acme.com and you enter sendr._domainkey as the host, the provider might save it as sendr._domainkey.acme.com.acme.com.
Fix: Check your DNS provider's behavior. If it auto-appends, use the bare subdomain without the domain suffix.
Emails going to spam
- Check your DMARC policy — a loose
p=nonepolicy lets unauthenticated mail through, which can hurt reputation - Verify all three records (SPF, DKIM, DMARC) in the dashboard
- Review email content — spam filters flag excessive images, all-caps subjects, and certain trigger words
- Check your suppression list — sending to known-bad addresses hurts sender reputation
- Warm up gradually — if you recently started sending from a new domain, begin with small volumes
Missing Authorization header
If you're getting 401 unauthorized:
// Wrong — this sends no auth header
const response = await fetch("https://api.sendr.dev/v1/emails");
// Correct
const response = await fetch("https://api.sendr.dev/v1/emails", {
headers: {
Authorization: `Bearer ${process.env.SENDR_API_KEY}`,
},
});
Check that your environment variable is set:
echo $SENDR_API_KEY
# Should print: sndr_live_...
Webhook not receiving events
- Check the webhook is active — call
GET /v1/webhooks/:idand confirmactive: true - Verify your endpoint is reachable — your URL must be publicly accessible (not
localhost) - Check your endpoint returns 2xx — if your handler throws an error and returns 5xx, Sendr retries 3 times then stops
- Review event subscriptions — confirm the events you want are in the
eventsarray - Check server logs — look for incoming POST requests from Sendr's IP ranges
For local development, use ngrok or Cloudflare Tunnel to expose your local server.
Webhook signature verification failing
- Use the raw request body before JSON parsing — the HMAC is computed on the raw bytes
- Check the secret — the signing secret is only shown at webhook creation time. If lost, delete and recreate the webhook
- Compare the full string including the
sha256=prefix
// Wrong — missing prefix
const expected = hmac.digest("hex");
// Correct — include prefix
const expected = `sha256=${hmac.digest("hex")}`;
SDK TypeScript errors
Ensure you're on a recent TypeScript version (5.x+):
npx tsc --version
If you see errors about missing types, ensure the SDK is properly installed:
npm install sendr
# Check it's in package.json
cat package.json | grep sendr
Rate limit errors in development
Test-mode API keys use the same rate limits as live keys. If you're hitting limits during development:
- Use test-mode keys to avoid consuming real quota
- Add a small delay between requests in test loops
- Reduce batch sizes during testing
Free plan limitations
The Free plan has significant restrictions:
| Limit | Value |
|---|---|
| Emails/month | 3,000 |
| Emails/day | 100 |
| Domains | 1 |
| API keys | 2 |
| No overage | Emails stop at the limit |
| Marketing emails | Not available |
| Log retention | 1 day |
If you're hitting these limits regularly, upgrade to Pro.
Email status stuck at queued
Emails typically move from queued to sent within seconds. If stuck:
- Check the dashboard for any error notifications
- Verify the
fromdomain is still verified - Check for any scheduled sends with far-future
scheduled_atdates - Contact support if it persists beyond 15 minutes
Getting help
- Dashboard — check the Emails and Analytics sections for delivery details
- Status page — status.sendr.dev for incidents
- Email support — support@sendr.dev (Pro and Business plans)
- Community — github.com/sendr/sendr/discussions (all plans)
- Dedicated support — Enterprise plans include a dedicated support contact