Approvals and autonomy
Which emails need a person's approval, who can approve them, and what each agent may do on its own.
ZeroReach drafts a lot on its own, but a person decides what reaches a customer, unless an admin explicitly opts in to automatic sending.
The review queues
There are two kinds of draft, each with its own queue under Approvals in the app:
| Draft | Comes from | API |
|---|---|---|
| Email drafts | The Writer, for AI-brief steps of a sequence | /api/v1/email-drafts |
| Reply drafts | Answers to replies, call recaps, and emails Zero or an MCP client drafts (compose) | /api/v1/reply-drafts |
GET /api/v1/approvals/counts returns how many drafts wait in each queue.
Email approval for sequence drafts
The workspace's Email approval setting (email_approval in the workspace profile) decides which AI-written sequence emails need a person:
| Value | Meaning |
|---|---|
all_steps | Every AI-written email waits for approval. |
first_step (default) | The first email to each enrolled lead waits for approval; later ones are approved automatically. |
none | AI-written emails are approved automatically. This is the admin's opt-in to automatic sending. |
The Writer's autonomy applies on top of this setting:
- with the Writer at
suggest, every draft waits, as withall_steps; - with the Writer at
ask_first,nonebehaves likefirst_step.
A draft with lint warnings always needs approval, whatever the setting. A pending draft can be approved (optionally with a final edit), rejected, or regenerated with feedback. Approving a draft whose enrollment has ended marks it expired (409). The runner sends an approved draft at its next pass, and never before the step is due.
With an API key, approving email drafts needs sequences:write. Zero never approves drafts.
Reply drafts are always reviewed by a person
Reply drafts are never sent automatically, unless an admin turned on the Inbox agent's Auto-send confident answers (see below; off by default). A signed-in person approves (optionally editing) and then sends each one. API keys and connected apps can list, edit and reject reply drafts, and draft new emails for review (POST /api/v1/leads/{lead_id}/draft-email), but approving or sending answers 403:
Only a signed-in person can approve or send email drafts: review this draft in ReachOut (Approvals). API keys and connected apps can draft, edit and reject them.
Agents and autonomy
The Agents hub lists the AI sales team: one agent per stage. Each agent can be turned on or off, paused, and given an autonomy level:
| Level | Meaning |
|---|---|
suggest | The agent proposes; a person acts. |
ask_first | The agent prepares the action and asks before it happens. |
auto | The agent acts on its own. |
The rules are enforced by the server:
- Customer-facing agents are capped at
ask_first. These are the Writer, the Inbox agent, the Caller and the Deal desk, whose actions reach a customer (send, call, approve, sign). Asking for more answers422 autonomy_cap. - The Writer and the Inbox agent may be
autoonly while Email approval isnone. Only an admin can set this, in the app. A request from Zero, MCP or an API key answers403 human_only. Setting Email approval back fromnonedrops them toask_first. Choosingnonemoves anask_firstWriter toauto. Every change is audited (agent.autonomy_changed). - The Inbox agent at
autoonly filters spam and junk by default. It sorts spam, bounces and automatic replies on its own, and every answer still waits for a person. It sends confident answers on its own only if an admin also turns on Auto-send confident answers (off by default) in the Inbox agent card or in Settings → Email approval, after a warning. Then onlyinterestedandquestionreplies with at least 85% confidence, nothing sensitive (unsubscribe, legal, pricing disputes, complaints), a clean draft, at most 20 a workspace per day, through every compliance check. Turning it on is for an admin in the app only (PUT /api/v1/inbox/auto-sends/settingsanswers403 human_onlyto Zero, MCP and API keys, which may only turn it off), and every change is audited (inbox.auto_send_answers_changed).GET /api/v1/inbox/auto-sendsshows the setting and every answer it sent or skipped. - Calls and signing stay at
ask_firstor below. - The Caller at
suggestdoesn't dial on its own: speed-to-lead calls are skipped (agent_suggest_only). - Pausing an agent stops its work: for example, a paused Caller places no calls (
agent_paused), and campaign calls and callbacks become tasks instead. - Compliance checks run before every action, whatever the autonomy.
List agents with GET /api/v1/agents (agents:read with an API key). Change one with PATCH /api/v1/agents/{agent}: this needs the admin role, and agents:write with an API key. The Agents reference lists every agent and what pausing it stops.
Human-only actions
Some actions are only ever done by a person in the app: sending email, placing calls, starting or resuming a campaign, approving or sending drafts, sending a contract for signature or approving a discount, removing members or deleting the workspace, changing roles and billing. Zero refuses them in code and links to the right button instead. See What Zero can do.