Scheduled email
Schedule emails with one field
In short
Add scheduled_at with an ISO 8601 time to any send and Sendpository delivers it then. Scheduled messages can be listed and cancelled until they go, and quota is refunded if you cancel.One field
scheduled_at: "2026-12-01T09:00:00Z" - the same request, the same response.
Cancel any time
POST /v1/emails/:id/cancel before it goes; quota comes back.
Exactly once
Each scheduled message is claimed once, so it is never sent twice.
Example
await sendpository.emails.send({
from: "Your App <hello@mail.yourdomain.com>",
to: ["customer@example.com"],
subject: "Your trial ends tomorrow",
html: "<p>Upgrade to keep your data.</p>",
scheduled_at: "2026-12-01T09:00:00Z",
});How a scheduled send is held and released
A send with a future `scheduled_at` is stored rather than queued, and a worker picks up whatever is due. Until it fires, the message is cancellable by id - after it fires it is an ordinary send and cannot be recalled, the same as any other email.
The time is absolute, in UTC. That matters for anything user-facing: 'nine in the morning' is a different instant for every recipient, so the conversion from their local time has to happen in your code, where you know their timezone, not in the API.
What it is and is not for
It is for a message that should arrive later - a reminder the day before, a trial-ending notice, a digest at a fixed hour. It is not a replacement for a job queue: the schedule holds one message, not a recurring rule, so anything repeating is still your scheduler calling this API each time.
What it does not do
- A scheduled message still counts against your quota when it sends, not when you schedule it.
- Cancel is only possible before the send time. There is no recall afterwards, because by then the message has left.
Questions
What if a scheduled email can't go out on time?
It is retried until it can - but a message more than 24 hours past its time is failed rather than sent, because a reminder that arrives a day late does more harm than good.
Other features
Transactional email API
Sendpository sends password resets, receipts, sign-in links and notifications with one HTTPS request.
Inbound email API
Sendpository receives email for addresses on your own domain - support@, replies@, or a catch-all - and delivers each message to your inbox, the API and an email.received webhook.
Email webhooks
Sendpository posts a signed JSON webhook when an email is sent, delivered, delayed, bounced, complained about, opened, clicked or received.
Domain authentication (DKIM, SPF, DMARC)
Sendpository generates a 2048-bit DKIM key for every domain, signed as your own domain so it passes strict DMARC alignment, and puts its SPF and bounce records on a dedicated subdomain so your existing company email is never touched.
Send your first email in minutes
6,000 emails a month (up to 200 a day), free forever. No card needed.