Overview
Some capabilities can preview safely but require explicit approval before execution. Receiptor now enforces this at the capability layer, not only in the web assistant prompt. That means the same approval policy is reused across:- REST API and API key clients
- MCP clients
- CLI
- Web assistant
- WhatsApp assistant
When approval is required
Common examples:documents.bulk-editwithdryRun: falsedocuments.resolve-duplicateswithdryRun: falseintegrations.send-to-integrationwithdryRun: falseintegrations.unlink-documentwithdryRun: falseentities.cleanupwithdryRun: false- document archive/unarchive
- entity delete/merge
rules.executewithdryRun: false
REST API behavior
When a capability requires approval,POST /v1/capabilities/:slug returns a successful response with status: "approval_required" instead of executing the mutation.
approvals.getapprovals.approveapprovals.reject
MCP behavior
MCP capability tools follow the same policy. Instead of executing immediately, a gated tool call returns anapproval_required payload and points the client at the approval tools:
approvals_getapprovals_approveapprovals_reject
CLI behavior
The CLI surfaces approval-required executions directly and includes built-in commands:Web assistant behavior
The web assistant uses LangGraph interrupt/resume. Risky actions pause the graph and render an approval card inline in the conversation.WhatsApp behavior
WhatsApp uses reply buttons for approval:ApproveReject
Currency resolution
All approval-capable interfaces resolve currency from workspace context first. Priority order:- organization/workspace currency
- user fallback currency
usd