Quiet Hours, Frequency Caps & Consent
Reaching your audience is only half the job — reaching them respectfully is the other half. Hober enforces three delivery controls on your behalf: consent (only message people who opted in), frequency caps (don't message the same person too often), and quiet hours (don't wake anyone up at 3 a.m.).
These controls are evaluated by the platform itself, per recipient, as messages are delivered. They apply to every send path — one-off sends from the Composer, API sends, campaigns, journeys, recurring schedules, and sends initiated by a connected AI agent (see Agent Access (MCP)). There is no client that bypasses them.
1. Message categories: marketing vs. transactional
Every message carries a category, and every category is either marketing or transactional:
- Transactional messages (receipts, security alerts, delivery updates) always deliver. They are exempt from consent checks, suppression lists, and frequency caps.
- Marketing messages are opt-in: a recipient with no recorded subscription for the channel and category is not sent the message.
Because the transactional exemption is absolute, reserve transactional categories for messages the recipient genuinely needs — misusing them for promotions is the fastest way to spam complaints.
2. The delivery guardrail
For each marketing message, each recipient passes through a fixed sequence of checks. The first blocking rule wins:
| Order | Check | Suppress reason |
|---|---|---|
| 1 | Transactional category? | — (always delivered, no further checks) |
| 2 | Recipient on the suppression list (hard bounce, spam complaint, unsubscribe)? | bounced, spam, or unsubscribed |
| 3 | Recipient opted in to this channel + category? | unsubscribed |
| 4 | Frequency cap for the category exceeded? | frequency_capped |
| 5 | Weekly fatigue budget exhausted (all marketing, all channels, rolling 7 days)? | budget_exhausted |
A recipient who fails any check is skipped before any delivery is attempted — nothing is queued, sent, or retried for them. Your job still completes normally; the delivered totals simply reflect only the recipients who passed the guardrail. A heavily suppressed audience is not an error, it is the controls working.
Want to see how hard these rules would bite a real audience before sending? A simulated send evaluates every check above and reports the suppressions — without delivering anything.
3. Consent
Opt-in policy per channel
You choose how consent is established per channel under Settings. Each messaging channel — iOS push, Android push, web push, in-app, email, SMS, and WhatsApp — can use one of two opt-in modes:
- Implicit — registering the device or address counts as consent. Typical for push channels, where the recipient already granted an OS-level permission prompt.
- Explicit — only an explicitly recorded consent counts. Recipients without one are treated as unsubscribed. Typical for email, SMS, and WhatsApp.
The suppression list
Independently of opt-in state, recipients land on the suppression list when their address hard-bounces, when they file a spam complaint, or when they unsubscribe. Suppressed recipients block before the consent check — re-subscribing them requires a fresh, explicit action from the recipient, not from you.
4. Frequency caps
A frequency cap limits how many marketing messages a single subscriber can receive in a category over a rolling window — for example, at most 3 messages per 24 hours. Caps are defined as a maximum delivery count plus a window length, per category:
- The count is based on actual deliveries recorded for that subscriber in the category, not on attempts.
- When a subscriber is at the cap, further sends in that category are suppressed with reason
frequency_cappeduntil older deliveries roll out of the window. - Transactional categories are never capped.
- A workspace-level default cap can apply to marketing categories that have no explicit policy of their own.
Frequency cap policies are managed per workspace and are not yet self-serve editable in the dashboard.
5. Quiet hours
Quiet hours define a daily window during which scheduled messages are deferred, not dropped. The default window is 22:00–08:00.
How the window is evaluated
- The window is evaluated in each recipient's local timezone, not in UTC and not in yours. When a recurring schedule fires, delivery fans out per timezone group, and each group's send time is checked against the window in that timezone. Recipients whose stored timezone is unknown or stale fall back to the schedule's fallback timezone.
- Both overnight windows (e.g. 22:00–08:00) and intraday windows (e.g. 13:00–14:00) are supported.
- A send that lands inside the window is moved to the end of the quiet window — for a 22:00–08:00 window, a message that would have fired at 23:30 goes out at 08:00 the next morning instead.
Audit trail
Each deferral is recorded in the job's delivery log with status quiet_hours_deferred, including the original scheduled time and the time it was deferred to, so you can always see why a scheduled send arrived later than configured.
Exemptions
- Schedules can set a quiet-hours override (
quiet_hours_override) for messages that must go out on time, such as transactional alerts. - Inbox-only in-app messages are exempt: they wait silently in the user's in-app inbox rather than interrupting anyone, so there is nothing to defer. See In-App Experiences.
The Settings page shows your workspace's delivery timezone, which is used for delivery scheduling and quiet hours and is separate from the display timezone used for dashboard charts.
6. What you see after a send
- Delivered / failed counts on the notification detail page include only recipients that passed the guardrail; suppressed recipients are excluded from the attempt entirely.
- Quiet-hours deferrals appear in the delivery log with status
quiet_hours_deferredand the deferred-to time. - Suppression is per recipient, per message — a subscriber capped today is eligible again once their window rolls over, and a subscriber unsubscribed from one category can still receive others they are opted in to.
If your delivered totals look low, check the audience's opt-in state and category before assuming a delivery problem: with an explicit opt-in policy and no recorded consents, a marketing send legitimately delivers to no one.
Optimal send time
On growth+ plans, the Composer offers Optimal time beside Send now and Schedule for later: each recipient receives the notification at their historically best engagement hour within a window you choose (6–48 hours, default 24). Recipients without their own engagement history follow your audience's most common engagement hour; if your workspace has no engagement history at all, they deliver at the window start. Delivery spreads across the window by design — not for urgent sends; use Send now when timing matters more than engagement.
Every targeted recipient is guaranteed to deliver within the window: the job's final wave picks up anyone whose best hour changed while the send was in flight, and a recipient is never sent the same notification twice.
The notification detail reports the split honestly: how many recipients delivered at their best hour vs immediately (current-hour matches and best hours outside the window deliver in the first pass), and how many delivery waves remain while the job is still running.