One queue, two ways in. A key with Scheduled → Read sees everything queued
under your organization, including messages someone scheduled in the web app.
Each row’s
scheduled_by says which.List scheduled messages
scheduled:read)
Takes no parameters. Returns everything queued, sending, or failed for your
organization, soonest first, up to 200.
Delivered messages leave this list — look in the Sent folder with
GET /v1/messages?folder=sent.
Schedule a message
scheduled:write)
The same body as sending, plus send_at.
201 Created. Keep the id — it is the only way to cancel.
Sending happens within about five minutes of
send_at, not to the second.
The worker runs on a five-minute cycle. Nobody schedules mail for 09:00 meaning
09:00:00, and running every minute would be twelve times the work to move the
worst case from five minutes late to one.Your plan’s daily allowance is claimed when the message sends, not when you
schedule it — so a message queued today against tomorrow’s quota is charged
tomorrow. A scheduled message can therefore fail on allowance if the day it
lands on is already full.The one-month window
send_at must be between now and one month ahead. Anything earlier is rejected
as That time has already passed, anything later as Messages can be scheduled up to a month ahead. There is a minute of slack on the floor so a request that
takes a moment to arrive is not refused for it.
Cancel a scheduled message
scheduled:write)
pending message can be cancelled. Once the worker has claimed it the
status is sending and the message may already be in the mail server’s hands —
there is no un-sending it, so the call is refused rather than reporting a
success you would act on.
Errors
See Errors for the full response shape.