OXYGENOxygen/ Docs
Safety & cost

Billing & credits

What consumes credits, plan allowances, managed vs BYOK, and the credit lifecycle.

Oxygen uses one credit pool per organization. Managed enrichment, AI, infrastructure, and live workflow actions all draw from that pool. Prices vary by operation and are shown before live execution.

oxygen billing balance --json returns the available and reserved balance.

What consumes credits

WorkWhat it draws
Managed enrichment or domain provider call (Oxygen's key)Credits at the catalog price
AI column run on Oxygen's keysCredits by model tier, plus web-search cost when enabled
The same provider or AI call on your own key (BYOK)0 credits
Live workflow steps, tool calls, row writes, retries0.01 credits per action
Sequence sends through your connected email accounts0 credits
Reads, schema changes, dry_run / smoke_test0 credits

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.

Workflow actions

Only live runs draw workflow-action credits; dry_run and smoke_test cost nothing. Actions are 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.

The flat 0.01-credit action price is a capacity guard, not a second allowance or invoice meter. The workflow page and oxygen workflows get --json show observed actions per run so hot schedules remain predictable. For cadence guidance, see Triggers.

Plan allowances

PlanPrice / moCredits / moBYOK
Starter$9999,000Yes
Pro$249249,000Yes
Team$749749,000Yes

Plans convert at $1 per 1,000 credits. On-demand credits cost $1.25 per 1,000 and can be purchased in any 1,000-credit increment from 8,000 to 200,000. Purchased credits never expire.

During the trial, the workspace has a fixed 20,000-credit grant instead of the full Starter allowance. Plans do not cap table rows.

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 --category byok --type byok_usage --json
oxygen billing audit --group-by category --json

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, retriesYes — 0.01 credits per action
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

Every new workspace starts on a 7-day Starter trial: the full workspace with 20,000 credits, credit card required up front. There is no card-less tier. The card is only charged when the trial converts to paid Starter — at the end of day 7, or earlier if the trial credits are exhausted. Cancel any time before then: the trial stays fully usable until its end date and the card is never charged.

If a card is a hard blocker on your side (company policy, procurement), book a call and we'll find a path.

Plans, invoices, discounts, payment methods, and cancellation are managed through Stripe from Settings → Billing. Oxygen keeps plan selection and credit usage inside the product.

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: Settings → Billing → Manage subscription in Stripe.
  • 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.
  • Deleting your workspace (Settings → General → delete organization) cancels its subscriptions — plan and email-infrastructure — immediately. A deleted workspace is never billed again.

The Stripe billing portal remains the source of truth for payment methods, invoices, discounts, plan changes, and cancellation.

On this page