---
name: zapier-sdk-guide
description: >
  Use when asking about Zapier SDK capabilities, when to use the SDK instead of MCP,
  SDK authentication, OAuth, client credentials, API calls, rate limits, webhooks,
  or the SDK API reference. Explains SDK concepts and routes to canonical documentation.
license: MIT
compatibility: >
  Requires Node.js 20+ and a Zapier account. The SDK is in open beta.
metadata:
  author: zapier
---

# Zapier SDK guide

The Zapier SDK (`@zapier/zapier-sdk`) is a TypeScript library for calling 9,000+ app integrations from code. Zapier handles authentication, token refresh, and retries.

## Critical rules

- **Open beta:** The SDK is free until billing starts on December 1, 2026. After that, outside Zapier, each SDK action, fetch call, and inbox-lease trigger uses 1 task. See [how the SDK is billed](https://help.zapier.com/hc/en-us/articles/49965546559117). Triggers and Permissions are experimental.
- **Node.js 20 or later** is required.
- **Create the client with `createZapierSdk()`.** Bind app calls to a connection, for example with `findFirstConnection()`.
- **Server, CI, and cloud use needs client credentials.** CLI authentication is for development terminals.
- **Governance gap:** App and action restrictions apply to pre-built actions. Direct `.fetch()` API calls are not yet governed.
- **The SDK CLI (`@zapier/zapier-sdk-cli`) is not the Platform CLI** that builds integrations.

## SDK or MCP

| Need | Use |
|---|---|
| Code with loops, conditionals, error handling, or calls beyond pre-built actions | SDK |
| Reliable code execution in production | SDK |
| A chat agent with a curated, governed set of tools and no code | MCP |

Most teams use both.

## Code example

```typescript
import { createZapierSdk } from "@zapier/zapier-sdk";

const zapier = createZapierSdk(); // uses CLI credential, or ZAPIER_CREDENTIALS_CLIENT_ID + _CLIENT_SECRET in production

const { data: connection } = await zapier.findFirstConnection({ appKey: "slack", owner: "me" });
const slack = zapier.apps.slack({ connectionId: connection.id });

await slack.write.channel_message({
  inputs: { channel: "C0ABCXYZ", text: "Hello from the Zapier SDK" },
});
```

For production (server, CI, cloud), use client credentials instead of CLI authentication. Read [Deploy with client credentials](https://docs.zapier.com/sdk/deploy).

## Canonical documentation

- [SDK overview](https://docs.zapier.com/sdk): capabilities, beta scope, and governance
- [SDK quickstart](https://docs.zapier.com/sdk/quickstart): setup and authentication
- [SDK CLI](https://docs.zapier.com/sdk/using-the-cli): terminal workflows
- [Permissions](https://docs.zapier.com/sdk/permissions): experimental approval policies
- [Deploy with client credentials](https://docs.zapier.com/sdk/deploy): servers, CI, and cloud
- [SDK reference](https://docs.zapier.com/sdk/reference): methods and types

## Related skills

- `zapier-mcp-guide`: conversational AI clients
- `zapier-troubleshooting-router`: error symptoms and their pages
- `zapier/sdk`: the official operational SDK skill for writing SDK code (`github.com/zapier/sdk`)
