--at stays manageable until it is due. mailkube scheduled-emails is where you look at those, move them, and call them off. scheduled is an alias for the group and reschedule for update. The shorter mailkube scheduled reschedule <id> means the same thing.
--at fails with scheduling_not_included and exits 5 rather than 3, because the credential was fine and the entitlement was not. See Scheduled emails for the horizon and the plan requirement.
Listing
Paging
A listing returns one page at a time.--page <n> reads a single page, and --all walks every page and hands back the items together.
The two cannot be combined. --all means every page, so naming one as well is a contradiction, and it is refused rather than guessed at.
--max-items stops a walk after N items. It is client-side and is never sent to the server, so the pages it did not need are the pages it does not fetch: --max-items 5 across a thousand matches costs one request. It needs --all; there is nothing to stop otherwise.
Reaching the 1000-item ceiling is reported on stderr, naming the count and the flag that raises it. It is never a silent truncation, because a listing that quietly stopped short would be indistinguishable from a collection that genuinely ends there, and that difference is the whole answer.
Rescheduling and canceling
update takes the same time formats as --at on a send, either RFC 3339 with an offset or a relative shorthand:
--batch-id.
-y in a script. A send that is no longer pending, having already gone out or been canceled, fails with scheduled_email_not_pending.
Whole batches
--batch-id on the original send is what makes this possible. Once sends share a label, they move together:
In a script
Output is JSON the moment it is not going to a terminal, so this needs no format flag:--jq, the stream contract, and the exit codes worth branching on.