Schedule the send.
Skip the scheduler.

Add sendAt to a normal transactional request. The email waits in NoticeAPI, stays visible to your app, and can be canceled or moved before sending begins.

  • Up to 30 days
  • Cancel or reschedule
  • Safe retries
Scheduled emailsch_7f19a4Queued
SubjectYour renewal reminderto [email protected]
Scheduled forTomorrow · 3:00 PM UTCWithin 30 days
ProjectAcme Billing
Retry referencerenewal-user-8412
CancelReschedule
Checks run again at send time.Key · project · domain · recipient · send limit
Checked every minuteVisible while queuedControl before sendChecks run again

One extra field

Your existing send request already knows how.

Keep the same endpoint and message. Add the future send time in sendAt, then reuse one stable retry reference from your app.

See sendAt behavior
Schedule an email with sendAt
curl -X POST https://www.noticeapi.com/api/v1/email/send \
  -H "Authorization: Bearer ntc_xxxxxxxxxxxxxxxxxxxx" \
  -H "Idempotency-Key: renewal-user-8412" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "Acme <[email protected]>",
    "to": "[email protected]",
    "subject": "Your renewal reminder",
    "sendAt": "<ISO_TIMESTAMP_UP_TO_30_DAYS_FROM_NOW>",
    "html": "<p>Your subscription renews tomorrow.</p>"
  }'

Queue lifecycle

Queue it now. Keep control until it is due.

The message appears in your logs as soon as it is scheduled. Your app and support team can track it before it sends.

  1. 01SubmitAdd sendAt

    Use the normal send request with a date and time no more than 30 days away.

  2. 02ObserveSee it while queued

    The returned email id resolves immediately, with its scheduled state and send time available to your app.

  3. 03ControlCancel or move it

    A scheduled message can be canceled or rescheduled any time before sending begins.

  4. 04ExecuteRun the send checks

    When due, NoticeAPI checks the current key, project, sender, recipient, and sending limit before delivery.

A controllable queue

Inspect it, cancel it, or change the send time.

The send response returns its id immediately. Use that same id to inspect state, cancel the message, or set a new valid time before it sends.

ControlEndpointBehavior
POSTSchedule/api/v1/email/send

Add sendAt to the standard transactional payload.

GETInspect/api/v1/emails/:id

Read the queued status, stored content, and scheduled time.

POSTCancel/api/v1/emails/:id/cancel

Stop a message while its status is still scheduled.

POSTReschedule/api/v1/emails/:id/reschedule

Replace sendAt with another valid future timestamp.

Checked again before sending

Waiting never bypasses the rules.

Before the email leaves, NoticeAPI confirms the key can still send, the project and domain are active, the recipient is allowed, and the account has room to send. If anything changed while the message waited, it will not send.

Read scheduled-send behavior
Send-time checksReady
API keyActive and still authorized for the project and sender
ProjectActive when the message becomes due
Sending domainVerified and available to this API key
RecipientStill allowed to receive this message
Send limitRoom remains under the account limits
Same recipient timelineSame delivery updates

Safe retries

One app event. One scheduled message.

Reuse the same retry reference with an identical request, and NoticeAPI returns the original scheduled send. Change the request while keeping that reference, and NoticeAPI rejects it.

  • Use a reference up to 256 characters
  • Matching retries return the original scheduled id
  • The reference stays with the email log
Retry referencerenewal-user-8412
01Original requestScheduledsch_7f19a4
02Same reference · same requestOriginal returnedSame scheduled id
03Same reference · changed requestRequest stoppedChanged request rejected
One app event maps to one scheduled message.

Ready to queue it?

Schedule the next customer email in one request.

Add sendAt, keep the returned email id, and let the same NoticeAPI controls carry the message from queued to delivered.