Building an AI agent that can actually do things — send Slack messages, create Jira tickets, update spreadsheets — means solving authentication for every single app. OAuth flows, token refresh, API quirks, rate limits. For one app, it’s annoying. For ten apps, it’s a full-time job.
The Zapier SDK (open beta, April 2026) solves this by giving your agent authenticated access to 9,000+ app integrations through one interface. Zapier handles auth, token refresh, retries, and API differences. Your agent handles the logic.
SDK vs MCP vs Zapier Agents
Zapier now has three ways to connect AI to apps. They serve different purposes:
| Zapier SDK | Zapier MCP | Zapier Agents | |
|---|---|---|---|
| For | Coding agents and developers | Chat agents (Claude, GPT) | No-code users |
| Access | Any API call, in code | Curated menu of pre-built actions | Visual builder |
| Auth | Programmatic (client credentials) | Browser-based | Browser-based |
| Use when | You need loops, conditionals, error handling | You want quick tool access in chat | You want no-code automation |
Most teams end up using SDK + MCP together. MCP for conversational interfaces, SDK for production code.
Setup
# Requires Node.js 20+
npm init -y
npm install @zapier/zapier-sdk
npm install -D @zapier/zapier-sdk-cli @types/node typescript
# Login (opens browser)
npx zapier-sdk login
# Check your connected apps
npx zapier-sdk list-connections --owner me
The CLI is useful for exploration. Use it to discover what actions an app supports:
# See all available actions for Slack
npx zapier-sdk list-actions slack
# See what inputs an action needs
npx zapier-sdk describe-action slack write channel_message
# Run an action directly
npx zapier-sdk run-action slack write channel_message \
--connection-id YOUR_ID \
--inputs '{"channel":"#general","text":"Hello from the SDK"}'
TypeScript SDK usage
The SDK is type-safe. Every app and action has generated types:
import { createZapierSdk } from "@zapier/zapier-sdk";
const zapier = createZapierSdk();
// Find the user's Slack connection
const { data: slackConn } = await zapier.findFirstConnection({
appKey: "slack",
owner: "me",
isExpired: false,
});
// Bind it once, use everywhere
const slack = zapier.apps.slack({ connectionId: slackConn.id });
// Send a message
await slack.write.channel_message({
inputs: {
channel: "#deployments",
text: "Deploy complete. All tests passing.",
},
});
The pattern is consistent across all 9,000+ apps: zapier.apps.APP_KEY({ connectionId }).ACTION_TYPE.ACTION_NAME({ inputs }).
Action types:
search— find data (search users, find events)write— create or update (send message, create ticket)read— list data (list channels, get records)
Real example: AI agent with tool access
Here’s how you’d give an AI agent access to Slack and GitHub through the Zapier SDK:
import { createZapierSdk } from "@zapier/zapier-sdk";
const zapier = createZapierSdk();
// These become tools your agent can call
async function sendSlackMessage(channel: string, text: string) {
const { data: conn } = await zapier.findFirstConnection({
appKey: "slack", owner: "me", isExpired: false,
});
const slack = zapier.apps.slack({ connectionId: conn.id });
return slack.write.channel_message({ inputs: { channel, text } });
}
async function createGithubIssue(repo: string, title: string, body: string) {
const { data: conn } = await zapier.findFirstConnection({
appKey: "github", owner: "me", isExpired: false,
});
const github = zapier.apps.github({ connectionId: conn.id });
return github.write.create_issue({
inputs: { repo, title, body },
});
}
// Register these as tools in your agent framework
// Works with OpenAI Agents SDK, LangChain, CrewAI, etc.
This is the key advantage: your agent gets authenticated access to thousands of apps without you building a single OAuth flow.
Direct API calls with fetch
For actions that go beyond pre-built connectors, the SDK provides authenticated fetch:
const { data: conn } = await zapier.findFirstConnection({
appKey: "github", owner: "me", isExpired: false,
});
// Raw API call — Zapier handles auth headers
const response = await zapier.fetch(conn.id, {
url: "https://api.github.com/repos/owner/repo/pulls",
method: "GET",
});
This gives you full API access with Zapier managing the credentials. Note: direct API calls are not yet covered by Zapier’s governance policies (pre-built actions are).
Governance and security
If your organization has restricted specific apps or actions in Zapier, those policies apply automatically to SDK traffic using pre-built actions. This matters for enterprise teams where AI agent security is a concern.
Current limitations (open beta):
- Enterprise and Team plans are off by default (contact Zapier for opt-in)
- Direct API calls via
.fetch()bypass governance policies (fix coming) - Triggers API (real-time events) targeting May 2026
- Agent approval flow (user reviews before agent acts) coming soon
SDK vs building it yourself
| Zapier SDK | DIY | |
|---|---|---|
| Time to first integration | Minutes | Hours to days |
| OAuth implementation | Handled | You build it |
| Token refresh | Automatic | You handle it |
| Number of apps | 9,000+ | One at a time |
| API quirks | Abstracted | You debug them |
| Cost | Free (beta), paid later | Free (your time) |
| Vendor lock-in | Yes (Zapier) | No |
The trade-off is clear: speed and breadth vs independence. For most AI agent projects, the SDK is worth it for the auth layer alone.
Combining with agent frameworks
The Zapier SDK works with any agent framework:
- OpenAI Agents SDK: Register Zapier actions as
@function_tooltools - LangChain: Wrap as LangChain tools with
@tooldecorator - Claude Code: Use via MCP for conversational access
- CrewAI: Register as crew tools for multi-agent workflows
The SDK handles the “connect to apps” problem. Your framework handles the “think and decide” problem. Together, they make agents that can actually do useful work.
Related: OpenAI Agents SDK Guide · How to Build an AI Agent · Best AI Agent Frameworks · What is MCP? · Agent Orchestration Patterns · AI Agent Security · Agent vs Workflow