Skip to main content
Integrations let agents work in the apps your team already uses. An admin connects an app once for the whole organization and chooses which of its tools agents may use. Then you grant the app to any agent, and its sessions can read and act in that app within those limits. There are three ways to give an agent access to another service: Most of this page covers built-in integrations. Native integrations and MCP servers are at the end.

Before you begin

What you can do depends on your organization role. See Organizations and roles. The billing role has no access to integrations. Console messages that say “ask an admin” mean anyone with the developer or admin role. You also need an account in the app you’re connecting, with the access you want agents to have. Agents act in the app as that account, so use one whose permissions fit the work. The samples on this page use cURL for the integration operations, which the TypeScript SDK doesn’t wrap, and TypeScript for agent operations. The TypeScript samples assume the rl client from Client setup.

The catalog

These are the 164 apps in the built-in catalog, grouped by name. The console always shows the current catalog, which can grow. Search it from Add integration on the Integrations page, or read it through the API with listBuiltInIntegrationCatalog.

A–C (34 apps)

ActiveCampaign, Adobe PDF Services, Ahrefs, Airtable, Amadeus, Amazon S3, Amplitude, Anaplan, Apollo, Arize, Articulate Reach 360, Asana, Ashby, Attio, Avalara, Aviationstack, Axiom, BambooHR, Basecamp, bioRxiv, Bitly, Box, Brex, Calendly, Clay, ClickUp, ClinicalTrials.gov, Cloudflare, CMS Coverage, Coda, ComplianceQuest, Confluence, Contentful, Crustdata

D–G (29 apps)

Databricks, Datadog, Deel, Discord, DoorDash, Dropbox, Duffel, Dynamics 365 Sales, Exa, Expensify, Figma, Firecrawl, Fireflies, FireHydrant, FreshBooks, Freshdesk, Freshservice, Front, Gamma, GitLab, Goldcast, Gong, Google BigQuery, Google Maps, Google Tasks, Grafana, Granola, Greenhouse, Guru

H–M (22 apps)

Hex, HiBob, HubSpot, Intercom, Jenkins, Jira, Jira Data Center & Server, Jira Service Management, Kintone, Klaviyo, Linear, Looker, Lucidchart, Luma, Make, Metabase, Microsoft Excel, Microsoft Planner, Microsoft Teams, Microsoft Teams GCC High, Miro, Monday.com

N–R (30 apps)

n8n, Nextech Practice+, Nooks, Notion, NPI Registry, Okta, OneDrive, OneDrive GCC High, OneNote, Oracle HCM, Oracle Sales Cloud, Oracle SCM, Ordinal, Oura, Outlook, PagerDuty, PayPal, Peec AI, Pendo, Pipedrive, Plaud, PostHog, PubMed, Pylon, Quartr, Ramp, ReadMe, Render, Reo.dev, Rootly

S–Z (49 apps)

Sabre, Salesforce, Sanity, SAP SuccessFactors, SendGrid, Sentry, ServiceNow, SharePoint, SharePoint GCC High, Shopify, Sigma Computing, SmartAdvocate, SmartRecruiters, Smartsheet, Snowflake, Sprout Social, Square, Statsig, Straker, Stripe, Supabase, TeamCity, Teamwork.com, TinyFish, Trello, TripAdvisor, UKG Pro, UKG Pro WFM, Unify, Unily, Vercel, Vestaboard, VisualPing, Warp, Weather, Webflow, WHOOP, Wikipedia, Wix, WordPress, Workday, X, Yelp, YouTrack, Zendesk, Zendesk Sell, Zoho CRM, Zoho Desk, Zoom When your organization can connect Jira or Confluence as a native integration, Add integration offers the native connection for that service instead of the built-in one.

Connect an app

Connecting an app happens in two parts: you add it with the tools agents may use, then you sign in to it. Connecting is done in the console. The API can read, check, change, and disconnect connections, but it can’t add one.
1

Open Add integration

In the sidebar, click Integrations. Under Integration connections, click Add integration.
2

Pick the app

Search for the app and click it. An app you already added shows Already added. Each app can be added once per organization; to change it later, use its row.
3

Choose its tools

The Configure drawer lists every tool the app offers. Each one is marked Read-only., Changes service data., or Destructive: updates or deletes service data. Tick the tools agents may use, or use Select read-only, Select all, or Clear. See Choose which tools agents may use.
4

