An agent operating Reply.io can send real messages to real prospects. A successful call executes
immediately — there is no undo. These rules apply across all four access layers.
What counts as high-stakes
Confirm with the user before any action that:
- Sends to a prospect — inbox replies, approving Jason drafts, one-off outreach actions
- Starts outreach — starting a sequence, enrolling contacts into a sequence
- Changes ownership or reach — reassigning contacts, blacklisting an email or a whole domain
- Removes work irreversibly — rejecting a Jason draft (this also removes the contact from the
sequence), deleting contacts or lists
- Removes supervision — switching Jason from Review to Autonomous mode
Configuration changes (assigning mailboxes, schedules, attaching offers/playbooks) are
production-affecting but not prospect-visible — usually worth confirming too.
How each surface enforces it
A timed-out send may already have succeeded server-side — on any surface. Verify with a read
before retrying anything that reaches a prospect.
Scoped keys bound the blast radius
API keys support granular domain:verb scopes (contacts:read, sequences:operate,
inbox:write, …) that behave identically on every surface — a key with sequences:read can list
sequences but not start them, whether the call arrives via REST, MCP, or the CLI.
Give an agent the narrowest scope that covers its job; issue separate keys for separate agents so
one can be revoked without stopping the others. Details: Authentication.
Rate-limit etiquette
One budget covers all surfaces — see Rate limits.
- Honor
Retry-After on 429; back off exponentially on 5xx. (The CLI and MCP
server handle this for you.)
- Paginate instead of hammering:
top/skip on MCP, and the endpoint’s own paging parameters
(usually top/skip) when calling through REST or reply api.
- Never auto-retry a send, approval, start, or enrollment — verify first (see the
safe-retry matrix; the same logic applies to REST and CLI).
Report honestly
Batch operations return per-item results (NotProcessed, AffectedContactIds, per-row import
failures). Read them and report exact counts — “reassigned 48 of 50” — and never claim an item
succeeded unless the response says so.
Next