Account
Suppression & Suspension
How SendFleet handles bounces, spam complaints, suppressed recipients, and account suspension, and what you need to do on your side to stay well clear of the limits.
Suppression
When an address hard-bounces or files a spam complaint, it is added to a suppression list. Later sends to that address are not delivered, the attempt is skipped rather than made.
Suppression is scoped to your account, so one sender's bad address never blocks another's legitimate mail to the same person.
Why it exists
Re-sending to an address that already bounced burns your quota, damages your sender reputation, and, because shared accounts deliver through common infrastructure, degrades deliverability for everyone on the platform. Suppression is the backstop that keeps one bad list from becoming everyone's problem.
What gets suppressed
| Event | Suppressed? | Notes |
|---|---|---|
| Hard bounce (Permanent) | Yes, immediately | The address does not exist, or the mailbox is permanently unavailable. Never retry it. |
| Soft bounce (Transient) | No | A temporary condition such as a full mailbox or an unavailable server. The delivery platform may retry on its own. |
| Spam complaint | Yes, immediately | The recipient marked your mail as spam. Continuing to send to them is the fastest route to a suspension. |
| Manual addition | By support | Support can add addresses when there is a clear reason to. |
What happens when you send to a suppressed address
The sequence is:
| Step | What you see |
|---|---|
| 1. You call POST /v1/send | 200 OK with "success": true, exactly as for any other accepted send. |
| 2. Delivery is processed | The recipient is found on the suppression list, so no delivery is attempted. |
| 3. The send resolves | The email log status becomes suppressed and an email.suppressed webhook fires with a reason. |
| 4. Your counters | The send counts against your monthly quota but not against your bounce rate — a skipped delivery is not a bounce. |
Handling it in your code
Because the outcome arrives asynchronously, handle it in your webhook handler rather than around the send call. Subscribe to email.suppressed and treat it as permanent.
# Fires from your verified webhook handler.
# See /webhooks for signature verification.
def handle_event(event_type, payload):
if event_type == "email.suppressed":
# Permanent. Stop sending to this address from your own system too -
# every attempt still costs you a message against your monthly quota.
db.mark_undeliverable(
payload["recipient"],
reason=payload.get("reason", "suppressed"),
)
elif event_type == "email.bounced" and payload.get("bounce_type") == "Permanent":
db.mark_undeliverable(payload["recipient"], reason="hard_bounce")
elif event_type == "email.complained":
db.mark_unsubscribed(payload["recipient"])Bounce and complaint processing
Delivery events are processed automatically and reflected in your logs, your counters, and your webhooks.
| Event | What happens |
|---|---|
| Permanent hard bounce | 1. The address is suppressed 2. The log status becomes bounced3. email.bounced fires, if you subscribe to it4. Your bounce counter increases, feeding abuse detection |
| Spam complaint | 1. The address is suppressed 2. The log status becomes complained3. email.complained fires4. Your complaint counter increases |
| Successful delivery | 1. The log status becomes delivered, with a timestamp2. email.delivered fires |
| Rejected before sending | 1. The log status becomes rejected2. email.rejected fires with the reason |
| Permanent send failure | 1. The log status becomes failed2. email.failed fires with the reason |
Automatic enforcement
SendFleet monitors delivery quality to protect the shared sending pool. Sending-quality problems can lead to a warning, a temporary pause or suspension. The effects on sending and billing are described below.
What to monitor
| Signal | What it means for you |
|---|---|
| Hard bounces | Remove permanently undeliverable addresses from your application and review how you collect recipients. |
| Spam complaints | Stop sending to recipients who report your mail as spam, and review whether your messages were expected. |
| Warning email | While a rate is getting close to a limit, we email your account address with what to check, so there is time to fix the cause before anything happens. Nothing about your account changes, and you can keep sending. |
| Severe spam reports | A report classifying your mail as fraud or virus acts on its own, whatever the volume or rate around it. An ordinary mark-as-spam click does not: it counts toward your complaint rate and is judged by rate like any other signal. |
| Free plan smoke tests | The one other exception. A spam complaint on a free-plan Shared smoke test, which can only have gone to your own address, permanently suspends the account on the first report, with no warning and no pause. Free BYOC sending and every paid plan follow the usual steps. |
| Your own test traffic | Never counted toward these rates. See Testing Sends. |
Step 1: a temporary pause
Crossing a limit the first time pauses API sending for 24 hours. It resumes by itself. There is nothing you have to do to restart it, and nothing you have to request. We email your account address when the pause starts, with the time it ends, and again when sending resumes.
| Item | Effect |
|---|---|
POST /v1/send | Every request returns 403 Forbidden with "error": "sending_suspended", and a detail that says the pause is temporary and will lift on its own. |
| Your subscription | Untouched. Your plan keeps running and nothing is cancelled, and nothing is added to any blocklist. |
| Account changes | While the pause is open you cannot add or remove domains, create or delete API keys, change webhook endpoints, or delete the account. Revoking an existing API key still works. Everything unfreezes when the pause lapses. |
Step 2: suspension, on a repeat breach
If your account crosses a limit again after it has already been paused once, that is a repeat breach and the response becomes permanent. We email your account address when it happens, and again if the account is reinstated.
| Item | Effect |
|---|---|
POST /v1/send | Every request returns 403 Forbidden with "error": "sending_suspended". Nothing is queued, and nothing is counted against your quota. |
| Your subscription | Ended immediately. Billing stops on the day of the suspension, you are not charged for any part of the period after it. The charge already in progress is not refunded; see our refund policy. The dashboard billing page shows this as an ended subscription, not a cancellation you can undo. |
| Account changes | While the account is under review you cannot add or remove domains, create or delete API keys, change webhook endpoints, or delete the account. Revoking an existing API key still works, if you think a key is compromised, revoke it first. |
| Everything else | Dashboard access, your email logs, and your existing API keys are untouched. You can review what was sent, read your bounce and complaint counts, and contact support. |
The 403 detail, for both steps
The detail string tells you which of the two you are in: a temporary pause says so and says it will resume on its own; a suspension says the subscription has ended.
{
"success": false,
"error": "sending_suspended",
"detail": "Your account's email sending has been temporarily paused while we review recent delivery results. It will resume on its own. Please contact support@sendfleet.net if you have questions."
}{
"success": false,
"error": "sending_suspended",
"detail": "Your account's email sending has been suspended. Your subscription has been ended and will not be billed again. Please contact support@sendfleet.net to discuss reinstatement."
}Branch on error, never on detail, which is human-readable and explicitly non-contractual. Both steps return the same error code, and the only difference you should code against is whether your sending comes back on its own.
Emails we send you
Everything below goes to the address you sign in with. They are service messages about your account, not marketing, so there is nothing to unsubscribe from; replies go to support. If your mail is filtered, allow verify@sendfleet.net, security@sendfleet.net and notifications@sendfleet.net.
| When | |
|---|---|
| Verify your email | When you sign up, and whenever you ask for another link. The link lasts 24 hours. |
| Password reset | When you ask for one. The link lasts 1 hour and works once. |
| Password changed, new API key, account deleted | Straight after each of these, so you notice if it was not you. |
| Deliverability warning, pause, resume, suspension, reinstatement | As described above. None of them states a rate or a limit. |
| Domain ready, verification failed, records failing | From the hourly DNS check: when a domain becomes able to send, when a new domain still cannot be verified after several checks, and when a record that was verified stops working. |
| Domain verified by another account | If someone else proves ownership of a domain you had added. |
| Payment failed, payment recovered, subscription ended | When a change to your subscription affects sending. Receipts and invoices come from our payment provider. |
| Approaching / reached your monthly limit | At most once a month each, when you pass most of your allowance and when it runs out. |
| BYOC: protection warning or pause, lost AWS access, tracking removed | Before and when your reputation protection pauses BYOC sending; once when SendFleet can no longer use your IAM role; and when tracking resources in your AWS account are removed again soon after a repair. |
Manual suspension
Support can also suspend an account manually for policy violations, spam, abuse, or a breach of the Terms of Service. From your application's point of view this is indistinguishable from an automatic suspension: the same sending_suspended error code, the same 403, and the same effect on your subscription. A manual suspension can also carry additional account restrictions, for example, a registration email address that may no longer be used to create a new account, or a domain that may no longer be added. If that applies to you, support will tell you when you contact us.
Contact support if you need help understanding an account restriction or the steps required for review.
Frequently asked questions
What causes suppression, how suspension is measured, and how to get reinstated.
What triggers an address being added to the SendFleet suppression list?
How can I avoid a sending-quality pause or suspension?
What happens the first time I cross a limit?
Does one spam report suspend my account?
How do I get my SendFleet account reinstated after suspension?
Can I still log in to my dashboard when my account is suspended?
Requesting reinstatement
Reinstatement is always a manual review, never automatic. That is deliberate: an account reinstated without anything changing tends to breach the same limit again within hours, which is worse for you than the suspension.
To request it, email support@sendfleet.net with:
| What to include | Why it matters |
|---|---|
| Your account email | So we can find the account and the suspension record. |
| What caused the rates | A stale list? Addresses from a form with no validation? A purchased list? We need the actual cause, not a guess. |
| What you have changed | List cleaning, double opt-in, unsubscribe handling, validation at capture — something concrete that makes recurrence unlikely. |
| Your expected volume | Helps us gauge risk and set sensible expectations on both sides. |
We aim to respond within two business days.
Reinstatement is not guaranteed. Switching to BYOC or changing plans does not remove an account suspension.
Preventing bounce and complaint problems
| Practice | Impact |
|---|---|
| Use double opt-in for anything list-based | Eliminates typos and invalid addresses at the source. The single biggest lever on bounce rate. |
| Never send to purchased or scraped lists | These are full of dead addresses and spam traps. A single spam-trap hit can damage reputation for months. |
| Honour unsubscribes promptly | Required by law in many jurisdictions, and someone who cannot unsubscribe will use the spam button instead. |
| Remove hard bounces from your own system immediately | Suppression stops the delivery, but every attempt still costs you a message against your quota. |
| Watch bounce and complaint webhooks | Catch a rising rate while you can still fix it, instead of finding out through a suspension. |
| Re-verify addresses that have been dormant for a year | Abandoned mailboxes get recycled into spam traps. An old list is not a safe list. |
| Send transactional mail, not bulk marketing | SendFleet is built for transactional sending. Bulk campaigns carry far higher complaint rates than these thresholds allow for. |