Send email from Bubble
Bubble's built-in email is fine until it isn't. Wire the API Connector to your own domain, with your own DKIM key, in about ten minutes.
Updated September 09, 2026
Bubble ships with Send email, and it sends from Bubble's infrastructure under Bubble's reputation. That is fine for a contact form and wrong for anything a user waits on — a password reset, a receipt, a verification code — because you have no domain of your own in the picture, no DKIM key you control, and no way to see why one did not arrive.
Moving to your own domain is one API Connector entry.
Set up the connection
In Plugins → API Connector, add a new API and name it Pigeon Atlas. Set Authentication to None or self-handled — the Bearer header goes on the call itself, which keeps it visible where you can see it.
Add one shared header so every call you add later inherits it:
| Key | Value |
|---|---|
Authorization |
Bearer pa_live_your_key_here |
Content-Type |
application/json |
Add the call
Add a call named Send email, method POST, to:
https://pigeonatlas.com/v1/emails
Set Body type to JSON and paste this, replacing the bracketed parts:
{
"from": "Your Company <hello@mail.yourcompany.com>",
"to": "<to>",
"subject": "<subject>",
"html": "<body>"
}
Bubble turns anything in angle brackets into a parameter. Untick Private on to, subject and body so you can fill them from a workflow; leave the from address hard-coded unless you genuinely send as more than one address.
Set Use as to Action, then press Initialize call.
The part that catches people
Initialize has to succeed before Bubble will let you use the call in a workflow, and it actually sends — put your own address in to while you are testing.
Bubble also freezes the response shape at that moment. Our reply is {"id": "..."}, so Bubble records a text field called id and that is what you get back in workflows. If you ever initialize against an error response by mistake, Bubble will remember the error shape instead; delete the call and add it again rather than trying to correct it.
Use it in a workflow
The call now appears under Plugins in the action list. Fill to, subject and body from the thing that triggered the workflow, and store Result of step 1's id if you want to look the message up later.
Before it works
Add mail.yourcompany.com in Pigeon Atlas and publish the three DNS records it gives you — a DKIM key, an SPF record, and an MX record for bounces. Until all three resolve you cannot send from that domain at all, which is deliberate: it is what stops anybody sending as your domain through us.
Use a subdomain rather than the bare domain, and keep marketing on a different one again. A newsletter that draws complaints should not be able to take your password resets down with it.
The full API reference covers attachments, custom headers, scheduling and the delivery webhook.