Scheduled messages
Pass scheduled_at (ISO timestamp or epoch ms, up to 30 days out) to
POST /v1/messages and the message is queued instead of sent:
bash
curl -X POST https://api.joinsimplesms.com/v1/messages -H "Authorization: Bearer $SIMPLESMS_API_KEY" -H "Content-Type: application/json" -d '{"to":"+14155550132","from":"+15005550110","body":"Reminder!","scheduled_at":"2026-09-01T15:00:00Z"}'The response is a scheduled_message with a job_ id. Delivery happens on
the next queue flush after the timestamp (within a minute).
The schedule reserves nothing
Opt-out and quota are re-checked at send time, not at scheduling. A recipient who opts out between scheduling and sending is skipped; a schedule does not hold quota.
Listing and canceling
GET /v1/scheduled_messages lists pending messages;
DELETE /v1/scheduled_messages/job_... cancels one that has not sent yet.
Cancellation races are settled atomically; a job mid-send cannot be
canceled. To send one message to many people later, schedule a
batch instead.