Skip to main content

Features

Scheduled Sending

Send any email at a future time. Add a timestamp to a normal send, group a campaign under one batch, and reschedule or cancel before it goes out.

Send now, deliver later

mailkube scheduled sending lets you hand off an email now and have it delivered at a time you choose. Add a scheduled_at timestamp to any normal send, and instead of going out immediately, the message waits until that moment and is transmitted then. Everything that decides the message is settled up front: your quota is charged, the template is rendered, and the send is authorized once, at schedule time. You can schedule anything from a few minutes to 30 days ahead.

Schedule a send

curl -X POST https://api.mailkube.com/v1/messages \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@example.com",
    "from": "noreply@yourdomain.com",
    "subject": "Your weekly digest",
    "html": "<h1>This week at Acme</h1><p>Here is what you missed...</p>",
    "scheduled_at": "2026-08-20T09:00:00+02:00",
    "batch_id": "weekly-digest"
  }'

scheduled_at is an ISO-8601 timestamp with a timezone offset. Any valid offset is accepted and normalized for you, so there is no guesswork over what a time means. The response confirms the message is scheduled rather than sent, and returns an id you use to manage it.

What scheduling gives you

  • One field to schedule. Add scheduled_at to a send and you are done. Times are explicit timestamps, so a message goes out exactly when you meant it to.
  • Group a campaign with batch_id. Tag related sends with a shared batch_id, then reschedule or cancel the whole batch in one call when a launch moves.
  • Change your mind before it sends. Retrieve, list and filter, reschedule, or cancel any pending send, one email or a full batch. Content stays fixed once scheduled, but the time is yours until the message goes out.
  • Full visibility on your webhooks. An email.scheduled event fires when you queue a send, email.sent fires the moment it is transmitted, and email.failed tells you if a due-time check dropped it.

What’s next