Approvals
A required gate before any `live` action that consumes credits or writes externally.
An approval is explicit human confirmation before live work spends credits or writes to an external system.
What requires approval
| Action | Approval required |
|---|---|
Paid provider call (oxygen_tools_run_live) | Yes |
Column run on an AI/tool column with credits_used > 0 | Yes |
Enrichment run (oxygen enrich-column run) | Yes — every run; preview first (free) |
| CRM write, outbound enrollment, LinkedIn action, or campaign sync | Yes |
Workflow fire in live mode touching either of the above | Yes |
Immediate permanent purge (tables delete --now, columns delete --now) | Yes — free but irreversible: refuses with a preview until re-run with --yes |
Workflow fire in live mode that only reads | No |
dry_run / smoke_test anything | No |
Read-only commands (tables query, cells inspect, etc.) | No |
Approval gates are not only about money: a free action that irreversibly destroys workspace data (like an immediate purge) sits behind the same preview-then-approve pattern as paid spend. The default tables delete path needs no approval because it is reversible — the table stays restorable until its scheduled purge.
What to review
Before approving live work, check:
| Field | What to confirm |
|---|---|
| Scope | Table, column, workflow, filters, row ids, and row count |
| Provider or integration | Which tool, CRM, outbound system, or social action will run |
| Mode | live, not dry_run or smoke_test |
| Credit ceiling | The --max-credits value you are about to authorize |
| Preview | Sample inputs/outputs or a preflight result |
| Destination | External account, campaign, list, CRM object, or table column |
CLI and MCP responses include structured JSON and often a web_url; use the web view or widget to inspect the same run before continuing.
CLI patterns
oxygen tools run <tool-id> --input-json '{...}' --mode dry-run --json
oxygen tools run <tool-id> --input-json '{...}' --mode live --approved --max-credits 5 --json
oxygen table-runs create <table-id> --column <column-key> --limit 100 --approved --max-credits 100 --json
oxygen enrich-column preview <table-id> --capability work_email --limit 100 --json
oxygen enrich-column run <table-id> --capability work_email --limit 100 --approved --max-credits 100 --json
oxygen workflows call <workflow> --input-json '{...}' --mode dry_run --json
oxygen workflows call <workflow> --input-json '{...}' --mode live --approved --max-credits 100 --json--mode is required on every workflows call; a live call also requires both --approved and --max-credits.
Without --approved, oxygen enrich-column run fails with approval_required (exit 7) and spends nothing.
For generated-message review queues, use:
oxygen reviews next --json
oxygen reviews accept <review-id> --json
oxygen reviews reject <review-id> --auto-rerun --jsonReview queues are for human-in-the-loop content such as AI-generated outreach, not a replacement for preflighting paid provider runs.
Standing permissions
Three paths let work run later without a per-delivery approval. Each is armed once, explicitly, and each carries its own credit ceiling.
| Standing grant | How it is armed | Bound to |
|---|---|---|
| Autonomous workflow trigger (cron, webhook, event) on a tool-calling workflow | oxygen workflows enable <workflow> --approved --max-credits <n> | That workflow revision — republishing re-arms |
| Table auto-run | oxygen tables auto-run set <table> --columns <csv> --max-credits <n> | The saved column set; rows written by import, insert, upsert, or webhook queue those columns |
| CRM record enrichment | oxygen crm enrichment list, then oxygen crm enrichment enable <preset> --object <object> | The saved enrichment set on that CRM object; every record written to it enriches, bounded per batch |
Omitting --max-credits falls back to your plan tier's default per-delivery ceiling — binding for table and CRM auto-runs, monitored only for workflow triggers. See Spend caps.
Related
- Modes — which modes require approval.
- Spend caps — the credit limit attached to every approved run.
- Runs — inspecting what an approved run actually did.