An email API for sending from your own domains, with delivery logs, bounce handling and suppressions built in.
Add a domain, copy its DNS records into your provider, and wait for it to verify. Then create an API key and call POST /v1/emails.
A workspace for one product or client. Its domains, keys, contacts and team stay separate from your other projects.
Once its SPF, DKIM, DMARC and return-path records all verify. Domains that aren't verified can't send.
It means the domain itself. If your DNS provider won't accept @, leave the Name field blank. Use the short names shown, because most providers add your domain automatically.
Usually a few minutes after your records are live. Some DNS providers take longer to publish changes.
A domain can only have one SPF record, so add include:spf.milesender.com to your existing record instead of creating a second one.
3600, or your provider's default. Either works.
Yes. New domains can send 50 emails a day for their first 7 days, then 300 a day. These limits protect your domain's reputation while it builds a history.
Yes, to people who opted in. Marketing emails automatically include an unsubscribe link and the one-click headers Gmail and Yahoo expect.
Transactional emails are triggered by something a person did, such as a receipt or password reset. Set transactional to true for these: they have no unsubscribe link and still reach people who unsubscribed from marketing.
Yes. Put {{unsubscribe_url}} in your email and we'll fill it in instead of adding a link to the footer.
A bounced address is added to your suppressions so you don't keep sending to it, which protects your reputation.
The address is probably suppressed because it bounced or unsubscribed. You can review it on the Suppressions page.
New domains need time to build a reputation. Start with low volume, send to people who expect your email, and keep your list clean.
Send your API key in the Authorization header as Bearer YOUR_KEY. Keep keys on your server and never put them in website or app code. Create and revoke keys under API keys.
POST to /v1/emails with from, to, subject, and html or text. The from address must be on a verified domain in your project. See the Docs page for full examples.
Check Logs in your dashboard, or add a webhook to be told the moment an email is delivered, bounces or fails.
email.sent, email.delivered, email.bounced, email.failed, email.unsubscribed and domain.verified. Choose the ones you want when you add a webhook.
Each call has a Milesender-Signature header. The Webhooks page shows your signing secret once, and has a short code example for checking it.
Any 2xx status within 10 seconds. Do slow work after you've replied, so the call doesn't time out.
We retry for about an hour, then mark the delivery as failed, and you can send it again from the Webhooks page. A URL that keeps failing is turned off until you turn it back on.
Yes, this can happen with retries. Use the Milesender-Delivery header to ignore ones you've already handled.
Yes. Open the webhook's menu and choose Send test, then see the result in its delivery list.
Use a separate key for each app or website. If one is exposed you can revoke it without touching the others, and you can limit a key to a single domain.
Yes. Upload a logo for each domain on the Domains page, and it appears at the top of the HTML emails sent from that domain.
Choose a plan under Settings, Billing. Your request stays pending and the plan starts once payment is confirmed.
Yes, on Pro and Scale. Turn it off under Settings, Billing. It always shows on Starter.
Use Forgot password on the sign-in page. Reset links expire after 1 hour and work once.
Owners and admins can invite people under Settings, Team. Invites are sent by email and expire after 7 days.
Yes. When you create a key, choose a single domain. It can then only send from that domain and read that domain's emails.
Open a ticket and our support team will reply by email.