App Push Timing Modifiers

Prev Next

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

  1. STO picks each shopper's best hour without steering around Silent Hours.

  2. For Jane, that's 23:00, inside the quiet window.

  3. 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."

  4. A TTL does not rescue it; the panel note is explicit: the message is dropped once Silent Hours starts, even within the TTL period.

Silent Hours 22:00–08:00STO best hour 23:0018:0020:0022:0023:0008:00dropped ✕  (no reschedule · TTL won't recover it)
A best-hour pick that lands inside the quiet window is dropped; there's no reschedule, and TTL won't recover it.

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

  1. At 12:00, the campaign is launched, but nothing is sent to John yet; STO is holding him for his best hour.

  2. The TTL clock does not start at 12:00. It starts only when the message is actually sent out.

  3. At 20:00, STO sends John's push. The 3-hour TTL starts now, so the message stays valid until 23:00.

  4. The time STO spent waiting (12:00→20:00) is not subtracted from the TTL; John gets a full, fresh 3 hours.

  5. 23:00 is before the offer ends at midnight, so the reward can never arrive after it's gone.

STO holding, TTL not runningTTL live · 3h12:0020:0023:0024:00campaign builtsend → TTL startsTTL expiresoffer ends8-hour STO wait, not subtracted from TTL
The 3-hour TTL is anchored to the send moment (20:00), not to when the campaign was built (12:00). The 8-hour STO wait is never subtracted, so the reward stays valid until 23:00, safely before the offer ends.

Good to know

Total time from launch to delivery still adds up (STO wait + a fresh TTL). Make sure the latest hour STO could pick still leaves enough TTL before your offer expires.

Recommendation

Set your STO window so that even its latest possible hour, plus the TTL, finishes before the deadline. Example: if the offer ends at midnight and TTL is 3h, an STO window ending at 20:00 is safe (20:00 + 3h = 23:00); a window ending at 22:00 would risk 22:00 + 3h = 01:00, past the deadline.

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

  1. The panel lets you turn on both, so it looks like they'll work together.

  2. But Throttling releases the audience in waves, pulling players in no particular order across a long stretch of time.

  3. 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.

  4. 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.

STO only, works as intended12:0013:0015:00delivered 13:00 ✓STO + Throttling, best hour missed12:0013:0015:00best hourpulled in a later wavedelivered 15:00 ✕
Throttling's wave order pushes a player past their best hour, so STO no longer delivers on its promise. The two don't truly work together on a single App Push.

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

  1. There's no "hold and resume"; the system decides once, at the send moment.

  2. If that moment were already inside the quiet window, the system would drop the message immediately.

  3. 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.

  4. 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.

Silent Hours (from 22:00)requested TTL = 30 minblocked past 22:00effective TTL = 10 min21:50 send22:00 quiet starts22:20effective = min( TTL 30 min , time to window 10 min ) = 10 min
Sent at 21:50 with Silent Hours starting at 22:00, the requested 30-minute TTL is clamped to the 10 minutes left before the quiet window, the effective TTL is the smaller of the two. Nothing carries into the window or across the day.

Good to know

After hand-off, the phone's app store service (Apple/Google/Huawei) owns expiry, and we get no delivery feedback. If the device is offline for longer than the effective TTL, the message simply won't arrive; e.g., a 5-minute TTL where the phone comes back online 10 minutes later.

Recommendation

For strict quiet-hour compliance, a short TTL is your friend; it guarantees a message can't linger and arrive stale. If reach matters more, a longer TTL helps, but remember it's still capped by the start of the quiet window and never crosses into the next day.

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

  1. Each wave's TTL is set when the wave goes out, not when the campaign started.

  2. 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.

  3. Time spent waiting in the throttling queue does not count against the TTL.

  4. So late waves are not expired just because the campaign began 3 hours earlier.

TTL is recalculated at the start of every wave, never at campaign startWave 1 · flush 10:00 → valid to 11:00Wave 20 · flush 11:30 → valid to 12:30Wave 40 · flush 13:00 → valid to 14:00 (still a full hour)10:0011:0012:0013:0014:00Time spent waiting in the throttle queue is never counted toward TTL.
Every wave gets its own fresh 1-hour TTL at its own flush time (the amber dot). Each teal bar starts where its wave is sent, so the last waves are just as valid as the first, the queue wait doesn't count.

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

  1. Throttling releases the audience in waves over time, so each wave goes out at its own moment.

  2. 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.

  3. Silent Hours is actually checked twice for each wave, so a user who moves into their quiet hours mid-send is still caught.

  4. The wave order doesn't change, and no make-up wave is added for the dropped users.

Waves sent before Silent Hours are delivered; waves sent inside are droppedSilent Hours (from 22:00)delivered ✓dropped ✕ (per user)Wave 1Wave 2Wave 3Wave 4Wave 521:0021:3022:0022:3023:00Wave order is unchanged, and dropped users are not sent later.
During a long throttled send, each wave goes out at its own time. Waves that go out before Silent Hours are delivered; waves that fall inside the quiet window are dropped, user by user. Wave order doesn't change, and dropped users aren't sent later.

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

  1. STO picks each shopper's best hour and schedules it; this step never drops anyone.

  2. 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.

  3. For everyone who passes, TTL keeps the message from arriving stale.

  4. 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.

Order: STO → Silent Hours (the only gate) → TTL clamp → delivered① STOschedules · no drop② Silent Hoursallow or DROPdropped ✕best hour in quiet window③ TTLclamps · no dropDelivered ✓
STO schedules everyone and drops no one; Silent Hours is the only gate that can drop (a best hour inside the quiet window); TTL only trims freshness. The real risk is STO landing a user directly in the quiet window.

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?

What happens, step by step

  1. 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).

  2. Silent Hours is checked both when the wave is written and when it's sent, so quiet-window users are dropped at either point.

  3. 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).

  4. The only setting that drops a user is Silent Hours. STO and Throttling only affect timing; TTL only limits freshness.

Silent Hours is the only step that drops a user, and it is checked twiceSTObest hour + bucketsWrite to waveSilent Hours check ①Throttle queuereleased in wavesFlush + sendSilent Hours check ②+ TTL clampDelivered ✓dropped ✕user is in the quiet window⚠ STO + Throttling: wave order can still push a user off their best hour (see case 3).
The full pipeline. Silent Hours is checked twice; when a user is written to a wave (check ①) and again at flush (check ②), and it is the only step that drops anyone. STO and Throttling shift timing; TTL only trims 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

STO + Silent Hours

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.

STO + TTL

Best hour per user; TTL starts at the send moment, so the STO wait never expires it.

Personalized, time-limited offers.

STO + Throttling

Throttling’s wave order overrides best-hour timing; STO is effectively lost.

Pick one, not both.

TTL + Silent Hours

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.

TTL + Throttling

Each wave gets a fresh TTL at its own send time; late waves don't expire.

Large, time-sensitive sends.

Silent Hours + Throttling

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.

STO + Throttling + Silent Hours

All run together; Silent Hours handles drops, but the STO + Throttling limitation still applies.

Big night-safe sends; favor Throttling over STO here.