Review and create

Click Review selection. The review shows how many tools you picked and how many of them can change or delete data in the app. Click Create 1 connection.
5

Sign in to the app

The app appears in the table with the state Pending setup and the account Not connected yet. Click Connect on its row. You’re sent to the app’s sign-in page. Sign in with the account agents should act as, and approve access.
6

Confirm the connection

You come back to Integrations, which shows Finishing connection… and then Connected. Assign access in the agent’s Integrations section.
What success means: the app’s row shows the state Active, the Account column shows the app’s name, and the tool count appears beside it, for example “6 tools, 2 can change data”. Only an active connection can be granted to an agent. Each sign-in started from Connect is single-use and short-lived. If you close the sign-in page or take too long, nothing is connected and the row stays Pending setup; click Connect again.

Connection states

A connection moves to Revoked when a session or a check finds that the app no longer accepts the sign-in. A temporary problem reaching the app doesn’t change the state.

Choose which tools agents may use

Each connection carries a tool allow-list: the tools that every agent using the app may call. It’s one decision for the whole organization, made on the Integrations page. An agent can’t call a tool that isn’t on the list, and it can’t narrow the list further for itself. Every tool in the catalog has a classification: A tool marked both read-only and destructive is treated as destructive. Choose tools with these rules in mind:
  • Start with read-only. Select read-only is the safest starting point. Add write tools only for tasks that need them.
  • The list is shared. Every agent granted the app gets the same tools. If one agent needs to write and another shouldn’t, give the writing agent an MCP server or a separate account instead.
  • The list can’t be empty. A connection always names at least one tool, and at most 200.
  • Changes reach agents on their own. New sessions always use the new list. A session that’s already running may pick it up when its access is next renewed, so don’t count on a running session keeping the old list.

Change an app’s tools

  1. In the sidebar, click Integrations.
  2. Open the app’s row menu and click Tools.
  3. Tick or clear tools. The list applies to every agent using the app.
  4. Click Save tools. The console confirms that the app’s tools were updated for every agent using it.
updateIntegrationConnectionSelection replaces the whole allow-list. resources names tools from the catalog, from 1 to 200 of them. permission sets which tools the list may hold:
  • read, the default when you omit it: every tool must be read-only. A tool that isn’t is refused.
  • write: any tool in the catalog. This is what the console uses.
Each tool is stored at its own level, read for a read-only tool and write for anything else, whatever preset you send. A 200 response is the connection. Some fields are left out here.
The tool names in these examples are illustrative. Use the names the catalog lists for the app. Changing tools doesn’t change the connection’s state, and it isn’t allowed on a revoked connection; reconnect it first.

When the catalog changes

The catalog can reclassify or remove a tool after you pick it. A tool you saved as read-only that’s no longer classified read-only, or a tool that’s no longer in the catalog, blocks the whole app: sessions can’t use it until the tool is removed from the list. The Tools drawer shows these tools with a warning and a Remove button. Click it, then Save tools. Through the API, send the list again without them.

Read the catalog through the API

listBuiltInIntegrationCatalog returns the whole catalog, sorted by app name. Pass search, up to 200 characters, to match app names, slugs, and tool names without regard to case. The catalog is the same for every organization and is refreshed about daily. It’s listed under Integrations in the endpoint reference.
An app with configurable: false is listed for reference and isn’t offered under Add integration. auth_types says how the app’s sign-in page authenticates: OAuth2, Secrets (you paste a token or key), or both.

Grant apps to an agent

A connection does nothing until an agent is granted it. Grants live on the agent version in built_in_integrations, so every change publishes a new version and running sessions keep the version they started with.
  1. In the sidebar, click Agents, then open the agent.
  2. On Configuration, find the Integrations section.
  3. Click Add integration access, search for the app, and click Select. A connection that isn’t active shows Reconnect first instead.
  4. Repeat for each app, and click Remove to take one away.
  5. Click Save new version.
