Per-agent reputation graph
Each agent has its own score. It’s built from real replies, bounces, and complaints. You can query it. You can act on it. One agent’s score never changes another’s; a workspace-wide breach pauses them all.
Signals
What feeds the score
Every agent gets its own reputation score, built from real engagement — not synthetic warmup networks. Reputation is isolated per workspace: an agent that crosses the complaint line is paused, and a workspace that crosses it has every agent paused, enforced on every send.
Reply rate
9.22%
Replies380Sends4,120Bounce rate
0.17%
Bounced7Sends4,120Complaint rate
0.02%
Complaints1Sends4,120Reply rate
9.22%
Replies380Sends4,120Bounce rate
0.17%
Bounced7Sends4,120Complaint rate
0.02%
Complaints1Sends4,120Reply rate
Real engagement, not synthetic warmup. Each agent’s reply rate against sent messages contributes to its score.
Agents
hhelloActive0.87bbillingActive0.86ooutreachPaused0.71outreach, last 30 days
Sends940Bounced61 · 6.49%Complaints2 · 0.21%Replies12reason: bounce_rate=0.0649
Bounce + complaint rate
Per-sender complaint cron monitors at 15-min intervals. Crossing 5% bounces or 0.3% complaints auto-suspends the agent (once it has 20+ sends in 30 days) until its rates recover.
A reputation score per agent tells us exactly which one needs attention, instead of one number for the whole account.
Query it
Customers see what we see
The same score and 30-day counts we act on, from the API, either SDK, or the mails_get_reputation tool.
import { createClient } from "@mailsai/sdk";
const mails = createClient(); // reads MAILS_API_KEY
// Your agent's reputation score, built from real engagement
const rep = await mails.agent("hello").reputation();
// { agent_id: "agt_01K…", reputation: 0.873,
// send_count_30d: 4120, bounce_count_30d: 7,
// complaint_count_30d: 1, reply_count_30d: 380 }
// Inbound events carry a sender_reputation estimate from our scan
mails.agent("hello").onReply((event) => {
if ((event.sender_reputation ?? 1) < 0.4) return; // ignore it
});Protection
Enforced on every send
The score is not the only guard. Suppression, inbound scoring and the shared rail work beside it.
Suppression hits
Every complaint counts against the score and suppresses that recipient platform-wide; every unsubscribe suppresses them across your workspace — enforced on every send from any of your agents.
Sender scores on inbound
Inbound events carry a sender_reputation estimate from our scan — refuse to act on low-reputation senders before your classifier even runs.
Dedicated IPs and warmup
Want reputation isolated from the shared pool? Automated dedicated IP warm-up covers when a dedicated IP is worth having, and why below real volume it is not. Evaluating warmup tools? Email warmup service explains why the shared rail makes them unnecessary.
Give your first agent an inbox
Free covers 3,000 emails and 3,000 inbound replies a month, with no card. Upgrade when your agents get busy.
Get your API key