Sendr Docs

Troubleshooting

Common issues and how to fix them.

Emails not delivering

Check domain verification first. The most common cause is an unverified sending domain.

  1. Go to Domains in the dashboard
  2. Confirm your domain shows Verified status
  3. 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.com to 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

  1. Check your DMARC policy — a loose p=none policy lets unauthenticated mail through, which can hurt reputation
  2. Verify all three records (SPF, DKIM, DMARC) in the dashboard
  3. Review email content — spam filters flag excessive images, all-caps subjects, and certain trigger words
  4. Check your suppression list — sending to known-bad addresses hurts sender reputation
  5. 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

  1. Check the webhook is active — call GET /v1/webhooks/:id and confirm active: true
  2. Verify your endpoint is reachable — your URL must be publicly accessible (not localhost)
  3. Check your endpoint returns 2xx — if your handler throws an error and returns 5xx, Sendr retries 3 times then stops
  4. Review event subscriptions — confirm the events you want are in the events array
  5. 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

  1. Use the raw request body before JSON parsing — the HMAC is computed on the raw bytes
  2. Check the secret — the signing secret is only shown at webhook creation time. If lost, delete and recreate the webhook
  3. 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:

  1. Use test-mode keys to avoid consuming real quota
  2. Add a small delay between requests in test loops
  3. Reduce batch sizes during testing

Free plan limitations

The Free plan has significant restrictions:

LimitValue
Emails/month3,000
Emails/day100
Domains1
API keys2
No overageEmails stop at the limit
Marketing emailsNot available
Log retention1 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:

  1. Check the dashboard for any error notifications
  2. Verify the from domain is still verified
  3. Check for any scheduled sends with far-future scheduled_at dates
  4. Contact support if it persists beyond 15 minutes

Getting help

On this page