Integrations
Connected provider accounts. The auth state behind every tool call.
An integration is a connected provider account scoped to one organization. The provider catalog lists what tools exist; integrations are the credentials that let you actually call them.
Two auth modes
| Mode | Who pays | Setup |
|---|---|---|
managed | Pay Oxygen credits per call; Oxygen holds the provider key | None |
byok | Pay the provider directly; you connect your own account | OAuth or API key per provider |
Some tools support both. CRMs, outbound sequencers, and most LinkedIn tools are BYOK-only — the data needs to live in your account.
Working with integrations
oxygen integrations list --json
oxygen integrations connect <integration-id> --json
oxygen integrations actions <integration-id> --json
oxygen integrations run <integration-id> <action-slug> --input '{...}' --dry-run --json
oxygen integrations disconnect <integration-id> --jsonSome connections open an OAuth approval URL. Others ask for a provider API key in a secure connection flow.
Connection shape
| Field | Notes |
|---|---|
provider | Provider name |
auth_mode | managed or byok |
status | connected, disconnected, expired, error |
account_label | Provider-side identifier (workspace name, email) |
scopes | Granted OAuth scopes, if applicable |
connected_at, last_verified_at | Timestamps |
last_error | If status is error |
Provider events
Many integrations emit events when something happens on the provider side (HubSpot contact created, Instantly reply, Attio record updated). Events can fire workflow triggers.
oxygen integrations events list --json
oxygen integrations events enable --source instantly --event email.reply_received --json
oxygen integrations events disable --source instantly --event email.reply_received --json
oxygen integrations events deliveries --jsondeliveries shows delivery status for provider events before you debug why a workflow did or did not fire.
Mirroring external state
External writes such as CRM contact create, outbound enrollment, or LinkedIn actions should mirror their useful result back into the originating table through tool/action columns:
| Cell field | Holds |
|---|---|
value | Provider record ID (e.g. hubspot_contact_id) |
provenance.outputs.sync_status | queued, synced, failed |
provenance.outputs.last_synced_at | Timestamp |
error | Provider error text on failure |
This is what makes the table the audit log — provider state stays inspectable from within Oxygen.
Provider-specific docs
Per-provider quirks, rate limits, and mapping examples live in the Oxygen agent skills. Install them with:
oxygen skills install --agents codex claude-code cursor --skill '*' --jsonRelated
- Provider catalog — the tools each integration exposes.
- Waterfalls — combining multiple integrations for fallback.
- Columns — wiring row work to provider actions.