> ## Documentation Index
> Fetch the complete documentation index at: https://docs.minimo.it/llms.txt
> Use this file to discover all available pages before exploring further.

# Protections and sending limits

> How Minimo keeps one restaurant's bad list from hurting the others: daily limits for new restaurants, first campaigns reviewed, automatic pause

## Overview

All your restaurants send through Minimo. One restaurant that emails an old purchased list can get complaints and bounces that hurt the delivery of everyone. These protections stop that restaurant early, **alone**, before it affects the others.

They only touch a restaurant's **marketing** emails (campaigns, review requests, offers, any marketing template sent with a `tenant`). Booking confirmations, reminders and other utility emails, sign-in emails and sends without a `tenant` are never limited or paused by them.

## Daily limits for new restaurants

| Phase | When | Promotional emails per day |
| - | - | - |
| New | The restaurant's first 7 days | 200 |
| Warming up | Until day 30, or longer while its complaints or bounces are high | 1,000 |
| Established | After 30 days with clean numbers | No tenant limit |

* Days are UTC days. The phase starts the first time Minimo sees the restaurant (its profile, a session or a send).
* Over the limit, a send answers `422 TENANT_DAILY_CAP_REACHED` with `dailyCap`, `usedToday`, `remainingToday` and `tier`, and nothing is queued. An automatic marketing email due at that moment is skipped with `tenant_daily_cap_reached`. Never silently.
* A large campaign (over 300 recipients) of a new or warming-up restaurant goes out in waves over a few hours.
* The restaurant sees it in plain words in the [Statistics widget](https://docs.minimo.it/guides/embedded-widget-statistics.md), under **Sending limited**: "You are in the start-up phase: you can send up to 200 promotional emails a day, 40 sent today. The limit grows by itself over time. Automatic messages have no limit."

## First campaigns reviewed by Minimo

The first **3** campaigns of every restaurant wait for a person at Minimo before they go out.

* The send answers `status: "in_review"` and the [Campaigns widget](https://docs.minimo.it/guides/embedded-widget-campaigns.md) shows "Campaign under review" with the pill **In review**.
* Approved: the campaign is queued at once, nothing else to do. Rejected: it shows **Not approved** and does not count; the restaurant creates a new one, which is reviewed again.
* From the fourth campaign on, campaigns go out with the normal checks.

## Automatic pause

Minimo checks each restaurant's last 7 days every few minutes, and between the waves of a running campaign. A restaurant's marketing is **paused** when:

| Trigger | Line |
| - | - |
| Spam complaints over its marketing sends | Above 0.3%, with at least 100 marketing sends and at least 2 complaints |
| Complaints on one campaign | 2 or more |
| Hard bounces (address does not exist) over its sends | Above 5%, with at least 100 sends |

One complaint alone never pauses a restaurant. Your **whole workspace**'s campaigns are paused when 2 or more restaurants are paused, or when the workspace's complaint rate is above 0.3% (at least 200 sends and 2 complaints).

While a restaurant is paused:

* a campaign or a marketing send for it answers `409 MARKETING_SEND_ON_HOLD` (with `tenant` and a `userMessage` in English and Italian); a running campaign stops at its next wave;
* an automatic marketing email due for it is skipped with `tenant_on_hold`;
* its booking confirmations and reminders keep going out normally;
* the [Statistics widget](https://docs.minimo.it/guides/embedded-widget-statistics.md) shows "Sending paused", without the reason or the numbers.

Minimo is alerted on every pause. Only Minimo can lift it: write to us with the restaurant's reference.

## Read it from your backend

Permission `widgets` or `events`:

```bash theme={null}
curl https://api.minimo.it/public/v1/tenants/restaurant_4812/reputation \
  -H "Authorization: Bearer YOUR_MINIMO_KEY"
```

```json theme={null}
{
  "data": {
    "tenant": "restaurant_4812",
    "windowDays": 7,
    "sent": 0,
    "marketingSent": 0,
    "complaints": 0,
    "complaintRate": 0,
    "hardBounces": 0,
    "hardBounceRate": 0,
    "bounces": 0,
    "maxBroadcastComplaints": 0,
    "complaintsLifetime": 0,
    "hold": { "held": false, "since": null, "reason": null, "setBy": null },
    "workspaceHold": { "held": false },
    "rampUp": {
      "tier": "new",
      "dailyCap": 200,
      "usedToday": 0,
      "remainingToday": 200,
      "firstSeenAt": "2026-11-08T08:17:26.939Z"
    },
    "thresholds": {
      "complaintRate": 0.003,
      "minMarketingSends": 100,
      "minComplaints": 2,
      "broadcastComplaints": 2,
      "hardBounceRate": 0.05,
      "minSendsForBounceRate": 100
    }
  }
}
```

`GET /public/v1/tenants/{tenant}/marketing-hold` returns only the pause: `{ tenant, held, since, reason, setBy }`.

## What helps a restaurant stay clean

* Import only guests who booked or signed up with that restaurant, never purchased or very old lists.
* Record consent where it is given (the booking form) and send it with the event, see [consent](https://docs.minimo.it/guides/embedded-consent.md).
* Let guests unsubscribe easily: the footer and the one-click header are always there, keep them.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.