Policy

Enforcement policy

The rates we act on, the three steps of the ladder, what each one does to your sending, and how to appeal any of them.

Draft — not yet reviewed by counsel.

This document says what the product actually does, written by the people who built it. A lawyer has not read it. It is published in this state because a product with no published policy is worse than one with a policy that admits what it is, and it will be replaced by a reviewed version before the first paid contract.

last reviewed 2026-09-16

Why this is published

An enforcement policy nobody can read before it applies is not due process. Every number on this page is the number the code acts on: they are read from one module at build time, and a test asserts that they equal what GET /trust/thresholds serves. If the two ever differ, the build fails rather than the page lying.

What we measure

Two rates, over a rolling 7-day window of your own message events. No automatic step until that window holds 100 delivered-or-bounced sends. Simulated sends are excluded.

  • Bounce rate — hard bounces divided by messages sent.
  • Complaint rate — spam complaints divided by messages sent.

An account that has sent nothing has no rate. That is a different answer from a good rate, and we report it as one.

The ladder

StepBounce rateComplaint rateWhat it does
Goodunder 2%under 0.05%Nothing.
Warning2%0.05%Sending is untouched. You get a notification and an email naming the metric and its value.
Paused4%0.08%Sending stops. The owners are emailed. The API refuses with a code that names the reason and the appeal endpoint (POST /trust/appeal).

The throttled state remains in the API for compatibility (4% bounce / 0.08% complaint, 10 messages a minute). The ladder never enters it.

The ladder only steps down automatically. Stepping back up requires the rates to have genuinely recovered below the warn line for the whole window, and it is announced with a trust.restored event rather than happening quietly.

Every step carries the metric, its value and the threshold crossed. There is no step that happens without a reason attached, and no reason that is a category rather than a number.

Why these numbers

The pause lines are the published reputation thresholds (bounce under 4%, complaints under 0.08%). They sit below the thresholds a shared sending reputation typically enforces on the account. We warn first, we email the owners, and an appeal is answered by a person. A silent suspension is not how this ladder works, and a provider-level pause takes everyone's sending down with it.

Appealing

POST /trust/appeal with a reason, or the Trust screen in the console. A human reads it, and the deadline you are answered by is shown on the screen and returned in the API response. An appeal does not pause the clock on the ladder; if the rates recover first, the ladder lifts on its own.

The other enforcement path

Content refused by the abuse scanner, and accounts suspended under /aup, do not go through this ladder — a phishing campaign is not a list-hygiene problem. Those refusals name what was refused and are appealed the same way.

Reading these numbers from code

curl -sS https://api.agentisend.com/trust/thresholds -H "Authorization: Bearer $AGENTISEND_API_KEY"
curl -sS https://api.agentisend.com/trust/standing   -H "Authorization: Bearer $AGENTISEND_API_KEY"

An agent that reads its own standing can back off before we do it for it, which is the entire point of publishing this.