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

ParameterTypeRequiredDescription
pageintegerOptionalPage number (1-based). Default 1.
per_pageintegerOptionalItems 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

StatusDescription
200OK. A page of upcoming scheduled messages (id, from, to, subject, tags, send_at, created_at), soonest first, with pagination.
401Missing or invalid API key.

Code examples

cURL
curl https://api.wemail.io/v3/messages/scheduled?per_page=25 \
  -H "Authorization: Bearer afn_live_pK7…b9aF"
Node.js
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);
}
Python
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
<?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;
}
Ruby
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}" }
Go
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)
}
Java
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());
}
.NET
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}"); }
ResponseExample response
{
  "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 }
}