Buttondown's REST API has always tried to adhere to good RESTful conventions. A POST to /v1/emails creates a new email, and if you don't specify a status, we've historically assumed you want to send it — so the default has been about_to_send. Makes sense in theory, but in practice it catches people off guard. Nobody expects a quick test request to fire off an email to their entire subscriber base.
We've cut a new API version — 2026-04-01 — to make this a little safer. The endpoint behaves identically, with two exceptions:
The default status is now
draft. If you POST to/v1/emailswithout specifying a status, your email is created as a draft instead of immediately queuing to send. No surprises.Sending requires a one-time confirmation. If you explicitly set
statustoabout_to_send, Buttondown returns a400with asending_requires_confirmationerror code — just to make sure that's really what you meant. To confirm, pass theX-Buttondown-Live-Dangerously: trueheader.
You only need to supply the header once per API key. After the first successful send, all subsequent POST requests with about_to_send will go through without it. Think of it as a "yes, I know what I'm doing" handshake.
A few things to note:
- PATCH requests are unaffected. Updating an existing email's status to
about_to_sendworks the same as before, no header required. - Older API versions are unchanged. If you're on
2026-01-01or earlier, everything works exactly as it always has. - The confirmation is per API key, not per newsletter. If you have multiple API keys, each one needs to confirm independently.
If you're not sure which API version you're on, check your API keys page — it shows the version for each key.

