Pricing reference
Every billable unit in OXYGEN, generated from the constants that charge for it.
A source-generated pricing reference, not an observation of the running deployment. Code-default billing rails distinguish default-off gates from live activation. Repricing follows the deployment's effective instant; native quotes may also resolve pricing-book overrides. Inspect a provider tool's estimate and basis with oxygen tools get <tool-id> --view pricing --json, or preview the exact request before spending.
What a credit is worth
| Unit | Value |
|---|---|
| 1 credit | $0.01 |
| $1.00 | 100 credits |
| Plan credits | $1.00 per 100 at face value, down to $0.87 per 100 with the volume bonus |
| Top-up credits | $1.25 per 100; $1.30 from the 2026-09 repricing's effective date |
Plans
| Plan | Monthly price | Yearly monthly payment | Yearly term total (12 payments) | Included credits | Volume bonus | Rollover cap | BYOK |
|---|---|---|---|---|---|---|---|
Oxygen $49 (oxygen_49) | $49.00 | $40.83 | $489.96 | 4,900 | — | 4,900 | Yes before repricing; existing keys only afterward |
Oxygen $99 (oxygen_99) | $99.00 | $82.50 | $990.00 | 9,900 | — | 9,900 | Yes |
Oxygen $199 (oxygen_199) | $199.00 | $165.83 | $1,989.96 | 19,900 | — | 19,900 | Yes |
Oxygen $499 (oxygen_499) | $499.00 | $415.83 | $4,989.96 | 52,395 | +5% (2,495) | 52,395 | Yes |
Oxygen $999 (oxygen_999) | $999.00 | $832.50 | $9,990.00 | 109,890 | +10% (9,990) | 109,890 | Yes |
Oxygen $1,999 (oxygen_1999) | $1,999.00 | $1,665.83 | $19,989.96 | 229,885 | +15% (29,985) | 229,885 | Yes |
Scale (scale) | Contact sales | — | — | 1,000,000 | — | 1,000,000 | Yes |
Enterprise (enterprise) | Contact sales | — | — | Custom | — | — | Yes |
Included credits are face value ($1 = 100 credits) plus the plan's volume bonus, which is already counted in the column. An existing subscriber to a plan with a volume bonus receives that volume bonus from their next renewal. For the separate agency partner bonus and its first-grant timing, see Billing. Plan prices are before tax. New yearly plans commit for twelve months and pay the discounted monthly amount, never the year upfront. The term total is twelve actual rounded monthly payments; credits arrive after each paid monthly invoice. Yearly commitments renew annually unless renewal is turned off; monthly payments continue until the term ends. They are offered when annual_monthly_billing_available is true; existing prepaid yearly subscriptions keep their paid periods and monthly credit slices (yearly billing).
Trial, grants, and grace
| Item | Value |
|---|---|
| Free signup grant | 1,000 credits once per eligible billing owner when signup grants are enabled; no monthly refill |
| Legacy trial length | 7 days for legacy trial contracts |
| Legacy trial credit grant | 2,000 credits for trialing subscriptions; separate from the Free signup grant |
| Past-due grace before entitlement stops | 7 days |
Credit top-ups
These are source comparisons, not current production quotes. With the repricing epoch unset, the source-default packs are:
| Pack | Price | Credits |
|---|---|---|
10 | $10.00 | 800 |
25 | $25.00 | 2,000 |
100 | $100.00 | 8,000 |
250 | $250.00 | 20,000 |
A custom top-up runs from 800 credits to 100,000 credits in steps of 100. Purchased credits stack like plan grants and do not expire. Without an amount, oxygen billing topup only reads a quote. Selecting credits or a pack creates Stripe Checkout; payment is separate. Top-up tax treatment is not established by this reference or the quote: review the tax and final total in Checkout.
From the 2026-09 repricing's effective date a top-up costs $1.30 per 100 credits and these packs are sold instead; oxygen billing topup --json reports the rate and packs in force, and the ones scheduled once the date is set.
| Pack | Price | Credits |
|---|---|---|
1000 | $13.00 | 1,000 |
2000 | $26.00 | 2,000 |
8000 | $104.00 | 8,000 |
20000 | $260.00 | 20,000 |
AI columns, Copilot, and Agents
| Unit | Credits | USD | Notes |
|---|---|---|---|
| AI column, low reasoning effort | 1.5 | $0.015 | per cell |
| AI column, medium reasoning effort | 4 | $0.04 | per cell |
| AI column, high reasoning effort | 25 | $0.25 | per cell |
| AI column with web search | 0.6 | $0.006 | typical; 4.6 reserved per cell |
Copilot and Agent turns bill managed inference against the same credit balance. A Copilot session has no budget to set: a person is watching it and can stop any turn, and the platform backstop bounds each attended turn. An Agent run spends within the max_credits approved when it starts. On your own AI model credential the model provider bills inference directly and OXYGEN charges no inference credits or platform fee. Managed web-grounding calls and workflow steps retain their separate charges. Native data-provider calls on your own key instead pay the applicable 0.05-credit OXYGEN platform fee per successful call, including successful misses, separately from vendor charges. See billing and own-key fees and retries.
Enrichment and research
| Unit | Credits | USD | Notes |
|---|---|---|---|
company_enrich_typical | 9.9 | $0.099 | per call, typical |
email_find_typical | 8.5 | $0.085 | per call, typical |
email_verify | 0.225 | $0.00225 | per call, typical |
linkedin_profile_scrape | 1 | $0.01 | per call, typical |
page_scrape | 1.6 | $0.016 | per call, typical |
phone_find_typical | 99 | $0.99 | per call, typical |
web_search | 0.5 | $0.005 | per call, typical |
| Enriched row, all columns | 10 | $0.10 | typical blended cost |
| LinkedIn URL found | 5 | $0.05 | per URL found that matches the person, 0 when none is found, from the 2026-09 repricing's effective date; until then each provider the lookup tries bills its own per-call price, found or not |
These are the sheet's typical values. The price that actually bills is the one on the operation descriptor, which varies by provider and request shape — read it with oxygen tools get <tool-id> --json, or preview the exact request with a dry run before spending.
Email infrastructure
| Unit | Credits | USD | Notes |
|---|---|---|---|
| OXYGEN-sold managed inbox (Google Workspace or Microsoft 365), all-in | 400 | $4.00 | per inbox per month: a flat 300-credit mailbox plus the 100-credit sending connection, warm-up included. Inbox placement is an optional add-on |
| OXYGEN-sold Azure tenant | 4,000 | $40.00 | per tenant per month: one dedicated Microsoft tenant for one domain, up to 100 inboxes; each inbox on it also holds the 100-credit connection |
| OXYGEN-registered domain | 1,250 | $12.50 | per domain per year at the registrar's cost, e.g. a .com; renewed yearly, charged 30 days before expiry |
| Inbox-placement monitoring | 100 | $1.00 | per mailbox per month; includes 2 placement tests |
| Additional placement test | 16.6 | $0.166 | per test beyond the included allowance; 66 from the 2026-09 repricing's effective date; own-key tests pay the separate OXYGEN platform fee plus provider-account charges |
| Mailbox warmup | 100 | $1.00 | per mailbox per month; 0 on your own mailbox from the 2026-09 repricing, included in its 100-credit monthly connection once that connection is billed |
| Dedicated egress IP | 2,500 | $25.00 | per IP per 30-day period |
| Email send | 0 | $0.00 | per message |
A Google Workspace and a Microsoft 365 inbox share one price, and an Azure tenant is one flat monthly charge for its domain whatever it carries; from the 2026-09 repricing's effective date every inbox on it also holds the 100-credit ($1.00) monthly connection. Staff can re-price these rows in the pricing book, so the pricing page and oxygen managed-inboxes list --json (under prices) show the price in force, and every order preview quotes the exact order before anything is bought. A domain holds at most 5 Google Workspace or Microsoft 365 inboxes, or 100 on an Azure tenant.
Sending seats
These dollar seats apply to the legacy sending_seats model. Read oxygen billing estimate --json for sender_billing: credit_reservations uses connected-account credits instead, though every sending account connects only on a paid plan, and oxygen billing seats --json reports status: seats_retired. The legacy gate (OXYGEN_SENDING_SEAT_GATE_ENABLED) enforces purchased or grandfathered seats while that model applies. oxygen billing seats --json reports the price, what is purchased, what is grandfathered, what is connected, and what is left. This reference does not observe production flag state. Before authorization, oxygen billing commitments --view connection-prices --json reports current deployment credit prices and billing timing for LinkedIn, WhatsApp, X and sending-mailbox connections, separate from this dollar-seat table.
| Seat | USD | Notes |
|---|---|---|
| LinkedIn seat | $30.00 per month | entitles one connected LinkedIn account |
| WhatsApp seat | $30.00 per month | entitles one connected WhatsApp number |
| Phone number | $10.00 per month | entitles one rented phone number; the number carries no separate credit charge while this seat pays for it |
| Email sender | $1.00 per month | entitles one connected sending mailbox, warm-up included |
Seats belong to the billing owner. A workspace linked to another organization's plan with oxygen orgs billing-link connects senders against that organization's seats and buys them there — oxygen billing seats set inside a linked workspace is refused with shared_billing. An OXYGEN-sold managed mailbox already includes its seat; the email seat above is for a mailbox you bring yourself.
LinkedIn and WhatsApp
| Unit | Credits | USD | Notes |
|---|---|---|---|
LinkedIn comment_post | 0 | $0.00 | per action |
LinkedIn follow | 0 | $0.00 | per action |
LinkedIn inmail | 0 | $0.00 | per action |
LinkedIn invite | 0 | $0.00 | per action |
LinkedIn like_post | 0 | $0.00 | per action |
LinkedIn message | 0 | $0.00 | per action |
LinkedIn visit_profile | 0 | $0.00 | per action |
| WhatsApp message send | 0 | $0.00 | per message |
Individual LinkedIn actions and WhatsApp message sends are 0 credits. Monthly connected-account prices are separate: inspect oxygen billing commitments --view connection-prices --json before authorizing an account; use oxygen billing commitments --json and oxygen billing seats --json for workspace commitments and coverage. Workflow step charges follow the workflow section below.
Voice
| Unit | Credits | USD | Notes |
|---|---|---|---|
| Talk time | 5 | $0.05 | per connected minute, both call legs and answering-machine detection included |
Voice settles on the telephony provider's status webhook after the call ends. A connected call bills its talk time, with a started minute counted as a whole one; a call nobody answered costs nothing. There is no separate per-call charge. A rented phone number is priced under connected-account reservations.
Connected-account reservations
When sender_billing is credit_reservations, connected accounts reserve monthly credits on their own monthly anchors instead of occupying dollar sending seats. The reservation model has its own switch and takes effect only after its required repricing epoch is effective. oxygen billing estimate --json reports the workspace's model and current prices; oxygen billing commitments --json lists its commitments. The table shows the code's before/after repricing schedule. The deployment's effective instant, enabled billing path, workspace coverage and any pricing-book override determine the applicable quote. Before authorization, inspect oxygen billing commitments --view connection-prices --json for deployment unit prices and disclosed billing timing for LinkedIn, WhatsApp, X and sending mailboxes. It does not determine workspace coverage or affordability. For a phone number, oxygen voice numbers buy previews the selected number purchase by default. oxygen billing commitments --json lists recorded forward commitments; it is not this cycle's settled debit total.
| Account | Until the repricing | From the repricing |
|---|---|---|
| LinkedIn account (outreach, publishing or both) | 1,000 credits ($10.00) / month | 3,400 credits ($34.00) / month |
| WhatsApp number | 1,000 credits ($10.00) / month | 3,400 credits ($34.00) / month |
| X account | No credit reservation | 1,000 credits ($10.00) / month |
| Phone number | No credit reservation | 1,000 credits ($10.00) / month |
Workflow automation
| Unit | Credits | USD | Notes |
|---|---|---|---|
| Workflow step that calls a tool | 0.05 | $0.0005 | per tool step a live run executes, settled in aggregate; the tool's own price is added |
| Control step | 0 | $0.00 | trigger, filter, switch, loop, merge, set, wait, code and approval steps are free |
| Rows written inside a run | 0 | $0.00 | free, however many rows a step writes |
| Provider call on your own API key (BYOK) | 0.05 | $0.0005 | applicable platform fee per successful call; vendor charges follow your provider's terms |
The workflow and BYOK rates above are the repriced schedule values, applicable from the deployment's effective instant: 1,000 tool steps cost 50 credits ($0.50). A loop bills its tool steps on every pass and a retried step bills again; previews and dry runs cost nothing. Two older shapes bill differently: an older revision whose code step embeds a durable recipe bills that step like a tool step, and a legacy step-list workflow bills each of its steps. When charged, workflow steps and BYOK platform fees settle in aggregate and count toward the run's max_credits and a trigger's per-delivery ceiling. AI calls on your own model key are not charged the BYOK platform fee.
Read Workflow prices and budget state
Before creating a Workflow, oxygen billing balance --json reports the current
step price at automation_actions.credits_per_step (MCP:
oxygen_billing_balance). If automation_actions is null, that read did not
establish the price. HubSpot sequencer setup previews also return current unit prices
under template_preflight.credits.quote; their usage examples are hypothetical,
and an unknown total stays unknown.
Legacy included_actions and remaining_actions fields describe an action
quota when numeric. Null does not mean unlimited credits or free automation.
Current plans bill from workspace credits; available balance, unsettled usage,
the run ceiling and any applicable budget policy still constrain admission.
overage_enabled: false with null action fields does not create a monthly action
allowance. A missing allowance object means its lookup is unavailable.
For an already armed cron, a hard budget refusal skips due slots before creating
a run and leaves the trigger armed. Its metadata records
scheduler_budget_block_reason and scheduler_budget_blocked_at, and the next
scheduled time advances past those slots. A warning policy allows admission.
When the applicable window resets or the cap is raised, a later slot can run;
skipped slots are not replayed. Automation quota or credit refusals appear as
trigger.automationPaused in oxygen workflows get; monthly quota pauses carry
a reset time, while credit or unknown refusals carry no promised resume date.
Adding credits permits the scheduler to retry a future slot. Manually disabled
Workflows remain disabled until explicitly enabled.
Code-default billing rails
These rails default to off in code. Boolean enable switches require exactly true; CREDIT_COMMITMENT_BILLING_KINDS is a comma-separated valid-kind allowlist. An unset or malformed enable switch does not enable the rail. This table does not observe deployed flags, pricing-book overrides or workspace eligibility, and does not claim that these resources are free. A dash means no numeric price is mapped in this table, not a zero quote.
| Rail | Before-repricing code price | Gate | Enabled by code default |
|---|---|---|---|
Deliverability analytics (deliverability_unit) | 100 credits / month | CREDIT_COMMITMENTS_ENABLED + CREDIT_COMMITMENT_BILLING_KINDS | No |
Connected LinkedIn accounts (linkedin_account) | 1,000 credits / month | CREDIT_COMMITMENTS_ENABLED + CREDIT_COMMITMENT_BILLING_KINDS | No |
Warmup (mailbox_warmup) | 100 credits / month | CREDIT_COMMITMENTS_ENABLED + CREDIT_COMMITMENT_BILLING_KINDS | No |
OXYGEN-sold mailboxes (managed_mailbox) | 300 credits / month | CREDIT_COMMITMENTS_ENABLED + CREDIT_COMMITMENT_BILLING_KINDS | No |
Phone numbers (phone_number) | — | CREDIT_COMMITMENTS_ENABLED + CREDIT_COMMITMENT_BILLING_KINDS | No |
Connected sending mailboxes (sending_mailbox) | 100 credits / month | CREDIT_COMMITMENTS_ENABLED + CREDIT_COMMITMENT_BILLING_KINDS | No |
Connected WhatsApp numbers (whatsapp_account) | 1,000 credits / month | CREDIT_COMMITMENTS_ENABLED + CREDIT_COMMITMENT_BILLING_KINDS | No |
Connected X accounts (x_account) | — | CREDIT_COMMITMENTS_ENABLED + CREDIT_COMMITMENT_BILLING_KINDS | No |
| Legacy credit-denominated LinkedIn account seat | 1,000 credits / month | LINKEDIN_SEAT_BILLING_ENABLED | No |
| Legacy credit-denominated WhatsApp number seat | 1,000 credits / month | WHATSAPP_SEAT_BILLING_ENABLED | No |
A gate or tracked commitment alone does not prove a payable debit. Inspect oxygen billing commitments --view connection-prices --json for current deployment unit prices and disclosed billing timing for LinkedIn, WhatsApp, X and sending mailboxes; use oxygen billing seats --json for workspace seat coverage, oxygen billing commitments --json for its forward commitments; and oxygen billing allowance --json for settled current-cycle charges. These native reads distinguish the deployed billing path from this source reference.
Default spend ceilings
These are source comparisons with the repricing epoch unset and synthetically in force; they do not observe deployed limits. Spend defaults scale with plan size. An autonomous trigger or table auto-run armed without an explicit cap is backstopped by its plan's default, resolved when it fires; an explicit cap always wins.
| Guard (credits) | Free | Oxygen $49 | Oxygen $99 | Oxygen $199 | Oxygen $499 | Oxygen $999 | Oxygen $1,999 |
|---|---|---|---|---|---|---|---|
| Trigger delivery or table auto-run default with repricing epoch unset | 50 | 500 | 990 | 1,990 | 5,240 | 10,989 | 25,000 |
| Trigger delivery or table auto-run default after repricing effective date | 50 | 490 | 990 | 1,990 | 5,240 | 10,989 | 22,989 |
| Agent run default with repricing epoch unset, total / model calls | 250 / 150 | 1,000 / 500 | 1,000 / 500 | 2,500 / 1,250 | 2,500 / 1,250 | 5,000 / 2,500 | 10,000 / 5,000 |
| Agent run default after repricing effective date, total / model calls | 250 / 150 | 1,000 / 500 | 1,000 / 500 | 2,500 / 1,250 | 2,500 / 1,250 | 2,500 / 1,250 | 2,500 / 1,250 |
| Copilot without an approval card, per call / per session | 50 / 300 | 100 / 500 | 100 / 500 | 200 / 1,000 | 200 / 1,000 | 300 / 1,500 | 500 / 2,500 |
| Daily spend guard with repricing epoch unset, warn / block | — | 24,500 / 98,000 | 49,500 / 198,000 | 99,500 / 398,000 | 261,975 / 1,047,900 | 549,450 / 2,197,800 | 1,149,425 / 4,597,700 |
| Daily spend guard after repricing effective date, warn / block | 1,000 / 5,000 | 24,500 / 98,000 | 49,500 / 198,000 | 99,500 / 398,000 | 261,975 / 1,047,900 | 549,450 / 2,197,800 | 1,149,425 / 4,597,700 |
| BYOK column run max rows | — | 25,000 | 25,000 | 50,000 | 50,000 | 100,000 | 250,000 |
| BYOK provider calls per day | — | 10,000 | 10,000 | 25,000 | 25,000 | 50,000 | 200,000 |
The source delivery default is 10% of the paid plan's monthly credits; Free is 50 credits in both comparisons. These source rows do not establish your deployment's limits. Grandfathered plans take 10% of their own monthly credits: Starter 990 (otherwise the Oxygen $99 column), Pro 2,490 (otherwise the Oxygen $199 column), Team 7,490 (otherwise the Oxygen $999 column). Legacy scale plans read the Oxygen $1,999 column, and Enterprise has no implicit trigger-delivery default. oxygen limits show names your plan size and returns every size's values under plan_bands; the web app shows the same values under Settings → Plan limits.
The paired trigger, Agent and daily-guard rows compare the source with the repricing epoch unset and synthetically in force. oxygen limits show reports which value is in force for your workspace. Enterprise uses the $1,999 Agent row: after the switch that is 2,500 credits total and 1,250 for model calls, with no separate contract default.
An Agent run may spend up to its approved max_credits. The plan ceiling above is its default: one run or trigger may carry a higher max_credits when you approve it explicitly (--approve-above-default, or the card in the web app), up to 25,000 credits, and Enterprise uses the $1,999 plan default. The Copilot allowance covers paid work up to its per-call and per-session amounts without an approval card; sends, launches and other external writes always ask, at any price, and one attended Copilot turn is bounded at 3,000 credits on every plan. A dash means no default. The daily spend guard is a runaway backstop, not a spend ceiling: Free has no guard with the epoch unset and a 1,000-credit warning / 5,000-credit block after its effective date; on paid plans it warns at 5x and hard-blocks at 20x the plan's monthly credits spent in one day, monthly reservations and managed mailbox subscriptions do not count toward it, and your own org daily budget replaces it. Run oxygen limits show or oxygen budget list to see the exact credit thresholds for your plan. BYOK daily call caps are monitoring thresholds and warn rather than stop a run unless OXYGEN_BYOK_DAILY_CAPS is set to enforce.
To inspect an Agent trigger's ceiling before creating it, run
oxygen limits show --section spend --json (MCP: oxygen_limits_show with
{"section":"spend"}). spend_safety_defaults.agent_run_max_total_credits
is the current workspace default; agent_run_approved_max_credits is the global
25,000-credit approved maximum. A proposed cap above the default requires the
separate approve_above_default approval; reading these fields grants none and
creates no trigger. A missing default is unknown. Existing trigger reads report
their explicit max_credits and above_default_ceiling_approved_at.
API rate limits
Request rates scale with plan size. Every /api/cli/* call counts against a per-key and a per-workspace total a minute; the operation limits below apply first to the calls a script makes most. Limits guard against runaway loops: they are never sold and never billed.
| Requests | Free | Oxygen $49 | Oxygen $99 | Oxygen $199 | Oxygen $499 | Oxygen $999 | Oxygen $1,999 |
|---|---|---|---|---|---|---|---|
| All calls, per workspace, a minute | 1,200 | 3,000 | 3,000 | 6,000 | 6,000 | 12,000 | 30,000 |
| All calls, per key, a minute | 1,200 | 3,000 | 3,000 | 6,000 | 6,000 | 12,000 | 30,000 |
| Table reads, per key, a minute | 120 | 600 | 600 | 1,200 | 1,200 | 2,400 | 5,000 |
| Table writes, per key, a minute | 60 | 600 | 600 | 1,200 | 1,200 | 2,400 | 5,000 |
| Live tool and AI calls, per key, a minute | 40 | 300 | 300 | 600 | 600 | 1,200 | 3,000 |
| Live tool and AI calls, per workspace, an hour | 200 | 25,000 | 25,000 | 60,000 | 60,000 | 150,000 | 500,000 |
| Dry runs, per key, a minute | 120 | 600 | 600 | 600 | 600 | 600 | 600 |
| Tables created by imports, per workspace, an hour | 200 | 2,500 | 2,500 | 5,000 | 5,000 | 10,000 | 25,000 |
| Rows read, per workspace | 1,000,000 an hour | 125,000,000 a day | 125,000,000 a day | 250,000,000 a day | 250,000,000 a day | 500,000,000 a day | 2,500,000,000 a day |
| Rows written, per workspace | 200,000 an hour | 25,000,000 a day | 25,000,000 a day | 50,000,000 a day | 50,000,000 a day | 125,000,000 a day | 500,000,000 a day |
Windows are fixed: a per-minute limit resets at the start of each minute, an hourly one at the start of each hour. A request over a limit is refused with HTTP 429 and rate_limit_exceeded; wait the seconds in the Retry-After header (also error.details.retry_after_seconds) before retrying. error.details.bucket names the limit that was hit, error.details.limits_url opens the web app's Plan limits page with every plan size's rates, and the CLI exits with code 6. Live AI calls and live tool calls are separate buckets with the same limits. A row budget counts one unit per row a request reads or writes, shared by every key in the workspace; a single-row request still counts toward it but is never refused by it, only by the per-minute rates. Bulk work belongs in a durable table run, which these per-request limits do not pace. oxygen limits show --json returns your plan's rates under api_rate_limits and every plan size's under plan_bands.
Webhook ingress
Inbound webhooks accept more deliveries a minute on bigger plans. The limit applies to each target on its own: a Table webhook endpoint, a workflow or Agent webhook trigger, and the workspace's RB2B receiver. The target and the sender IP are counted separately, and one sender IP may use the whole per-target rate, so a form tool or CRM posting from one address is not held to less. A second endpoint has its own allowance. A delivery counts once however many rows it carries.
| Deliveries a minute | Free | Oxygen $49 | Oxygen $99 | Oxygen $199 | Oxygen $499 | Oxygen $999 | Oxygen $1,999 |
|---|---|---|---|---|---|---|---|
| Per target | 600 | 1,500 | 1,500 | 3,000 | 3,000 | 6,000 | 12,000 |
| Per sender IP, per target | 600 | 1,500 | 1,500 | 3,000 | 3,000 | 6,000 | 12,000 |
Windows are fixed and reset at the start of each minute. A delivery over the limit gets HTTP 429 with a Retry-After header; redeliver after that many seconds. Nothing is written for a refused delivery, so a sender that retries loses nothing. For a steady flow above your plan's rate, batch several rows into one delivery with --items-path on oxygen tables webhook create; a delivery may be up to 1 MB of JSON. A refused delivery is not recorded in oxygen tables webhook deliveries. oxygen limits show --json returns your plan's rate under webhook_ingress, the tables webhook commands report the endpoint's under rate_limit, and a workflow or Agent webhook trigger reports its own under rate_limit in oxygen workflows get, oxygen workflows apply, oxygen agent trigger-create and oxygen agent triggers.
Table and signal limits
Storage, import size, columns per auto-run and the signals feed scale with plan size too. Like the rates above they are guards, never sold and never billed. This table compares source limits with the repricing epoch unset and synthetically in force, not current production limits. A slash shows epoch-unset / post-effective-date values; a pending rows-per-Table capacity test is separate and has no inferred date. Read oxygen limits show --json for deployed plan_bands, storage_capacity and pricing_schedule.
The table publishes source limits before and after the repricing epoch. Applying an epoch also requires each workspace’s persisted tenant guard to be synchronized; a tenant still using its legacy guard has not acquired the new limits. Read oxygen limits show --json for the workspace’s effective guard and usage. The 5-million and 10-million rows-per-Table targets remain held for the capacity test.
| Limit | Free | Oxygen $49 | Oxygen $99 | Oxygen $199 | Oxygen $499 | Oxygen $999 | Oxygen $1,999 |
|---|---|---|---|---|---|---|---|
| Rows per Table | 3,000,000 / 100,000 | 3,000,000 / 1,000,000 | 3,000,000 / 2,000,000 | 3,000,000 | 3,000,000 | 3,000,000 (5,000,000 after a passing capacity test) | 3,000,000 (10,000,000 after a passing capacity test) |
| Table rows per workspace | 25,000,000 / 1,000,000 | 25,000,000 / 5,000,000 | 25,000,000 / 10,000,000 | 25,000,000 | 25,000,000 | 50,000,000 | 100,000,000 |
| Workspace Table database | 30 GiB / 2 GiB | 30 GiB / 10 GiB | 30 GiB / 20 GiB | 30 GiB | 30 GiB | 60 GiB | 120 GiB |
| Rows per write request | 5,000 | 50,000 | 50,000 | 50,000 | 50,000 | 50,000 | 50,000 |
| Import file size | 500 MiB | 1 GiB | 1 GiB | 2 GiB | 2 GiB | 5 GiB | 5 GiB |
| Columns per action run or auto-run | 10 | 25 | 25 | 25 | 25 | 50 | 50 |
| Signal events per read | 100 | 200 | 200 | 500 | 500 | 1,000 | 1,000 |
| Signals look-back, days | 30 | 90 | 90 | 180 | 180 | 365 | 365 |
CSV and JSONL files stream, so they import up to the file size above. JSON and XLSX files are read whole, so on every plan they stop at 100 MiB; save a larger file as CSV or JSONL. Rows per Table still cap how many rows one import can load.
A request over one of these is refused with an error that names the limit. oxygen limits show --json returns every plan size's values under plan_bands.
Ledger categories
Every credit ledger entry carries one of these 19 categories. oxygen billing usage --json returns them.
| Category | What it records |
|---|---|
free | Free-tier allowance. |
trial | The 7-day trial grant. |
subscription | The monthly plan grant. |
purchase | A one-time credit top-up. |
managed_ai | AI columns, Copilot, and Agent inference on OXYGEN's model credentials. |
managed_enrichment | Provider enrichment and research calls on OXYGEN's credentials. |
managed_domain | OXYGEN-registered cold-email domains. |
managed_mailbox | Connected sending mailboxes. |
managed_inbox | OXYGEN-sold managed mailboxes. |
managed_warmup | Per-mailbox warmup cycles. |
managed_deliverability | Per-mailbox inbox-placement monitoring cycles. |
managed_seat | Recurring per-seat infrastructure (connected accounts, dedicated egress IPs). |
linkedin_action | Per-action LinkedIn charges wired at sequence dispatch. |
voice_call | Per-call voice charges settled on the telephony status webhook. |
automation | Aggregated workflow and automation action settlement. |
byok | Usage recorded against your own provider key; its OXYGEN platform fee settles from your credit balance. |
admin | Staff adjustment. |
bonus | Product-earned one-off grant. |
partner_bonus | The agency partner bonus granted beside each monthly plan grant. |
Ledger transaction types
| Type | What it records |
|---|---|
grant | Credits added by a plan, trial, purchase, or bonus. |
reserve | Credits held against an approved ceiling before a run executes. |
capture | The reservation settled at actual cost. |
release | The unused remainder of a reservation returned to the balance. |
refund | Credits returned after settlement. |
adjustment | A manual correction. |
byok_usage | Usage metered on your own key, with the platform fee recorded for settlement. |
What costs nothing
| Action | Why |
|---|---|
| Previews and dry runs | --mode dry_run and preview-by-default commands make no provider call and reserve nothing. |
| Sourcing and search plans | oxygen sourcing plan and oxygen search plan cost out the work without executing it. |
| Applying a blueprint | Creates a disabled workflow and its tables; nothing runs. |
| Sequence enrollment | Enrolling leads sends nothing — dispatch begins at oxygen sequences start. |
| Email and WhatsApp sends | 0 credits per message; sending infrastructure is priced per mailbox, not per send. At the default of 25 emails a day, one mailbox sends 550 to 750 emails a month (22 to 30 sending days). |
| LinkedIn actions | Every per-action LinkedIn charge is 0 credits; LinkedIn is priced per connected account. |