A 200 response is the agent. It lists the granted connections. Some fields are left out here.
The rules for built_in_integrations:
  • Each entry names a connection by connection_id. Get ids from listIntegrationConnections, or from the row on the Integrations page.
  • Every connection must be a built-in integration in your organization, be Active, and have at least one tool on its allow-list.
  • An agent can name at most 25 entries, counted before duplicates are removed. A repeated id is kept once, and the order you send is kept.
  • Leave out tools. It’s reserved, and a non-empty value is refused. The agent always gets the connection’s full allow-list.
  • The list is part of the definition, so send it on every createAgentVersion. Leaving it out publishes a version with no apps. See Update rules.
  • Built-in integrations aren’t vault grants. They never appear under an agent’s credential access, and default_vault_ids and credential_refs don’t affect them.

What a session receives

When a session starts, it keeps the list of apps from its agent version for its whole life. For each app, the session gets:
  • Access to the allowed tools only. The agent can call the tools on the connection’s allow-list and nothing else in that app.
  • Short-lived, scoped access. Access is limited to the apps the agent was granted, expires within an hour, and renews on its own while the session runs. You never handle a token. The access is available to commands in the sandbox, so treat it like anything else the agent can read: it works only for the granted apps and allowed tools, and only until it expires.
  • A skill for using apps. Sessions of an agent with built-in integrations also load a skill that shows the agent how to find and call app tools. It takes one of the session’s 100 skill slots, so if the agent’s own skills already fill all 100, the last one is left out.
An app whose connection is no longer active when the session starts is left out of that session. The session still starts.

How agents use apps in a session

Agents already know how to find the right tool in each granted app, check the inputs it needs, and call it. You don’t list tools in the prompt. Describe the outcome you want, and name the app when it matters:
In the session:
  • Each call to an app appears in the transcript as a command the agent runs, with the app’s result below it. The Tools tab counts every call.
  • The agent can’t reach an app you didn’t grant or a tool that isn’t on the allow-list. A call to anything else fails.
  • If an app’s sign-in stops working, calls to that app fail and the connection becomes Revoked on the Integrations page until you reconnect it.
A write or destructive tool on the allow-list can change real data in the app. Say in the task what the agent may and may not change, and keep write tools off the list when the work is read-only.

Check a connection

A check tries a fresh sign-in with the app, the same way a session does, and reports whether it worked. Use it after connecting, or when an agent can’t reach an app.
  1. In the sidebar, click Integrations.
  2. Open the app’s row menu and click Check. Check appears only for an active connection.
  3. Read the Connection check column: Connection check passed., or the reason it failed.
probeIntegrationConnection answers 200 even when the check fails, so read ok, not the status code.
What success means: ok and token_minted are both true, so a session using the app will get access. For a built-in integration, resource_count is the number of tools on the allow-list. A failed check returns ok: false and a failure reason. If the app no longer accepts the sign-in, state comes back revoked; reconnect the app.

List and read connections

listIntegrationConnections returns every connection in your organization, native and built-in, including pending and revoked ones. Disconnected connections are left out. getIntegrationConnection returns one.
This example shows one built-in connection. Some fields are left out here.
For a built-in connection:
  • external_id is the app’s slug from the catalog, and account_type is its name. account_login is the app’s name too, followed by the sign-in method when the app names one.
  • permissions is the tool allow-list, each tool with its level.
  • usage.agents counts the agents whose current version grants the app.
  • provider identifies the kind of connection. Every built-in connection shares one provider, which listIntegrationProviders lists as Built-in integrations.

Reconnect an app

Reconnect when a connection is Revoked, or to sign in to the app again. Reconnecting keeps the same connection_id, so the agents granted the app and its tool allow-list stay as they are.
  1. In the sidebar, click Integrations.
  2. Click Reconnect on the app’s row. For an active app, it’s in the row menu.
  3. In the Reconnect dialog, click Continue to sign-in.
  4. Sign in to the app and approve access.
Signing in with a different account changes the account every agent using the app acts as. To keep two accounts separate, disconnect the app and add it again instead.

Disconnect an app

Disconnecting removes the app’s sign-in and stops all access through it. Every agent granted the app loses it from its next session. Connecting the app again starts from the catalog and creates a new connection, so agents must be granted the new one.
  1. In the sidebar, click Integrations.
  2. Open the app’s row menu and click Disconnect.
  3. In the Disconnect dialog, click Disconnect.
grants_revoked counts vault grants that used the connection, which applies to native integrations. It’s 0 for a built-in integration, because those are granted on the agent. Agents that still name a disconnected connection show it as Unavailable connection in their Integrations section. Remove it and save a new version; a version that still names it returns 404 not_found on built_in_integrations.

