WhatsApp Quiet Hours, Explained — Why Some Messages Wait Until Morning
If you've ever queued a WhatsApp message through TextMeFlow and watched it sit in queued status for longer than expected, quiet hours are probably why. It's not a bug and it's not the rate limiter — it's a deliberate shaping rule that protects your number, and it behaves differently from almost every other constraint in the API because it never rejects a send. It just waits.
What quiet hours actually do
Any message sent between 22:00 and 08:00 in the recipient's local timezone — derived from their phone number's country prefix, not your account's timezone or server time — is deferred until 08:00 local. The message isn't dropped, isn't queued behind a retry, and doesn't need to be resent: TextMeFlow holds it and releases it the moment the window opens.
The timezone that matters is the recipient's, which is easy to miss if your own business runs on CET. A booking confirmation sent to a customer in Bangkok at 15:00 your time can still land in their quiet-hours window, because it's already past 22:00 there.
curl -X POST https://api.textmeflow.eu/v1/messages \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"to": "+66812345678", "text": "Your booking is confirmed for tomorrow."}'
If that request lands during Bangkok's quiet hours, the API still returns a 202 — the message exists and is scheduled — but its status stays deferred until the window opens, then flips to sent. Poll the message status endpoint or listen for the message.sent webhook if your integration needs to know exactly when it went out.
Why it exists
This is one rule in TextMeFlow's broader anti-spam pipeline: rate limits, random pacing between sends, risk scoring, and STOP handling all work together to keep WhatsApp numbers off Meta's radar. Quiet hours specifically targets a pattern that reads as bot-like even when the content is perfectly legitimate — a burst of messages landing on phones at 3 AM local time. Real businesses that message customers one-by-one, by hand, don't do that; automated systems do, unless something stops them.
Forcing a send during quiet hours anyway (see below) adds a small risk-score bump — +5 per occurrence under the documented trigger list. It's the cheapest trigger on the list precisely because it's meant to be avoidable: don't force it and you never pay it.
When quiet hours actively hurts you
Not every message is a marketing broadcast that can wait until morning. A hotel guest checking in at 22:30 needs their door code now — a door code delivered at 08:00 the next morning is worthless, and holding it back would be worse than sending it "too late" in the anti-spam sense.
That's why quiet hours is a per-account toggle in the portal, not a hardcoded rule: accounts whose traffic is purely transactional (door codes, OTPs, delivery-arrival pings, payment confirmations) can switch it off entirely. Switching it off does not disable the rest of the anti-spam pipeline — rate limits, pacing, and risk scoring for other triggers still apply. It only removes the time-of-day deferral.
How to decide whether to turn it off
Ask what happens if the message arrives at 2 AM instead of at the moment you sent it:
- Door codes, appointment "your table is ready" pings, delivery-arrival alerts — time-sensitive, transactional, single-recipient. Turn quiet hours off for these flows.
- Order confirmations, invoice copies, marketing reminders, appointment reminders sent a day ahead — nothing breaks if they land at 08:00 instead of 23:00. Leave quiet hours on.
If your account mixes both types of traffic, the cleanest fix isn't a global toggle — it's splitting transactional and bulk sends across separate TextMeFlow accounts (or separate paired numbers under multi-device) so the toggle matches the traffic, not the other way around.
What to check if a message seems stuck
- Confirm the recipient's country prefix maps to a timezone currently inside 22:00-08:00 — a message sent at 21:55 CET to a +1 US number can be well within business hours there.
- Check the message status via
GET /v1/messages/{id}—deferredmeans quiet hours, not an error. - If the flow is genuinely transactional and time-sensitive, turn quiet hours off for that account in the portal rather than working around it with retries.
For the full picture of every anti-spam check TextMeFlow runs — rate limits, pacing, risk scoring, STOP handling — see the anti-spam policy. If you're deciding whether a specific message type should bypass quiet hours, the risk score breakdown shows exactly what a forced send costs you.
Try TextMeFlow free — quiet-hours shaping runs on every plan, including the free one: 50 messages a month, no time limit, EU-hosted in Paris.
Zelf WhatsApp-berichten versturen via API?
Gratis voor altijd tot 50 berichten/maand. QR scannen en binnen 5 minuten verstuur je je eerste bericht.
Gratis voor altijd