WhatsApp message time-to-live: stop codes, reminders and delivery updates from arriving too late
A customer's phone is off for a few hours, and when it comes back WhatsApp delivers a verification code that expired long ago, or a "your courier arrives in 20 minutes" message for a parcel delivered at noon. Message time-to-live tells WhatsApp when to give up. What the defaults are for each template category, which values fit which message, and how to set it in MonoChat.
MonoChat Team Updated: 7 min read
On this page
A customer asks for a sign-in code while boarding a plane. Their phone goes into flight mode, and four hours later, on landing, WhatsApp delivers a code that expired after ten minutes. Another customer gets “your courier is 20 minutes away” in the evening, for a parcel that was left with a neighbour at noon. A clinic’s “your appointment starts in one hour” arrives the next morning.
None of these messages is wrong when it is sent. It is wrong when it arrives. WhatsApp keeps trying to deliver a message to a phone that is off or offline, and for most templates it keeps trying for up to 30 days. Message time-to-live (TTL) is the setting that tells WhatsApp when to stop.
Since version 3.8.46, MonoChat’s template builder lets you set it on Utility and Authentication templates, as it already could on Marketing templates. This guide explains how time-to-live works, the defaults and limits of each category, which value fits which message, and how to set it.
How WhatsApp retries a message
When you send a template message, WhatsApp first tries to deliver it to the customer’s phone. If the phone is switched off, has no connection or has been offline for a while, the message waits on WhatsApp’s side and WhatsApp retries. Meta calls the length of that retry period the message’s time-to-live.
Two things happen when the time-to-live runs out:
- The message is dropped. Meta’s documentation says the system drops messages that cannot be delivered within the default or custom time-to-live. The customer never sees it.
- You get no delivered status. Meta’s advice is simple: if no delivered webhook arrived before the time-to-live ended, assume the message was dropped.
The default retry period is long because most messages are still useful days later: a receipt, a statement, a newsletter. The messages this guide is about are the ones that are not.
Defaults and limits by category
Meta sets the time-to-live per template, and the allowed range depends on the template’s category:
| Category | Default | Range you can set | In MonoChat (seconds) |
|---|---|---|---|
| Authentication | 10 minutes (30 days for templates created before 23 Oct 2024) | 30 seconds to 15 minutes | 30 to 900 |
| Utility | 30 days | 30 seconds to 12 hours | 30 to 43200 |
| Marketing | 30 days | 12 hours to 30 days | 43200 to 2592000, on an account onboarded to the Marketing Messages API |
Three details are easy to miss:
- Old authentication templates keep 30 days. If your verification template was created before 23 October 2024 and you never set a time-to-live, a code can still arrive weeks late. Setting a value on it fixes that.
- Utility has no default short window. A delivery update with no time-to-live set is retried for 30 days, as long as a newsletter.
- A category change clears the value. When Meta moves a template to another category, it clears the time-to-live, and the template falls back to the default of its new category until you set a new value in that category’s range.
Which value fits which message
Set the time-to-live to the moment the message stops being true or useful, not to the moment you would like the customer to read it. Some starting points:
| Message | Category | Suggested time-to-live | Why |
|---|---|---|---|
| Sign-in or verification code valid for 10 minutes | Authentication | 600 seconds or less | Meta advises a time-to-live equal to or shorter than the code’s validity |
| Payment confirmation code valid for 5 minutes | Authentication | 300 seconds | A code that arrives after it expires only creates a support ticket |
| ”Your courier arrives in about 30 minutes” | Utility | 1800 seconds | After that, the courier has come or gone |
| ”Your table is ready” or “your order is ready for pickup” | Utility | 1800 to 3600 seconds | Useful while the customer is nearby |
| Appointment reminder sent 3 hours before | Utility | 10800 seconds | Dropping it after the appointment time avoids a confusing message |
| Same-day delivery slot confirmation | Utility | 21600 to 43200 seconds | The slot is over by the evening |
| Order confirmation, receipt, invoice | Utility | Leave empty | Still useful days later |
| A 48-hour flash sale | Marketing | 172800 seconds | The offer ends when the sale ends |
Two rules of thumb:
- Leave it empty when late is still fine. A receipt that arrives tomorrow is better than none. Do not set a short time-to-live on messages that must always arrive.
- Plan the fallback when late is worse than never. A dropped code should lead to “resend code” in your app; a dropped “courier nearby” message can lead to a call from the courier. Decide that before you shorten the time-to-live.
How to set it in MonoChat
You need a WhatsApp number connected as a WhatsApp Business (Cloud) channel.
1. Open the templates. Go to Settings › Chat › Channels, open the ⋮ menu of the channel and choose Template Messages.
2. Create the template. Click Create and choose the category: Utility for updates, Authentication for codes. For a code, choose the One-time password type; for an update, Standard, or From Meta’s library to start from one of Meta’s ready-made utility templates (see our guide to the template library).
3. Enter the time-to-live. Under the name and language, fill in Message time-to-live (seconds). MonoChat checks the range as you type and shows “Enter a value between 30 and 43200 seconds” for Utility or “between 30 and 900 seconds” for Authentication when the number is outside it. Leave it empty to keep WhatsApp’s default.
4. For codes, match the validity. In a One-time password template, Code valid for takes 1 to 90 minutes. Set the time-to-live to the same length or shorter. A code valid for 10 minutes with a time-to-live of 600 seconds never arrives after it stops working.
5. Submit. Finish the message, buttons and examples as usual (our guide to creating a WhatsApp template walks through every field) and submit it for review. The time-to-live travels with the template: every message sent from it, from the chat, a flow, a bulk message or your own system, uses the same value.
Marketing templates show the same field only when your WhatsApp Business Account is onboarded to Meta’s Marketing Messages API, which MonoChat detects on its own. The range there is 43200 to 2592000 seconds.
An example: a clinic’s same-day messages
A dental clinic sends three kinds of WhatsApp messages from a MonoChat flow linked to its booking calendar:
- Booking confirmation (Utility, no time-to-live). It is still useful if the patient reads it the next day.
- Reminder three hours before (Utility, 10800 seconds). If the patient’s phone is off all morning, the reminder is dropped once the appointment starts instead of arriving afterwards.
- “The doctor is running 20 minutes late” (Utility, 1200 seconds). It is only true for the next twenty minutes.
The flow sends each one with the Send Template Message node. When a patient replies “can we move it to 5 pm?”, the reply opens the 24-hour customer service window and lands in the shared inbox, where the receptionist answers in free text.
The confirmation could share a template with the reminder if the clinic did not care about timing. Because time-to-live is set per template, messages that need different lifetimes need separate templates.
What it costs
Meta charges per delivered message, at the rate of the template’s category and the recipient’s country. Its pricing page says businesses are only charged when a message is delivered, so a message dropped at the end of its time-to-live is not charged. Shortening the time-to-live therefore never costs more; at most it saves the charge for a message that would have arrived too late to help. Meta bills your business directly, and MonoChat, an official Meta Business Partner, adds no markup. Estimate a campaign with the bulk messaging calculator.
Checklist
- List every template whose message stops being true after a time: codes, “on the way”, “ready”, same-day reminders, flash sales
- Authentication templates: time-to-live equal to or shorter than Code valid for
- Authentication templates created before 23 Oct 2024: set a value, or they keep 30 days
- Utility updates tied to a time: a time-to-live that ends when the update stops being true
- Receipts, confirmations and invoices: left empty
- Separate templates for messages that need different lifetimes
- A fallback for dropped messages: resend in the app, a call, a new message when the customer writes
- After Meta recategorises a template: set the time-to-live again
Sources
- Meta for Developers: Configure message time-to-live (retries, defaults and ranges per category, dropped messages, delivered webhook, authentication advice, recategorisation; opened 6 Nov 2026)
- Meta for Developers: Pricing on the WhatsApp Business Platform (“Businesses are only charged when a message is delivered”; opened 6 Nov 2026)
- MonoChat help center: Template Messages (Message time-to-live field and ranges, One-time password code validity, Marketing Messages API; opened 6 Nov 2026)
- MonoChat changelog 3.8.46 (time-to-live for Utility and Authentication templates; opened 6 Nov 2026)
Put this into practice with MonoChat