This guide explains how Send Time Optimization (STO), Silent Hours, Time to Live (TTL), and Throttling work when you combine them.
Each combination starts with a campaign, shows exactly what the system does step by step, and ends with a recommendation. Times are displayed in the recipient’s local time.
The four modifiers at a glance
Each setting controls a different part of delivery: when a push reaches each user, whether it's allowed at that moment, how fast a large audience goes out, and how long the message stays valid.
Send Time Optimization (STO): Delivers to each user at the hour they're most likely to engage, within a window you set.
Silent Hours: Blocks delivery during hours you keep quiet, at night, or during times restricted by local rules.
Time-to-Live (TTL): How long a message stays valid if the phone is offline; once it expires, the push is no longer delivered.
Throttling/Batch Delivery: Sends a large audience in controlled waves so you don't overwhelm your app or servers.
What Silent Hours does to a scheduled time
Silent Hours is the one setting that can stop a message. When a push, whether STO-chosen or a normal send, falls inside a user's quiet window, your Silent Hours option decides what happens to it:
Option | Behavior |
|---|---|
Default | If the time lands in Silent Hours, the message is dropped, and that user doesn't receive it. |
Sent At | Reschedules the affected message to a specific allowed time you choose. |
Send After | Delivers the moment that user's Silent Hours window ends. |
Send Now | If the campaign time itself isn't in Silent Hours but the STO-chosen time is, send immediately; otherwise drop. |
Remember this for every combination below
Rescheduling is a Silent Hours feature (Sent At/Send After). STO never picks a "second-best hour" by itself. So with the Default option, a time that lands in the quiet window is simply dropped; choose Send After or Sent At if you'd rather shift it.
Combination use cases
Eight real situations partners run into. Each one has a campaign example, a step-by-step of what the system does, and a recommendation.
Personalized best hour, but never at night (STO + Silent Hours)
Campaign example: Contoso, a fashion retailer, sends a personalized "the item in your size is back in stock" push. They want each shopper to get it at their own most-active hour, but their brand policy is to never message overnight.
Audience: 180,000 shoppers, personalized per user
STO: On, best hour per user
Silent Hours: 22:00–08:00
The tricky user: Jane's most-active hour is calculated as 23:00, inside the quiet window
What happens, step by step
STO picks each shopper's best hour without steering around Silent Hours.
For Jane, that's 23:00, inside the quiet window.
The message is dropped; she doesn't receive it. STO does not retry at another hour, and the Launch screen warns you in advance: "The Send Time of your campaign is in the Silent Hours."
A TTL does not rescue it; the panel note is explicit: the message is dropped once Silent Hours starts, even within the TTL period.
Good to know
There's no automatic reschedule; a best-hour pick inside the quiet window is silently lost, with no error and no TTL rescue. The larger your quiet window, the more users this can affect.
Recommendation
Set the Send Time so the whole STO window falls outside your Silent Hours, and treat the "Send Time is in Silent Hours" launch warning as a blocker. Keep the STO window away from the edge of your quiet hours, and don't rely on TTL to recover dropped users.
Personalized reward that expires today (STO + TTL)
Campaign example: Fabrikam, a food-delivery app, sends a "20% off your next order, today only" reward and wants it delivered at each user's best hour, but never after the offer expires at midnight.
Audience: 90,000 users, personalized per user
Created: Campaign built and launched at 12:00
STO: On, window 12:00–20:00
TTL: 3 hours
The example user: John's best hour is 20:00; the offer ends at 24:00
What happens, step by step
At 12:00, the campaign is launched, but nothing is sent to John yet; STO is holding him for his best hour.
The TTL clock does not start at 12:00. It starts only when the message is actually sent out.
At 20:00, STO sends John's push. The 3-hour TTL starts now, so the message stays valid until 23:00.
The time STO spent waiting (12:00→20:00) is not subtracted from the TTL; John gets a full, fresh 3 hours.
23:00 is before the offer ends at midnight, so the reward can never arrive after it's gone.
Good to know
Recommendation
Personalized and throttled on one App Push (STO + Throttling): Pick one
Campaign example: Northwind, a mobile game, wants to announce a new season to 500,000 players. They'd like each player to get it at their best hour (STO) and to release it in controlled waves so their servers aren't hit all at once (Throttling), both on the same App Push.
Audience: 500,000 players
Wanted: STO (best hour per player) + Throttling (e.g. 50,000 every 5 min)
The example player: Alex's best hour is 13:00
What happens, step by step
The panel lets you turn on both, so it looks like they'll work together.
But Throttling releases the audience in waves, pulling players in no particular order across a long stretch of time.
Alex's best hour is 13:00, but his turn in the wave queue may not come up until later. He can be sent at 15:00, two hours past his best hour.
The bigger the audience and the smaller each wave, the longer the whole send takes, and the further players drift from their best hour. In effect, STO stops doing its job.
Good to know
Even though the panel allows both, STO’s timing is lost. Treat STO and Throttling as an either/or choice on a single App Push.
Recommendation
Decide what matters more for this campaign. Choose STO when reaching each user at their best hour is the goal (personalized offers, engagement). Choose Throttling when protecting your systems during a huge one-time send is the goal (a launch or announcement). For a very large personalized send, split it into separate campaigns rather than stacking both on one.
Time-sensitive message meeting the quiet window (TTL + Silent Hours)
Campaign example: Litware, a news app, sends a breaking-news alert that's only useful while it's fresh, so it carries a short TTL. For one reader, the send moment lands just before their Silent Hours begins.
Message: Breaking-news alert
TTL: 30 minutes
Silent Hours: Starts at 22:00
The example reader: The push reaches the send step at 21:50, 10 minutes before the quiet window
What happens, step by step
There's no "hold and resume"; the system decides once, at the send moment.
If that moment were already inside the quiet window, the system would drop the message immediately.
Here it's outside the window (21:50), so the system compares two numbers: time left until the window opens (10 min) and the campaign TTL (30 min), and uses the smaller one → an effective TTL of 10 minutes.
The message is handed to Apple/Google/Huawei with that 10-minute life. It will not survive into the quiet window, and it never carries over to the next day.
Good to know
Recommendation
Big send in waves, with a short shelf life (TTL + Throttling)
Campaign example: Adventure Works runs a flash sale to 400,000 shoppers, released in waves so the app can handle the traffic. Each message carries a 1-hour TTL. The worry: since the whole send takes ~3 hours, will the last waves already be expired by the time they go out?
Audience: 400,000 shoppers
Throttling: ~40 waves over ~3 hours
TTL: 1 hour
The worry: Do wave-40 shoppers get an already-dead message?
What happens, step by step
Each wave's TTL is set when the wave goes out, not when the campaign started.
Wave 1 sends at 10:00 and is valid until 11:00. Wave 40 sends at 13:00 and is valid until 14:00, a full, fresh hour.
Time spent waiting in the throttling queue does not count against the TTL.
So late waves are not expired just because the campaign began 3 hours earlier.
Good to know
TTL protects each wave, but a 3-hour send can still drift into other limits, your offer window, or your Silent Hours. TTL doesn't fix those.
Recommendation
Start large throttled sends early, so even the last waves land inside your offer window and before any quiet hours. Use TTL to guard freshness, and lean on timing (start time + Silent Hours) to guard the window.
Throttled send drifting into the night (Silent Hours + Throttling)
Campaign example: Contoso sends a big weekend-sale push to 600,000 shoppers. Because the audience is large, it's throttled into waves; the send starts at 21:15 and runs past 22:00. Silent Hours is 22:00–08:00. What happens to the waves that go out after the quiet window has begun?
Audience: 600,000 shoppers, sent in throttled waves
Throttling: 30,000 every 10 min (the send runs ~3 hours)
Start: 21:15; later waves go out after 22:00
Silent Hours: 22:00–08:00 (Default)
What happens, step by step
Throttling releases the audience in waves over time, so each wave goes out at its own moment.
A wave that goes out before Silent Hours is delivered; a wave that goes out inside the quiet window is dropped, user by user, not held for later.
Silent Hours is actually checked twice for each wave, so a user who moves into their quiet hours mid-send is still caught.
The wave order doesn't change, and no make-up wave is added for the dropped users.
Good to know
With Default, every wave that overlaps the quiet window silently drops those users. On a long send that can be a meaningful slice of your audience, with no error to warn you.
Recommendation
For sends that may run into the night, either schedule so the waves finish before the quiet window, or set the Silent Hours option to Send After so late-wave users are delivered when their window ends instead of being dropped.
Best hour + night protection + expiry (STO + Silent Hours + TTL)
Campaign example: Contoso combines all three on one personalized reward: each shopper's best hour (STO), no messaging overnight (Silent Hours), and an expiry so the reward never arrives stale (TTL). Which setting decides whether a shopper receives it?
STO: On, best hour per user
Silent Hours: 22:00–08:00
TTL: Set to match the reward's lifetime
What happens, step by step
STO picks each shopper's best hour and schedules it; this step never drops anyone.
At that moment, Silent Hours checks the time. If it's inside the quiet window, the shopper is dropped (or rescheduled, if you set Send After / Sent At). This is the only step that can drop a user.
For everyone who passes, TTL keeps the message from arriving stale.
The real risk isn't TTL; it's STO landing a shopper's best hour right inside Silent Hours, which drops them before TTL even matters.
Order of operations
STO (picks the hour) → Silent Hours (allows or drops) → TTL (limits freshness for those allowed). Only Silent Hours can drop a message; STO and TTL never do.
Good to know
TTL can't rescue a best-hour pick that collides with the quiet window; that's a drop, exactly as in use case 1.
Recommendation
Same as use case 1: if you can't afford dropped users, use a Silent Hours reschedule option (Send After / Sent At), and keep the STO window away from the edge of your quiet hours.
The full three-way personalized send (STO + Throttling + Silent Hours): See note
Campaign example: Northwind plans a large personalized announcement: split into waves for server safety (Throttling), timed to each player's best hour (STO), and never touching nighttime (Silent Hours). Can all three run together, and which one wins?
Audience: Large, personalized
Wanted: STO + Throttling + Silent Hours together
Silent Hours: Quiet window enforced
What happens, step by step
All three can be turned on. STO assigns each player an hour; when that hour arrives, those players are written into a wave and released at your throttling rate (e.g., 50,000 / 5 min).
Silent Hours is checked both when the wave is written and when it's sent, so quiet-window users are dropped at either point.
The flow is: STO (schedules) → Silent Hours (first check, may drop) → Throttling (releases in waves) → Silent Hours + TTL (final check when the wave is sent).
The only setting that drops a user is Silent Hours. STO and Throttling only affect timing; TTL only limits freshness.
Good to know
The STO + Throttling limitation from use case 3 still applies here: because throttling releases players in waves over a long stretch, best-hour timing is not reliably honored, even inside this combined flow.
Recommendation
Silent Hours and Throttling work well together for a big overnight-safe send. If precise per-user best-hour timing also matters, don't rely on STO in the same campaign; pick STO or Throttling (see use case 3) and use Silent Hours alongside whichever you choose.
Below is what each combination does, at a glance.
Combination | What happens | Use it when |
|---|---|---|
Best hour per user; a pick inside the quiet window is dropped (Default) or shifted (Send After / Sent At). | Personalized timing with a nightly cutoff. | |
Best hour per user; TTL starts at the send moment, so the STO wait never expires it. | Personalized, time-limited offers. | |
Throttling’s wave order overrides best-hour timing; STO is effectively lost. | Pick one, not both. | |
One-time decision: dropped if inside the window, otherwise TTL is capped to the time left before the window. | Time-sensitive messages under quiet-hour rules. | |
Each wave gets a fresh TTL at its own send time; late waves don't expire. | Large, time-sensitive sends. | |
Waves in the quiet window are dropped per user (checked twice); wave order is preserved. | Big sends that must avoid nighttime. | |
STO + Silent Hours + TTL | STO schedules → Silent Hours allows/drops → TTL limits freshness. Only Silent Hours drops. | Personalized, night-safe, expiring offers. |
All run together; Silent Hours handles drops, but the STO + Throttling limitation still applies. | Big night-safe sends; favor Throttling over STO here. |