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:

DraftComes fromAPI
Email draftsThe Writer, for AI-brief steps of a sequence/api/v1/email-drafts
Reply draftsAnswers 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:

ValueMeaning
all_stepsEvery AI-written email waits for approval.
first_step (default)The first email to each enrolled lead waits for approval; later ones are approved automatically.
noneAI-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 with all_steps;
  • with the Writer at ask_first, none behaves like first_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:

LevelMeaning
suggestThe agent proposes; a person acts.
ask_firstThe agent prepares the action and asks before it happens.
autoThe 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 answers 422 autonomy_cap.
  • The Writer and the Inbox agent may be auto only while Email approval is none. Only an admin can set this, in the app. A request from Zero, MCP or an API key answers 403 human_only. Setting Email approval back from none drops them to ask_first. Choosing none moves an ask_first Writer to auto. Every change is audited (agent.autonomy_changed).
  • The Inbox agent at auto only 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 only interested and question replies 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/settings answers 403 human_only to 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-sends shows the setting and every answer it sent or skipped.
  • Calls and signing stay at ask_first or below.
  • The Caller at suggest doesn'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.