# What your app may send

> Playcode Email carries transactional email only. What counts, what is not allowed and why, the sending limits, and what pauses an app's email.
> Source: https://playcode.io/docs/add-to-your-app/what-your-app-may-send - last reviewed 2026-10-10.

Your app may send transactional email: messages that a person's own action triggers, sent to that person, or to your team about that action. Marketing email, newsletters and email to bought or imported lists are not allowed.

## What counts

| Allowed | Not allowed |
|---|---|
| Password resets, sign-in links and confirmation codes | Marketing email and promotions |
| Order and booking confirmations | Newsletters and digests sent to your customers |
| Receipts and invoices | Cold outreach |
| A message to your team when someone submits a form | Email to a bought, scraped or imported list of addresses |
| A report you set up for your own team, like a daily summary | |

If your app would feel broken without the email, it is almost certainly transactional.

## Why the rule exists

Every app on Playcode sends through shared infrastructure, and mailbox providers like Gmail judge the sender, not the single app. One app that sends marketing or spam hurts the delivery of every other app's password resets. Transactional email only is also a commitment Playcode made to its email provider. For a newsletter or a campaign, use an email marketing service beside your app.

## Sending limits

| Limit | Value |
|---|---|
| Recipients in one email | 10 |
| Emails from one app | 60 a minute and 500 in any 24 hours. Development and Production count separately |
| Verified inboxes under **Notifications** | 10 per project. The workspace's members do not count |
| Verification link | Works once, for 24 hours. It can be sent again after 60 seconds, up to 5 times a day |
| Email body | 512 KiB for each of the HTML and text parts. A longer part is cut, not refused |
| Attachments | Not delivered |
| Stored email | 90 days, and at most the latest 1,000 emails and 100 MiB per project |

## What pauses sending

Playcode pauses an app's sending by itself when its email looks like a loop or hurts delivery:

| Trigger | Sending pauses after |
|---|---|
| A loop in the app's code | 30 identical emails (same recipients, subject and start of the body) within 10 minutes |
| Bounces | 5 permanent bounces within 24 hours, or 10% of at least 50 emails |
| Spam reports | 2 spam reports within 7 days, or 0.5% of at least 200 emails |

While sending is paused, **Settings**, **Email** says "Sending was paused automatically", with the reason. New email is stored as Withheld and is never sent later. Fix the cause, then choose **Resume sending**.

Playcode also pauses an app that sends marketing email. If the app keeps sending it after the pause, Playcode Email is switched off for its workspace.

## Blocked addresses

| Why | What happens | How to clear it |
|---|---|---|
| A permanent bounce or a spam report | The address shows **Suppressed**. Email to it is held, even from your own domain | Fix the address, then remove it under **Notifications**. It must confirm again |
| The person unsubscribed | No more email to them from this project | It stays: removing the address does not clear it |

A temporary bounce, like a full mailbox, blocks nothing.
