List scheduled messages
List the sends scheduled with send_at that have not gone out yet.
Scheduling itself is a field, not an endpoint: pass send_at (a future ISO-8601 UTC timestamp) on Send a message or Batch send and the message is queued for that moment. This endpoint answers the operational question that follows — *what is still going to go out, and when* — returning every pending scheduled send, soonest delivery first.
GET /v3/messages/scheduled
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | Optional | Page number (1-based). Default 1. |
per_page | integer | Optional | Items per page, max 100. Default 25. |
Response
Each item carries the message's msg_… id together with from, to, subject, tags, the scheduled send_at and created_at. A message leaves this list the moment it starts delivering or is cancelled — use GET /v3/messages/{id} (see Get a message) for its state afterwards, and DELETE /v3/messages/{id} (see Cancel a scheduled message) to cancel it while still pending.
Responses
| Status | Description |
|---|---|
200 | OK. A page of upcoming scheduled messages (id, from, to, subject, tags, send_at, created_at), soonest first, with pagination. |
401 | Missing or invalid API key. |
Code examples
curl https://api.wemail.io/v3/messages/scheduled?per_page=25 \
-H "Authorization: Bearer afn_live_pK7…b9aF"import { WemailClient } from "@wemail/sdk";
const wemail = new WemailClient(process.env.WEMAIL_API_KEY);
const { items } = await wemail.messages.listScheduledMessages({ perPage: 25 });
for (const m of items) {
console.log(m.id, m.sendAt, m.subject);
}from wemail.client import WemailClient
wemail = WemailClient(api_key=os.environ["WEMAIL_API_KEY"])
page = wemail.messages.list_scheduled_messages(per_page=25)
for m in page.items:
print(m.id, m.send_at, m.subject)<?php
$wemail = new \Wemail\WemailClient(getenv('WEMAIL_API_KEY'));
$page = $wemail->messages()->listScheduledMessages(1, 25);
foreach ($page->getItems() as $m) {
echo $m->getId(), ' ', $m->getSendAt()->format('c'), PHP_EOL;
}wemail = Wemail::Client.new(api_key: ENV["WEMAIL_API_KEY"])
page = wemail.messages.list_scheduled_messages(per_page: 25)
page.items.each { |m| puts "#{m.id} #{m.send_at}" }client, err := wemail.NewClient(os.Getenv("WEMAIL_API_KEY"))
page, _, err := client.API.MessagesAPI.ListScheduledMessages(ctx).PerPage(25).Execute()
if err != nil { log.Fatal(err) }
for _, m := range page.Items {
fmt.Println(m.Id, m.SendAt, m.Subject)
}WemailClient wemail = new WemailClient(System.getenv("WEMAIL_API_KEY"));
ListScheduledMessages200Response page = wemail.messages().listScheduledMessages(null, 25);
for (ListScheduledMessages200ResponseItemsInner m : page.getItems()) {
System.out.println(m.getId() + " " + m.getSendAt());
}var wemail = new WemailClient(Environment.GetEnvironmentVariable("WEMAIL_API_KEY"));
var page = await wemail.Messages.ListScheduledMessagesAsync(perPage: 25);
foreach (var m in page.Items)
{
Console.WriteLine(quot;{m.Id} {m.SendAt}");
}{
"items": [
{
"id": "msg_01HBYE7K9Z4PMQDR3W",
"from": "noreply@updates.acme.io",
"to": ["alex@example.com"],
"subject": "Your trial ends soon",
"tags": ["trial"],
"send_at": "2026-06-01T09:00:00Z",
"created_at": "2026-05-10T09:42:18Z"
}
],
"pagination": { "page": 1, "per_page": 25, "total_count": 1, "total_pages": 1 }
}