An integration is a stored connection to an external service. It comes in one of two shapes, and the provider decides which:
  • Tool integrations give an agent tools the model can call. You attach one in the agent’s mcps list, so attaching takes a publish. See MCP servers.
  • Channel integrations (Telegram, WhatsApp) put a published agent on a messaging channel. They are never attached to an agent config; a trigger binds them to an agent.

Providers

A service not on this list is reachable only as a custom MCP server. GET /v1/integrations/catalog returns the same list live, with each provider’s setup_fields (the exact keys to send on create, their target and whether they are required), capabilities (attachable_as_mcp, trigger_types) and enabled. enabled is false for an OAuth provider whose OAuth app is not configured on this deployment; it cannot be connected.
RocketReach lookups spend credits from your RocketReach plan, and nothing on our side caps that. Searching is free; each lookup or export is not. An agent task run once per row of a 5,000-row list spends 5,000 credits.

Connecting an API-key provider

Manual providers take their credentials on POST /v1/integrations. A field of type secret_ref (such as credentials_ref) accepts the plaintext value, which the platform stores as a workspace secret and replaces with a reference (TAVILY_API_KEY, RESEND_API_KEY, EXA_API_KEY, TELEGRAM_BOT_TOKEN, suffixed if the name is taken). Or send an existing {{secrets.NAME}} reference; one naming a missing secret is refused.
  • exa, tavily and resend require a key. Exa’s keyless tier is a shared pool whose rate limit strangers exhaust, so it is not accepted.
  • Telegram, Resend and WhatsApp credentials are checked with the provider before the row is written; a key the provider rejects fails the create with a 400.
  • custom_mcp header values are not turned into secrets; see custom MCP servers.
  • Reads never return a secret value: secret fields come back as {{secrets.NAME}}.
To rotate a key, send credentials_ref again on PATCH /v1/integrations/{integration_id}. Omitting it keeps the current one.

Connecting an OAuth provider

OAuth providers connect from the dashboard only: POST /v1/integrations refuses them with connect <Provider> with OAuth.
1

Start

Integrations → Add integration → pick the provider.
2

Authorize

Approve the access on the provider’s page. The flow must finish in the same browser, login and workspace that started it.
3

Approve tools

The tool-approval modal opens on return. Approve only what the agent needs (approving tools).
The integration is named <Provider> - <account> (Google Calendar - ada@northwind.com), with (2) appended if the name is taken. Connecting an account that already has an integration is refused with an integration for this account already exists. Reconnect (the button on the integration’s row) replaces the tokens on the existing row and keeps allowed_tools and tools_namespace. Use it when the status is needs_reconnect or the grant was revoked. An OAuth integration with no stored credential cannot be PATCHed back to active.

Statuses

Any status other than active: the integration cannot be attached, its tools drop out of published agents on their next session (validate and publish warn integration '<name>' is disabled - its tools are left out until you enable it), its triggers cannot be enabled, and GET …/mcp-tools returns 400.
A published agent naming a non-active or deleted integration still starts — without those tools. The prompt still describes them, so the model will try to use tools it no longer has. Remove the attachment and republish if the outage is not momentary.
Disabling a channel integration also unregisters its enabled triggers with the provider; enabling it registers them again.

Deleting

DELETE /v1/integrations/{integration_id} is permanent and deletes its triggers. It also removes the Telegram bot’s webhook, clears a Twilio WhatsApp sender’s webhook and calling, or revokes OAuth tokens with the provider.

Two connections to one provider

Two Asana workspaces or two Google accounts are fine, but both integrations default tools_namespace to the provider key. Attaching both to one agent is refused until you give one a different namespace (asana_eu). See namespacing.

Field reference

Next

MCP servers

Attach an integration to an agent, approve its tools, set its namespace.

Triggers

Bind a Telegram or WhatsApp integration to a published agent.