Workflow automation platform connecting 8,000+ apps. The Zapier SDK gives AI agents direct access to any app's actions without building OAuth flows or reverse-engineering APIs.
| Integration | Available | Notes |
|---|---|---|
| API | ✓ | REST API for Zaps, tasks, and webhooks |
| MCP | ✓ | Available via Zapier MCP server |
| CLI | ✓ | @zapier/zapier-sdk-cli for app discovery and type generation |
| SDK | ✓ | @zapier/zapier-sdk — TypeScript SDK for 8,000+ app integrations |
- Type: API Key
- Header:
X-API-Key: {api_key} - Get key: Settings > API in Zapier account
Browser-based login (development):
npx zapier-sdk loginServer-side (production):
- Client Credentials — store as environment variables
- Direct token — set
ZAPIER_CREDENTIALSenv var
Browser-based login only works locally. Use Client Credentials for any server-side deployment.
npm install @zapier/zapier-sdk
npm install -D @zapier/zapier-sdk-cli @types/node typescript
npm pkg set type=moduleimport { createZapierSdk } from "@zapier/zapier-sdk";
const zapier = createZapierSdk();| Command | Purpose |
|---|---|
npx zapier-sdk login |
Authenticate (dev only) |
npx zapier-sdk list-apps --search "query" |
Search available apps |
npx zapier-sdk list-actions APP_KEY |
List actions for an app |
npx zapier-sdk add [app-key] |
Generate TypeScript types |
| Method | Purpose |
|---|---|
zapier.listConnections() |
List authenticated app connections |
zapier.findFirstConnection() |
Find a specific connection |
zapier.runAction() |
Execute an action on a connected app |
zapier.apps.slack() |
App proxy pattern for clean syntax |
zapier.fetch() |
Custom authenticated API calls |
import { createZapierSdk } from "@zapier/zapier-sdk";
const zapier = createZapierSdk();
const slack = await zapier.apps.slack();
await slack.sendChannelMessage({
channel: "#marketing",
message: "Campaign launched!"
});const hubspot = await zapier.apps.hubspot();
await hubspot.createContact({
email: "lead@example.com",
firstName: "Jane",
lastName: "Doe"
});Use .items() for large datasets:
const contacts = await hubspot.listContacts({ maxItems: 100 });
for await (const contact of contacts.items()) {
console.log(contact.email);
}Direct API calls via zapier.fetch() are not subject to org app/action restriction policies. Use pre-built actions where possible if your org has governance requirements.
GET https://api.zapier.com/v1/zapsGET https://api.zapier.com/v1/zaps/{zap_id}POST https://api.zapier.com/v1/zaps/{zap_id}/on
POST https://api.zapier.com/v1/zaps/{zap_id}/offGET https://api.zapier.com/v1/zaps/{zap_id}/tasksGET https://api.zapier.com/v1/profiles/meCreate a "Webhooks by Zapier" trigger to receive data:
POST https://hooks.zapier.com/hooks/catch/{webhook_id}/
{
"event": "user.created",
"user_id": "123",
"email": "user@example.com"
}Most common: trigger a Zap from your app:
POST https://hooks.zapier.com/hooks/catch/{account_id}/{hook_id}/
{
"name": "John Doe",
"email": "john@example.com",
"plan": "pro"
}// Lead capture to CRM
const hubspot = await zapier.apps.hubspot();
await hubspot.createContact({ email, firstName, lastName });
// New customer notification
const slack = await zapier.apps.slack();
await slack.sendChannelMessage({ channel: "#revenue", message: `New customer: ${email}` });
// Add to email sequence
const customerio = await zapier.apps.customerio();
await customerio.createOrUpdatePerson({ email, plan: "pro" });- Typeform → Zapier → HubSpot (lead capture)
- Stripe → Zapier → Slack (new customer alerts)
- Form submission → Zapier → Customer.io (email sequences)
- New review → Zapier → Slack (social proof)
- New referral → Zapier → Spreadsheet + Slack (referral tracking)
When sending to Zapier, structure data as flat JSON:
{
"customer_name": "John Doe",
"customer_email": "john@example.com",
"plan_name": "Pro",
"plan_price": 99,
"signup_date": "2024-01-15"
}- Zap - Automated workflow (no-code)
- SDK - Programmatic access to 8,000+ app integrations
- Trigger - Event that starts a Zap
- Action - Task performed by Zap or SDK
- Task - Single action execution
- Connection - Authenticated link to an app (shared between Zaps and SDK)
- SDK: When an AI agent needs to interact with any app directly — send messages, create records, sync data
- Zaps: When you need always-on automation without code
- Webhooks: When triggering workflows from your own app
- API: When managing Zaps programmatically
- API: 100 requests per minute
- SDK: Rate limits per connected app
- Task limits by plan tier
- emails
- analytics
- referrals
- revops