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 withlistBuiltInIntegrationCatalog.
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, CrustdataD–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, GuruH–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.comN–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, RootlyS–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.
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
- Console
- cURL
- In the sidebar, click Integrations.
- Open the app’s row menu and click Tools.
- Tick or clear tools. The list applies to every agent using the app.
- 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.
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.
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.
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 inbuilt_in_integrations, so every change publishes a new version and running sessions keep the version they started with.
- Console
- TypeScript
- cURL
- In the sidebar, click Agents, then open the agent.
- On Configuration, find the Integrations section.
- Click Add integration access, search for the app, and click Select. A connection that isn’t active shows Reconnect first instead.
- Repeat for each app, and click Remove to take one away.
- Click Save new version.
200 response is the agent. It lists the granted connections. Some fields are left out here.
built_in_integrations:
- Each entry names a connection by
connection_id. Get ids fromlistIntegrationConnections, 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_idsandcredential_refsdon’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.
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:- 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.
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.- Console
- cURL
- In the sidebar, click Integrations.
- Open the app’s row menu and click Check. Check appears only for an active connection.
- 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.
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.
external_idis the app’s slug from the catalog, andaccount_typeis its name.account_loginis the app’s name too, followed by the sign-in method when the app names one.permissionsis the tool allow-list, each tool with its level.usage.agentscounts the agents whose current version grants the app.provideridentifies the kind of connection. Every built-in connection shares one provider, whichlistIntegrationProviderslists as Built-in integrations.
Reconnect an app
Reconnect when a connection is Revoked, or to sign in to the app again. Reconnecting keeps the sameconnection_id, so the agents granted the app and its tool allow-list stay as they are.
- In the sidebar, click Integrations.
- Click Reconnect on the app’s row. For an active app, it’s in the row menu.
- In the Reconnect dialog, click Continue to sign-in.
- Sign in to the app and approve access.
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.- Console
- cURL
- In the sidebar, click Integrations.
- Open the app’s row menu and click Disconnect.
- 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.
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.- Console
- TypeScript
- cURL
- Open the agent. On Configuration, find Integrations and click Add integration access.
- Click Select next to the connection. A connection that isn’t active shows Reconnect first.
- In Configure access, choose the Access level. For GitHub, keep All authorized repositories or clear it and pick repositories.
- Click Use this access. The checkbox named for the connection’s MCP tools controls whether sessions get them.
- 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 anintegration 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.
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
nativeIntegrationsplus anyintegrationcredentials 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_idswins. - 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-basedpage query parameter.
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.