Native integrations

Native integrations connect a service by signing in to it directly. Each session gets a short-lived token limited to the access you grant, and the connection’s own permissions at the service are always the ceiling. listIntegrationProviders returns the same list, with configured: true for each service your organization can connect. Jira, Confluence, Loom, LaunchDarkly, and Slack fix the access level when you connect (preset_fixed_at_authorization); to change it, reconnect with the new level. GitHub’s level is chosen per grant.

Connect a service

1

Start the connection

In the sidebar, click Integrations, click Add integration, and click the service. The Connect drawer opens. If it shows Access level, choose it now. Click Continue.
2

Approve at the service

Sign in and approve the request. For GitHub, choose the organization or user account to install the app on, and the repositories it can reach. For Slack, choose the workspace.
3

Choose an account if asked

If the service returns more than one account you can connect, the console shows Choose an account. Pick one and click Continue.
4

Confirm

Back on Integrations, the console shows Connected. Assign access in the agent’s Integrations section. The row’s State is Active.
What success means: the connection appears in listIntegrationConnections with state: "active". Connecting grants nothing to any agent. Connecting GitHub or Slack also adds an event source that automations can listen to. To start from code, startIntegrationInstall returns the service’s authorization url and a single-use state. Open the url in a browser where the same person is signed in to the console; after approval the console completes the connection. The state expires after 15 minutes.
option is the access level for a service that fixes it at connect time. Send connection_id to re-authorize an existing connection in place, keeping its id so agents that use it keep working.

Grant a native integration to an agent

Access is saved with the agent version, so saving it creates a new version. Sessions already running keep the access they started with.
  1. Open the agent. On Configuration, find Integrations and click Add integration access.
  2. Click Select next to the connection. A connection that isn’t active shows Reconnect first.
  3. In Configure access, choose the Access level. For GitHub, keep All authorized repositories or clear it and pick repositories.
  4. Click Use this access. The checkbox named for the connection’s MCP tools controls whether sessions get them.
  5. Click Save new version.
A new version replaces the whole definition, so send every field you want to keep. disabled_integration_mcp_providers lists services whose MCP tools sessions don’t get while the grant still works for everything else; a new agent defaults to ["github"]. On a new version, leaving it out turns every service’s MCP tools on. See Tools.

Grant through a vault

Grant a connection per session through a vault with an integration credential. Use it when different sessions of one agent need different accounts or repositories, and for Slack, which is always granted this way. In the console, grant it from the agent’s or session’s Credential access.
Adding the same connection to the same vault again replaces the earlier grant. If integration_permission is left out, the service’s least privileged level applies. How grants combine in a session:
  • A session gets the agent version’s nativeIntegrations plus any integration credentials in its granted vaults.
  • Each connection is used once. If the agent and a vault both grant it, the agent’s grant wins. Among vaults, the first in vault_ids wins.
  • Several connections to one service, such as two GitHub organizations, all work in one session.
  • A grant whose connection isn’t active is skipped, and the session starts without it.

List GitHub repositories and pull requests

For a GitHub connection, list the repositories it can reach and their pull requests, for example to fill a repository picker. Results come from GitHub, 100 per page, with the 1-based page query parameter.
The repository can be name, owner/name (URL-encoded as owner%2Fname), or end in .git. state is open (the default), closed, or all. Use full_name values in resources. Checking, reconnecting, and disconnecting work the same for native and built-in connections; see Check a connection, Reconnect an app, and Disconnect an app. A native connection’s check also reports resource_count, such as how many repositories it reaches, and missing_permissions the service hasn’t granted yet. Disconnecting GitHub doesn’t uninstall the app from your GitHub account.

MCP servers

For a service that isn’t in the catalog, or when you want the token kept out of the sandbox entirely, add its MCP server to the agent. The token lives in a vault and is attached to requests outside the sandbox. See Connect MCP servers and Vaults.

What can go wrong

For all error codes, see Errors.

Limits

See Limits for every other limit.

Next steps

Agents

Publish agent versions and keep grants across updates.

Connect MCP servers

Add any remote MCP server with a token from a vault.

Security

See what reaches the sandbox for each kind of access.

Sessions

Start a session and follow its tool calls.