eusend
Emails

Scheduling

Schedule a transactional email up to 30 days ahead, then reschedule or cancel it before it sends.

Schedule a transactional email up to 30 days ahead by passing scheduled_at to POST /emails. Until it sends, the email sits in status scheduled and can be rescheduled or canceled.

Schedule a send

scheduled_at accepts an ISO 8601 timestamp or a natural-language time like "in 1 hour" or "tomorrow at 9am", parsed server-side (relative phrasings resolve in UTC). It must resolve to a time in the future and at most 30 days out. All send checks — domain verification, suppression, and your daily and monthly limits — run at schedule time, and the send is debited from your monthly quota immediately (canceling refunds it). Recipients who get suppressed between scheduling and the send time are still dropped at send time.

request
curl -X POST https://api.eusend.dev/emails \
  -H "Authorization: Bearer eu_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "noreply@acme.com",
    "to": "alice@example.com",
    "subject": "Your trial ends tomorrow",
    "html": "<p>Reminder: your trial ends in 24 hours.</p>",
    "scheduled_at": "2026-07-03T09:00:00Z"
  }'
response — 201 Created
{
  "id": "9a8b7c6d-5e4f-4a3b-8c1d-0e9f8a7b6c5d"
}

Reschedule

PATCH/emails/:id

Move a scheduled email to a new time. Only emails still in status scheduled can be rescheduled — once sending has started this returns 409 CONFLICT.

ParameterTypeDescription
scheduled_atrequiredstring (ISO 8601 or natural language)The new send time — an ISO 8601 timestamp or natural language like "in 1 hour" (parsed server-side). Must resolve to the future, at most 30 days out.
request
curl -X PATCH https://api.eusend.dev/emails/9a8b7c6d-5e4f-4a3b-8c1d-0e9f8a7b6c5d \
  -H "Authorization: Bearer eu_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{ "scheduled_at": "2026-07-04T09:00:00Z" }'
response — 200 OK
{
  "id": "9a8b7c6d-5e4f-4a3b-8c1d-0e9f8a7b6c5d",
  "status": "scheduled",
  "scheduled_at": "2026-07-04T09:00:00.000Z"
}

Cancel

POST/emails/:id/cancel

Cancel a scheduled email before it sends. The email moves to the terminal status canceled and the send is refunded to your monthly quota. Like reschedule, this returns 409 CONFLICT once sending has started.

request
curl -X POST https://api.eusend.dev/emails/9a8b7c6d-5e4f-4a3b-8c1d-0e9f8a7b6c5d/cancel \
  -H "Authorization: Bearer eu_live_xxxxxxxxxxxx"
response — 200 OK
{
  "id": "9a8b7c6d-5e4f-4a3b-8c1d-0e9f8a7b6c5d",
  "status": "canceled"
}

Scheduling is per-email and not available on the batch endpoint. For scheduling a campaign to an audience, use Broadcasts — they have their own scheduled_at.