OXYGENOxygen/ Docs
Safety & cost

Billing & credits

What consumes credits, automation actions, plan allowances, managed vs BYOK, lifecycle.

Oxygen meters paid work on two meters, both scoped to one organization:

  • Credits meter managed provider work: paid provider calls and AI column outputs on Oxygen's keys. One credit ≈ one paid provider call or AI column output.
  • Automation actions meter workflow compute: steps, tool calls, row writes, and retries, drawn from a separate per-plan monthly allowance. They never consume credits.

oxygen billing balance --json returns both meters.

What consumes credits

Only managed work — provider calls and AI columns that run on Oxygen's keys:

WorkWhat it draws
Managed enrichment or domain provider call (Oxygen's key)Credits, per call
AI column run on Oxygen's keysCredits, per output
The same provider or AI call on your own key (BYOK)0 credits
Live workflow steps, tool calls, row writes, retriesAutomation actions, never credits
Sequence sends through your connected email accountsNothing — no credits, no actions
Reads, schema changes, dry_run / smoke_testNothing — no credits, no automation actions

BYOK calls still appear in the ledger as zero-credit byok_usage entries, so provider usage stays auditable even when Oxygen bills nothing:

oxygen billing usage --category byok --type byok_usage --json
oxygen billing audit --group-by category --json

Every ledger entry carries a category — managed_ai, managed_enrichment, managed_domain, managed_mailbox, or byok (plus free, subscription, and admin for grants) — so audit --group-by category splits managed spend from BYOK at a glance.

Automation actions

Workflow compute is not billed per run and never consumes credits. Only live runs draw automation actions — dry_run and smoke_test bill nothing — from a monthly plan allowance, counted like this:

  • Plain workflows: 1 action per step execution.
  • Recipes: 1 action per run attempt, plus 1 per checkpoint the recipe code emits at runtime — every ctx.tools.run, ctx.step, ctx.rows.upsert, or similar call. Loops multiply: a run that processes 100 items bills 100+ actions, regardless of how few steps the visual plan shows.
  • Bulk row writes (rows_upsert): 1 action per row written, not per call.
  • Retries: a retried attempt bills its re-executed steps again (already-completed checkpoints replay free).

The number on the workflow page next to the schedule is a static minimum derived from the manifest. Trust the observed actions/run and the 30-day projection shown beside it (also in oxygen workflows get --json under usage.observed) — they come from your real run history.

At the allowance cap, work pauses instead of billing you: new live runs fail with automation_actions_exceeded, and the scheduler stops enqueuing cron-due runs until the monthly window resets — the workflow page and oxygen workflows get show Schedule paused with the resume date. Overage is opt-in and off by default; with overage enabled, extra actions bill at the plan's per-million rate instead of pausing.

oxygen billing balance --json
oxygen billing usage --meter automation_actions --json

For cron cadence limits and a worked 24/7 sizing example, see Triggers.

Plan allowances

PlanPrice / moMonthly creditsWeekly credit limitRollover capAutomation actions / moAction overage (opt-in)BYOK
Free$050050050010,000No
Starter$995,0002,0005,000250,000$10 per extra 1MYes
Pro$24912,5005,00012,5002,000,000$10 per extra 1MYes
Team$74937,50015,00037,50010,000,000$5 per extra 1MYes
ScaleContact sales500,000500,000500,00050,000,000Yes

Scale numbers are the baseline — limits are set with sales. Enterprise is fully custom (credit pool, action allowance, invoicing).

  • Weekly credit limit — the most credits an org can spend in any 7-day window; it smooths spend inside the month.
  • Rollover cap — unused monthly credits carry over up to this ceiling.
  • Plans do not cap table rows. Row counts are unlimited; plans cap monthly managed credits and automation actions.

Credit lifecycle

StateTrigger
GrantedPlan refill or top-up
ReservedA run starts; estimated cost held against balance
CapturedRun item succeeds with cost > 0
ReleasedRun item fails before billing; reservation returned

oxygen billing balance returns available and reserved.

Managed vs BYOK

ModeWho paysWhat it covers
ManagedOxygen creditsOxygen holds the provider API key. Default for enrichment providers.
BYOKYou pay the provider directlyYou connect your own provider account. Required for CRMs, outbound sequencers, LinkedIn.

BYOK provider calls consume no Oxygen credits — they are logged as zero-credit byok_usage ledger entries (category byok). BYOK requires a paid plan.

oxygen integrations list --json shows the mode per provider. See Integrations.

Reading balance and usage

oxygen billing balance --json
oxygen billing usage --limit 50 --json
oxygen billing usage --meter automation_actions --json
oxygen billing usage --category byok --type byok_usage --json
oxygen billing audit --group-by category --json

--meter defaults to credits; pass automation_actions for the workflow-compute meter. Usage entries include run, provider, tool, credit, and timestamp fields when available. Group by provider or by day:

oxygen billing usage --limit 200 --json | jq '.data.entries | group_by(.provider) | map({provider: .[0].provider, total: (map(.credits) | add)})'

The web app at oxygen-agent.com/billing renders the same data with charts.

Cost estimation

Before running anything paid:

oxygen tools get <tool-id> --json | jq '.estimated_credits_per_call'
oxygen columns run <table-id> <column-key> --limit 1 --json
oxygen workflows templates preflight <template-id> --input-json '{...}' --mode dry_run --json

Spend caps enforce predictability per run.

What's free

ActionCosts credits
tables query, rows history, cells inspectNo
tools search, tools get, integrations listNo
dry_run or smoke_test of any tool/column/workflowNo
context profile get/update, assets *No
columns add, tables rename, schema changesNo
oxygen onboarding startNo for the CLI command itself
live provider or AI call on your own key (BYOK)No — logged as a zero-credit byok_usage entry
Live workflow steps, row writes, retriesNo — they draw automation actions, never credits
Sequence sends through your connected email accountsNo
live AI/tool/enrichment column run on managed keysYes (per call)

Failure billing

Failure pointCredit treatment
Pre-billing (auth, validation, 429 before charge)Released
Post-billing (provider charged then returned error)Captured
Partial provider cascadeCaptured for paid attempts only

Subscriptions

Plans are managed through Stripe. Manage at oxygen-agent.com/subscribe. Plan changes apply at the next billing cycle by default; prorated upgrades available mid-cycle.

Each org has its own subscription and credit balance. Agencies running many client orgs see one balance per org.

Cancelling your plan

Cancel any time, self-serve, from any of these surfaces:

  • Web: oxygen-agent.com/subscribe (the manage-plan page — shows your current plan, trial end date, and the upcoming charge) or Settings → Billing → Cancel trial / Cancel subscription.
  • CLI: oxygen billing cancel — undo with oxygen billing resume.
  • MCP: the oxygen_billing_cancel tool (action: "cancel" or "resume").

What cancelling means:

  • During a trial: the trial stays fully usable until its end date and your card is never charged. Trials are card-required, so cancelling is how you opt out of the automatic conversion.
  • On a paid plan: the plan stays active until the end of the current billing period; no further charges. Remaining credits stay usable until then.
  • Reversible: until the period actually ends, "Resume subscription" (or oxygen billing resume) removes the scheduled cancellation and renewal continues normally.
  • After it takes effect: the workspace returns to the choose-a-plan wall; your data is retained.
  • Managed email-infrastructure add-ons (whitelabel inboxes, dedicated IPs) are billed separately and are not affected by cancelling the plan — cancel those via oxygen managed-inboxes cancel.

The Stripe billing portal (Settings → Billing → "Open billing portal") remains available for payment methods, invoices, and cancellation too.

On this page