oxygen_budget_list
ChatGPTLists the organization's standing credit caps by scope and window, plus the plan defaults that apply without one: the daily guard and per-run Agent and trigger ceilings.
oxygen_columns_add
ChatGPTAdds a column; set column.kind. Inline AI uses {{column_key}}; inputMapping supplies literals/context; runCondition uses bare keys. preset adds a bundle; inputs={slot:column} pins identity. company_enrich: ~1 credit/profile, no field choice. Classify via column.definition.decision: labels (labels), yes_no, score (levels lowest first); question in prompt or decision.question.
oxygen_columns_bind_run
ChatGPTResolve rows to CRM records under the column's saved matching and create-on-miss policy on the selected rows of an existing bind column. This operation refuses every other saved column kind, including catalog tools, custom HTTP and workspace Functions. dry_run=true previews without execution. Live writes cells in a durable run; paid runs require approved=true and max_credits. Inspect progress with oxygen_table_runs_wait.
oxygen_columns_formula_run
ChatGPTCompute deterministic formulas on the selected rows of an existing formula column. This operation refuses every other saved column kind, including catalog tools, custom HTTP and workspace Functions. dry_run=true previews without execution. Live writes cells in a durable run; paid runs require approved=true and max_credits. Inspect progress with oxygen_table_runs_wait.
oxygen_columns_lookup_run
ChatGPTRead matching values from another workspace Table on the selected rows of an existing lookup column. This operation refuses every other saved column kind, including catalog tools, custom HTTP and workspace Functions. dry_run=true previews without execution. Live writes cells in a durable run; paid runs require approved=true and max_credits. Inspect progress with oxygen_table_runs_wait.
oxygen_columns_research_run
ChatGPTResearch and cite web evidence on the selected rows of an existing research column. This operation refuses every other saved column kind, including catalog tools, custom HTTP and workspace Functions. dry_run=true previews without execution. Live writes cells in a durable run; paid runs require approved=true and max_credits. Inspect progress with oxygen_table_runs_wait.
oxygen_columns_run
ChatGPTGenerate AI cell values on the selected rows of an existing ai column. This operation refuses every other saved column kind, including catalog tools, custom HTTP and workspace Functions. dry_run=true previews without execution. Live writes cells in a durable run; paid runs require approved=true and max_credits. Inspect progress with oxygen_table_runs_wait.
oxygen_companies_hiring_search_run
ChatGPTImport hiring-company results matching the native filters returned by the corresponding free preview. This is one fixed search operation; its provider binding is selected by the server. Dry run is free. Live requires approved=true and max_credits after inspecting the exact scope and price. Results include the ingestion run; use oxygen_table_ingestions_wait, then oxygen_tables_preview.
oxygen_companies_native_search_run
ChatGPTImport company-search results matching the native filters returned by the corresponding free preview. This is one fixed search operation; its provider binding is selected by the server. Dry run is free. Live requires approved=true and max_credits after inspecting the exact scope and price. Results include the ingestion run; use oxygen_table_ingestions_wait, then oxygen_tables_preview.
oxygen_companies_search_plan
ChatGPTThe canonical company-search entrypoint. Compiles prompt + typed filters into provider routes, table columns, gates, credit/match estimates, filter coverage, and workspace context. Discover accepted enums with oxygen_companies_search_preview action=filters first. A route marked invalid_input needs corrected filters and a new estimate. Approval must use the returned max_pages and credit estimate; larger row counts need a new quote. A deterministic_guess match count is an unprobed heuristic; use the free preview for a provider-backed total. COST: free (no paid provider calls; with estimate=true it runs at most ONE free zero-credit count probe). FILTERS: pass typed filters (ISO alpha-2 countries, funding stages, employee/revenue/founded ranges, technologies, hiring). extracted_filters.unparsed_constraint_hints reports unparsed constraints; per-route filter_application reports applied/dropped filters. FOLLOW-UP: _plan -> _run (dry_run) -> _run (live, approved=true, max_credits) -> oxygen_table_ingestions_wait -> oxygen_tables_preview.
oxygen_companies_search_preview
ChatGPTCall action=filters before previewing; use its accepted enums and nested objects. Preview free. company_search: 50 companies; hiring: 50 job postings with exact total; google_maps: 20 businesses, {q:business type and area}, total unavailable unless returned by API. Report the native source, requested filters, diagnostics, preview_limit and how sample rows were chosen. Next use oxygen_companies_native_search_run, oxygen_companies_hiring_search_run or oxygen_companies_maps_search_run for that source with source_filters: dry_run, then approved live + max_credits.
oxygen_companies_search_run
ChatGPTSource companies matching a natural-language request and typed filters into a Table. OXYGEN selects its internal provider chain; this operation accepts no provider tool IDs, route selectors or execution plans. Dry run is free. Live requires approved=true and max_credits after inspecting the exact scope and price. Results include the ingestion run; use oxygen_table_ingestions_wait, then oxygen_tables_preview.
oxygen_context_resolve
ChatGPTResolves workspace context and assets. purpose='onboarding' includes a bounded research brief and inferred GTM hypotheses; user corrections take precedence.
oxygen_find_company
ChatGPTEnrich one company (domain, name or linkedin_url) via a provider waterfall: firmographics, structured funding, competitors, corporate structure, news, job openings, tech stack, web-presence URLs. Returns found, values, attempts (derived_from = 0-credit read) and retry_safe.
oxygen_find_email
ChatGPTFind a person's work email via a multi-provider waterfall (BlitzAPI, Icypeas, AI Ark, LeadMagic, BetterContact), advancing provider-by-provider until one returns a result. Provide the strongest identity you have: linkedin_url, or full_name + company_domain. Returns found, result.value, confidence (verified/catch_all/guessed/unverified), source provider, an attempt trace, and retry_safe (true when nothing was billed).
oxygen_find_phone
ChatGPTFind a person's mobile phone via a multi-provider waterfall, advancing on empty/error. Provide linkedin_url (strongest), email, or full_name + company. Returns outcome=found/no_match/indeterminate: provider failures are indeterminate with found=null, never a false no-match. Also returns result.value, line_type/carrier when verified, an attempt trace, and retry_safe.
oxygen_inbox_list
ChatGPTLists Unibox conversations newest-first across email, LinkedIn, and WhatsApp (the default merged stream); channel narrows to one. Primary excludes the negative status tier; All = ordinary conversations. Status, unread, unanswered, dates are cross-channel; search is fuzzy, spans every non-warmup thread + body, ignores segment/unanswered. Campaign/provider/domain/mailbox facets and Others/Sent/Warmup/DMARC are email-only.
oxygen_knowledge_index
ChatGPTFree wiki catalog: newest 200 pages, metadata, revisions, pins and link degree; counts cover all pages. semantic.budget is Oxygen-funded, never your credits. Read first, open relevant pages, cite slugs. Also knowledge://index.
oxygen_knowledge_page_get
ChatGPTRead Markdown, metadata, links and backlinks by slug or id. Start with oxygen_knowledge_index; cite slugs/revisions. File learned context with oxygen_knowledge_page_upsert. Free read.
oxygen_knowledge_page_upsert
ChatGPTCreate/update by slug or id; omit both to create by title. Search first to avoid duplicates. Cite [[slug]]. Writes revisions and links. Sensitive canonical edits return knowledge_approval_required with a proposal to approve in OXYGEN.
oxygen_knowledge_search
ChatGPTSearch wiki pages by meaning and keywords. Read-only, 0 credits. Plain language uses hybrid retrieval when enabled; check match_type/semantic_status. Without the platform-funded embedding allowance, keyword search still works. Quotes, OR and exclusions stay lexical. Non-archived unless status is set. Open results with oxygen_knowledge_page_get and cite revisions; search before creating duplicates.
oxygen_orgs_select
ChatGPTSwitches the active OXYGEN workspace. An org-bound API key cannot: it is refused with org_scoped_credential.
oxygen_people_search_plan
ChatGPTCanonical people/contact search: compiles prompt + persona filters into provider routes, table columns, gates, credit/match estimates, filter coverage, and workspace context. COST: free (no paid provider calls; runs at most ONE free zero-credit people-count probe — on by default, pass estimate=false to skip it). FILTERS: pass typed filters (titles, seniorities, departments, ISO alpha-2 countries, contactability has-email/has-phone, nested company scope). extracted_filters.unparsed_constraint_hints reports unparsed constraints; per-route filter_application reports applied/dropped filters (only ContactOut honors contactability). SOURCE: source={table, linkedin_url_column} fans Blitz Employee Finder over every company LinkedIn URL in that column — 10 credits per company per page, people linked back to their company row. FOLLOW-UP: _plan -> _run (dry_run) -> _run (live, approved=true, max_credits) -> oxygen_table_ingestions_wait -> oxygen_tables_preview. Upsert-dedupes on linkedin_url.
oxygen_people_search_preview
ChatGPTList native Find people filters (people. and company., incl. up to 50 company.linkedin_url) or preview up to 50 people free. Then use oxygen_people_search_run with source=people_search and source_filters: dry_run, then approved live with max_credits.
oxygen_people_search_run
ChatGPTDry-runs or queues a live table ingestion run for one people-search provider route. This is the people-search executor; pair it with oxygen_people_search_plan. COST: dry_run is free. Live requires approved=true and max_credits. max_pages is computed from target_count and capped by max_credits (see auto_paged). Required provider preflight blocks live until verified server-side. Rows upsert-dedupe on linkedin_url. FILTERS: when planning from a prompt, pass typed filters (and estimate) — identical schema to oxygen_people_search_plan. source="people_search" + source_filters from oxygen_people_search_preview needs no prompt. SOURCE: source={table, linkedin_url_column} fans Blitz Employee Finder over every company LinkedIn URL in that column — 10 credits per company per page, people linked back to their company row. TABLE: omit it, or match output_columns. FOLLOW-UP: this tool mode=dry_run -> mode=live, approved=true -> oxygen_table_ingestions_wait -> oxygen_tables_preview.
oxygen_rows_upsert
ChatGPTInserts or updates a batch, deduplicating on the key column. dry_run=true first on messy lists.
oxygen_runs_list
ChatGPTLists recent workspace runs (provider calls, AI column runs, workflow steps) for the organization, newest first.
oxygen_search_runs_get
ChatGPTGets one durable search/scrape run by id.
oxygen_search_runs_wait
ChatGPTPolls a durable search/scrape run until terminal status or timeout.
oxygen_signals_search_preview
ChatGPTlinkedin_posts only: list the post-search filters, or preview public LinkedIn posts FREE (up to 25 per keyword) with author, engagement and the optional ai_filter applied. Nothing is created or charged. Then oxygen_signals_search_run with the same filters: dry_run, then live with approved=true, plus max_credits if the dry run quotes ai_filter reasons.
oxygen_signals_search_run
ChatGPTReturns a dry-run request or queues a live table ingestion run for one signal-search route, creating the table from the plan blueprint when none is passed. COST: dry_run is free; live consumes credits within max_credits and requires approved=true. linkedin_posts is free (approved=true only) unless the dry run quotes credits for ai_filter reasons or an ai_filter block. LIVE TABLE: pass bind_feed=true with every to also bind a pull feed to the same table in the same call, so it keeps refilling on a cadence. That is a STANDING spend grant and is refused (feed_not_incremental) when the chosen provider cannot resume where it left off. FOLLOW-UP: oxygen_signals_search_run (mode=live) -> oxygen_table_ingestions_wait -> oxygen_tables_preview.
oxygen_table_ingestions_get
ChatGPTReturns a durable table ingestion run with status, item counts, row counts, and the Oxygen web deep-link.
oxygen_table_ingestions_wait
ChatGPTPolls a durable table ingestion until it reaches a terminal status or the timeout expires.
oxygen_table_runs_wait
ChatGPTPolls a table action run until it reaches a terminal status (completed, completed_with_errors, failed, canceled) or the timeout expires. Use after starting a run to watch it finish.
oxygen_tables_create
ChatGPTCreates a table private to the active workspace. Mutates tenant schema. AI prompts read {{column_key}} or inputMapping {{name}}; unknown → invalid_prompt_column + near misses.
oxygen_tables_describe
ChatGPTReads columns, types and config; column returns one. A UUID in another accessible org returns table_in_other_org; select the org in details.recovery with oxygen_orgs_select, then retry.
oxygen_tables_list
ChatGPTLists this workspace's tables, optionally filtered by project or workspace tag. Newest 200 by default; see capped.
oxygen_tables_preview
ChatGPTRows, columns, stats, and a deep-link, 0 credits. Share the returned web_url. UI in MCP Apps hosts; data in terminals. Fill exact to cap, else summary.statsSampled; rowCount exact.
oxygen_tables_query
ChatGPTRaw rows. Prefer filterTree; use oxygen_tables_preview to inspect.
oxygen_whoami
ChatGPTReturns the authorized organization and user; for an org API key, user is its issuing person and owns Personal Oxygents created here. Factual onboarding markers: a null block means unknown. No GTM prescription.