Call it every time.
Email them once.

Throttle and schedule transactional email with one field on the send you already make. No cache of who was told what, and no cron job to send it later.

POST/v1/send
200 OK
To
ana@acme.com
Template
Usage warning
Throttle
24h, per organisation

Today

148 calls, 1 email

  1. 09:12Sent
  2. 09:13 to 23:58147 throttled
  3. Tomorrow 09:12Next allowed

What you get

Throttle, 24h

Usage warning to ana@acme.com

  • Mon 09:12Sent
  • Mon 09:40Throttled
  • Mon 16:05Throttled
  • Tue 09:15Sent

At most once per window

Send from every request that hits the limit. The recipient gets the warning once a day, and the window runs from the email they actually received.

Sends Mon 1 Nov at 09:00

Your trial ends in 3 days

Scheduled
ana@acme.comCancel send

Later, in the same call

Add a time and the email waits, up to 30 days ahead. Move it or cancel it until it goes out, from the API or the dashboard.

/v1/send200 OK
status
"throttled"
email
null
nextAllowedAt
"Tue 09:12"

Nothing to store on your side

A throttled send is a normal response that says so. No email is created, the contact is left alone, nothing is billed, and you keep no table of who was told what.

Also included

  • Per organisation

    Add a key so each organisation gets its own warning.

  • Once per billing period

    Put the period in the key and drop the window.

  • Team-wide alerts

    Hold an alert once for the whole project.

  • Safe under load

    Concurrent sends of one notification send it once.

  • In workflows too

    Let a workflow start at most once a day per contact.

  • From your agent

    The MCP server can schedule, move and cancel too.

One field on the send

Add delivery to the request you already make. Everything else about sending stays the same.

Node.js
// Called on every request that counts towards the plan
await fetch('https://next-api.useplunk.com/v1/send', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: `Bearer ${process.env.PLUNK_API_KEY}`,
  },
  body: JSON.stringify({
    to: user.email,
    template: 'USAGE_WARNING_TEMPLATE_ID',
    data: {used, limit},
    delivery: {
      throttle: {window: '24h', key: org.id}, // at most once a day per organisation
    },
  }),
});

// Or send it later instead of now
delivery: {at: '2026-11-01T09:00:00Z'}

Whatever your rule is

Most limits fit on one line. A few common ones:

A usage warning at most once a day
throttle: '24h'
Once a day, per organisation
throttle: {window: '24h', key: org.id}
Once per billing period
throttle: {key: `${org.id}:${period}`}
A one-time email
throttle: {}
A team alert, at most hourly
throttle: {window: '1h', scope: 'project'}
A reminder in three days
at: '2026-11-01T09:00:00Z'

Plunk or a typical email API

Most email APIs can schedule. Limiting how often someone gets a notification is left to you.

FeaturePlunkTypical email API
Schedule an email for laterUp to 30 days
Move or cancel a scheduled email
Send a notification at most once per periodBuild it yourself
Limit per organisation or billing periodBuild it yourself
Throttled attempts billedNeverNot applicable

Frequently asked questions

Stop building notification throttles.

Start on the free plan with 1,000 emails a month, no credit card needed. When you need more, every email is $0.001, with unlimited contacts and every feature included.