Complete Zapier SDK - combines all Zapier SDK packages
npm install @zapier/zapier-sdk- Installation
- Quick Start
- Available Functions
- Accounts
- getProfile
- Actions
- getAction
- getInputFieldsSchema
- listActions
- listInputFieldChoices
- listInputFields
- runAction
- Apps
- apps.{appKey}
- apps.{appKey}.{actionType}.{actionKey}
- getApp
- listApps
- Authentications
- findFirstAuthentication
- findUniqueAuthentication
- getAuthentication
- listAuthentications
- Client Credentials
- createClientCredentials
- deleteClientCredentials
- listClientCredentials
- HTTP Requests
- fetch
- request
``bash"type": "module"If starting a new project:
cd your-project-dir
npm init -y
npx tsc --initAlso, set
in your package.json for the code examples below.
npm install @zapier/zapier-sdk
npm install -D @zapier/zapier-sdk-cli @types/node typescript
`
`bashAuthenticates through your browser, automatically handling token management
npx zapier-sdk login
search to find it. or lib folder if you file`typescript
import { createZapierSdk } from "@zapier/zapier-sdk";// ######## Initialize Zapier SDK ########
// Option 1: Running
zapier-sdk login authenticates through your browser,
// automatically handling token management.
const zapier = createZapierSdk();// Option 2: Manually provide a token.
// const zapier = createZapierSdk({
// credentials: "your_zapier_token_here", // or use ZAPIER_CREDENTIALS env var
// });
// Option 3: Manually provide a client ID and client secret.
// const zapier = createZapierSdk({
// credentials: {
// clientId: "your_client_id_here", // or use ZAPIER_CREDENTIALS_CLIENT_ID env var
// clientSecret: "your_client_secret_here", // or use ZAPIER_CREDENTIALS_CLIENT_SECRET env var
// },
// });
// ######## Access Apps ########
// List methods return a promise for a page with {data, nextCursor}.
const { data: firstPageApps, nextCursor } = await zapier.listApps();
// Use the cursor to get the next page:
const { data: secondPageApps } = await zapier.listApps({ cursor: nextCursor });
console.log({
firstPageApps,
secondPageApps,
});
// List methods also return an iterator for all pages.
// Be careful with lots of pages, note the
search to filter.
for await (const page of zapier.listApps({ search: "slack" })) {
const { data: apps } = page;
console.log({
apps,
});
}// Use
.items() to iterate over all items of all pages:
// Again, be careful with lots of items. Note the maxItems to limit the total items.
for await (const app of zapier.listApps({ maxItems: 100 }).items()) {
console.log({
app,
});
}// You can collect all results, but this could take a while for long lists!
const allApps = await Array.fromAsync(
zapier.listApps({ maxItems: 100 }).items(),
);
console.log({
allApps,
});
// The item methods return a promise for a single item, wrapped with {data}.
// This is just to give us room to add metadata in the future.
const { data: app } = await zapier.getApp({ appKey: "slack" });
console.log({
app,
});
// ######## Authentication Usage ########
const { data: myAuths } = await zapier.listAuthentications({
appKey: "slack",
owner: "me",
});
console.log({
myAuths,
});
// ######## Find Actions ########
// Option 1: List actions
// Remember, this is just the first page which may not include them all!
// See
.items() usage above, which can be used to make sure you get all actions.
const { data: actions } = await zapier.listActions({ appKey: "slack" });console.log({
actions,
});
const singleAction = await zapier.getAction({
appKey: "slack",
actionType: actions[0].action_type,
actionKey: actions[0].key,
});
console.log({
singleAction,
});
// Option 2: Access actions via the
apps proxy
// If you've generated TS types for an app using zapier-sdk add, you can access the app's actions like this:// await zapier.apps.slack.read.channles({});
// await zapier.apps.slack.write.send_message({})
// ######## Run Actions ########
// Option 1:
const { data: channels } = await zapier.runAction({
appKey: "slack",
actionType: "read",
actionKey: "channels",
authenticationId: myAuths[0].id,
});
console.log({
channels,
});
const { data: profile } = await zapier.getProfile();
// Option 2:
// Create an app binding to your authentication.
const mySlack = zapier.apps.slack({
authenticationId: myAuths[0].id,
});
// Use your app binding to run the action.
const { data: users } = await mySlack.search.user_by_email({
inputs: {
email: profile.email,
},
});
console.log({
users,
});
// You can also skip the app binding and pass the auth into the action.
const { data: sameUsers } = await zapier.apps.slack.search.user_by_email({
inputs: {
email: profile.email,
},
authenticationId: myAuths[0].id,
});
console.log({
sameUsers,
});
// If the slug for an app has dashes, you can also use a snake_cased app key.
// For example, either of the following are valid:
// zapier.apps["google-sheets"]
// zapier.apps.google_sheets
`Available Functions
$3
####
getProfileGet current user's profile information
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| --------- | -------- | -------- | ------- | --------------- | ----------- |
|
options | object | ❌ | — | — | |Returns:
PromiseExample:
`typescript
const { data: profile } = await sdk.getProfile();
`$3
####
getActionGet detailed information about a specific action
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| -------------- | -------- | -------- | ------- | ---------------------------------------------------------------------------------------------- | --------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ appKey | string | ✅ | — | — | App key (e.g., 'SlackCLIAPI' or slug like 'github') |
| ↳ actionType | string | ✅ | — | read, read_bulk, write, run, search, search_or_write, search_and_write, filter | Action type that matches the action's defined type |
| ↳ actionKey | string | ✅ | — | — | Action key to execute |Returns:
PromiseExample:
`typescript
const { data: action } = await sdk.getAction({
appKey: "example-key",
actionType: "read",
actionKey: "example-key",
});
`####
getInputFieldsSchemaGet the JSON Schema representation of input fields for an action. Returns a JSON Schema object describing the structure, types, and validation rules for the action's input parameters.
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| -------------------- | ---------------- | -------- | ------- | ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ appKey | string | ✅ | — | — | App key (e.g., 'SlackCLIAPI' or slug like 'github') to get the input schema for |
| ↳ actionType | string | ✅ | — | read, read_bulk, write, run, search, search_or_write, search_and_write, filter | Action type that matches the action's defined type |
| ↳ actionKey | string | ✅ | — | — | Action key to get the input schema for |
| ↳ authenticationId | string, number | ❌ | — | — | Authentication ID to use when fetching the schema. Required if the action needs authentication to determine available fields. |
| ↳ inputs | object | ❌ | — | — | Current input values that may affect the schema (e.g., when fields depend on other field values) |Returns:
PromiseExample:
`typescript
const { data: inputSchema } = await sdk.getInputFieldsSchema({
appKey: "example-key",
actionType: "read",
actionKey: "example-key",
});
`####
listActionsList all actions for a specific app
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| -------------- | -------- | -------- | ------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ appKey | string | ✅ | — | — | App key of actions to list (e.g., 'SlackCLIAPI' or slug like 'github') |
| ↳ actionType | string | ❌ | — | read, read_bulk, write, run, search, search_or_write, search_and_write, filter | Filter actions by type |
| ↳ pageSize | number | ❌ | — | — | Number of actions per page |
| ↳ maxItems | number | ❌ | — | — | Maximum total items to return across all pages |
| ↳ cursor | string | ❌ | — | — | Cursor to start from |Returns:
PromiseExample:
`typescript
// Get first page and a cursor for the second page
const { data: actions, nextCursor } = await sdk.listActions({
appKey: "example-key",
});// Or iterate over all pages
for await (const page of sdk.listActions({
appKey: "example-key",
})) {
// Do something with each page
}
// Or iterate over individual items across all pages
for await (const action of sdk
.listActions({
appKey: "example-key",
})
.items()) {
// Do something with each action
}
`####
listInputFieldChoicesGet the available choices for a dynamic dropdown input field
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| -------------------- | ---------------- | -------- | ------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
|
options | object | ✅ | — | — | |
| ↳ appKey | string | ✅ | — | — | App key (e.g., 'SlackCLIAPI' or slug like 'github') |
| ↳ actionType | string | ✅ | — | read, read_bulk, write, run, search, search_or_write, search_and_write, filter | Action type that matches the action's defined type |
| ↳ actionKey | string | ✅ | — | — | Action key to execute |
| ↳ inputFieldKey | string | ✅ | — | — | Input field key to get choices for. |
| ↳ authenticationId | string, number | ❌ | — | — | Authentication ID to use for this action |
| ↳ inputs | object | ❌ | — | — | Current input values that may affect available choices |
| ↳ page | number | ❌ | — | — | Page number for paginated results |
| ↳ pageSize | number | ❌ | — | — | Number of choices per page |
| ↳ maxItems | number | ❌ | — | — | Maximum total items to return across all pages |
| ↳ cursor | string | ❌ | — | — | Cursor to start from |Returns:
PromiseExample:
`typescript
// Get first page and a cursor for the second page
const { data: inputFieldChoices, nextCursor } = await sdk.listInputFieldChoices(
{
appKey: "example-key",
actionType: "read",
actionKey: "example-key",
inputFieldKey: "example-key",
},
);// Or iterate over all pages
for await (const page of sdk.listInputFieldChoices({
appKey: "example-key",
actionType: "read",
actionKey: "example-key",
inputFieldKey: "example-key",
})) {
// Do something with each page
}
// Or iterate over individual items across all pages
for await (const inputFieldChoice of sdk
.listInputFieldChoices({
appKey: "example-key",
actionType: "read",
actionKey: "example-key",
inputFieldKey: "example-key",
})
.items()) {
// Do something with each inputFieldChoice
}
`####
listInputFieldsGet the input fields required for a specific action
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| -------------------- | ---------------- | -------- | ------- | ---------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ appKey | string | ✅ | — | — | App key (e.g., 'SlackCLIAPI' or slug like 'github') |
| ↳ actionType | string | ✅ | — | read, read_bulk, write, run, search, search_or_write, search_and_write, filter | Action type that matches the action's defined type |
| ↳ actionKey | string | ✅ | — | — | Action key to execute |
| ↳ authenticationId | string, number | ❌ | — | — | Authentication ID to use for this action |
| ↳ inputs | object | ❌ | — | — | Current input values that may affect available fields |
| ↳ pageSize | number | ❌ | — | — | Number of input fields per page |
| ↳ maxItems | number | ❌ | — | — | Maximum total items to return across all pages |
| ↳ cursor | string | ❌ | — | — | Cursor to start from |Returns:
PromiseExample:
`typescript
// Get first page and a cursor for the second page
const { data: rootFieldItems, nextCursor } = await sdk.listInputFields({
appKey: "example-key",
actionType: "read",
actionKey: "example-key",
});// Or iterate over all pages
for await (const page of sdk.listInputFields({
appKey: "example-key",
actionType: "read",
actionKey: "example-key",
})) {
// Do something with each page
}
// Or iterate over individual items across all pages
for await (const rootFieldItem of sdk
.listInputFields({
appKey: "example-key",
actionType: "read",
actionKey: "example-key",
})
.items()) {
// Do something with each rootFieldItem
}
`####
runActionExecute an action with the given inputs
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| -------------------- | ---------------- | -------- | ------- | ---------------------------------------------------------------------------------------------- | --------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ appKey | string | ✅ | — | — | App key (e.g., 'SlackCLIAPI' or slug like 'github') |
| ↳ actionType | string | ✅ | — | read, read_bulk, write, run, search, search_or_write, search_and_write, filter | Action type that matches the action's defined type |
| ↳ actionKey | string | ✅ | — | — | Action key to execute |
| ↳ authenticationId | string, number | ❌ | — | — | Authentication ID to use for this action |
| ↳ inputs | object | ❌ | — | — | Input parameters for the action |
| ↳ pageSize | number | ❌ | — | — | Number of results per page |
| ↳ maxItems | number | ❌ | — | — | Maximum total items to return across all pages |
| ↳ cursor | string | ❌ | — | — | Cursor to start from |Returns:
PromiseExample:
`typescript
// Get first page and a cursor for the second page
const { data: actionResults, nextCursor } = await sdk.runAction({
appKey: "example-key",
actionType: "read",
actionKey: "example-key",
});// Or iterate over all pages
for await (const page of sdk.runAction({
appKey: "example-key",
actionType: "read",
actionKey: "example-key",
})) {
// Do something with each page
}
// Or iterate over individual items across all pages
for await (const actionResult of sdk
.runAction({
appKey: "example-key",
actionType: "read",
actionKey: "example-key",
})
.items()) {
// Do something with each actionResult
}
`$3
####
apps.{appKey}Bind an authentication ID to an app
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| -------------------- | ---------------- | -------- | ------- | --------------- | ---------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ authenticationId | string, number | ✅ | — | — | Authentication ID to use for this action |Returns:
PromiseExample:
`typescript
const result = await sdk.apps.appKey({
authenticationId: "example-value",
});
`####
apps.{appKey}.{actionType}.{actionKey}Execute an action with the given inputs for the bound app, as an alternative to runAction
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| -------------------- | ---------------- | -------- | ------- | --------------- | ---------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ inputs | object | ❌ | — | — | |
| ↳ authenticationId | string, number | ❌ | — | — | Authentication ID to use for this action |Returns:
PromiseExample:
`typescript
// Get first page and a cursor for the second page
const { data: actionResults, nextCursor } =
await sdk.apps.appKey.actionType.actionKey();// Or iterate over all pages
for await (const page of sdk.apps.appKey.actionType.actionKey()) {
// Do something with each page
}
// Or iterate over individual items across all pages
for await (const actionResult of sdk.apps.appKey.actionType
.actionKey()
.items()) {
// Do something with each actionResult
}
`####
getAppGet detailed information about a specific app
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| ---------- | -------- | -------- | ------- | --------------- | ------------------------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ appKey | string | ✅ | — | — | App key of app to fetch (e.g., 'SlackCLIAPI' or slug like 'github') |Returns:
PromiseExample:
`typescript
const { data: app } = await sdk.getApp({
appKey: "example-key",
});
`####
listAppsList all available apps with optional filtering
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| ------------ | -------- | -------- | ------- | --------------- | ------------------------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ appKeys | array | ❌ | — | — | Filter apps by app keys (e.g., 'SlackCLIAPI' or slug like 'github') |
| ↳ search | string | ❌ | — | — | Search term to filter apps by name |
| ↳ pageSize | number | ❌ | — | — | Number of apps per page |
| ↳ maxItems | number | ❌ | — | — | Maximum total items to return across all pages |
| ↳ cursor | string | ❌ | — | — | Cursor to start from |Returns:
PromiseExample:
`typescript
// Get first page and a cursor for the second page
const { data: apps, nextCursor } = await sdk.listApps();// Or iterate over all pages
for await (const page of sdk.listApps()) {
// Do something with each page
}
// Or iterate over individual items across all pages
for await (const app of sdk.listApps().items()) {
// Do something with each app
}
`$3
####
findFirstAuthenticationFind the first authentication matching the criteria
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| ------------- | --------- | -------- | ------- | --------------- | ---------------------------------------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ appKey | string | ❌ | — | — | App key of authentications to list (e.g., 'SlackCLIAPI' or slug like 'github') |
| ↳ search | string | ❌ | — | — | Search term to filter authentications by title |
| ↳ title | string | ❌ | — | — | Filter authentications by exact title match (searches first, then filters locally) |
| ↳ accountId | string | ❌ | — | — | Filter authentications by account ID |
| ↳ owner | string | ❌ | — | — | Filter by owner, 'me' for your own authentications or a specific user ID |
| ↳ isExpired | boolean | ❌ | — | — | Filter by expired status (true = expired only, false = non-expired only) |Returns:
PromiseExample:
`typescript
const { data: authentication } = await sdk.findFirstAuthentication();
`####
findUniqueAuthenticationFind a unique authentication matching the criteria
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| ------------- | --------- | -------- | ------- | --------------- | ---------------------------------------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ appKey | string | ❌ | — | — | App key of authentications to list (e.g., 'SlackCLIAPI' or slug like 'github') |
| ↳ search | string | ❌ | — | — | Search term to filter authentications by title |
| ↳ title | string | ❌ | — | — | Filter authentications by exact title match (searches first, then filters locally) |
| ↳ accountId | string | ❌ | — | — | Filter authentications by account ID |
| ↳ owner | string | ❌ | — | — | Filter by owner, 'me' for your own authentications or a specific user ID |
| ↳ isExpired | boolean | ❌ | — | — | Filter by expired status (true = expired only, false = non-expired only) |Returns:
PromiseExample:
`typescript
const { data: authentication } = await sdk.findUniqueAuthentication();
`####
getAuthenticationGet a specific authentication by ID
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| -------------------- | -------- | -------- | ------- | --------------- | ----------------------------- |
|
options | object | ✅ | — | — | |
| ↳ authenticationId | string | ✅ | — | — | Authentication ID to retrieve |Returns:
PromiseExample:
`typescript
const { data: authentication } = await sdk.getAuthentication({
authenticationId: "example-id",
});
`####
listAuthenticationsList available authentications with optional filtering
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| --------------------- | --------- | -------- | ------- | --------------- | ---------------------------------------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ appKey | string | ❌ | — | — | App key of authentications to list (e.g., 'SlackCLIAPI' or slug like 'github') |
| ↳ authenticationIds | array | ❌ | — | — | List of authentication IDs to filter by |
| ↳ search | string | ❌ | — | — | Search term to filter authentications by title |
| ↳ title | string | ❌ | — | — | Filter authentications by exact title match (searches first, then filters locally) |
| ↳ accountId | string | ❌ | — | — | Filter authentications by account ID |
| ↳ owner | string | ❌ | — | — | Filter by owner, 'me' for your own authentications or a specific user ID |
| ↳ isExpired | boolean | ❌ | — | — | Filter by expired status (true = expired only, false = non-expired only) |
| ↳ pageSize | number | ❌ | — | — | Number of authentications per page |
| ↳ maxItems | number | ❌ | — | — | Maximum total items to return across all pages |
| ↳ cursor | string | ❌ | — | — | Cursor to start from |Returns:
PromiseExample:
`typescript
// Get first page and a cursor for the second page
const { data: authentications, nextCursor } = await sdk.listAuthentications();// Or iterate over all pages
for await (const page of sdk.listAuthentications()) {
// Do something with each page
}
// Or iterate over individual items across all pages
for await (const authentication of sdk.listAuthentications().items()) {
// Do something with each authentication
}
`$3
####
createClientCredentialsCreate new client credentials for the authenticated user
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| ------------------ | -------- | -------- | -------------- | --------------- | ---------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ name | string | ✅ | — | — | Human-readable name for the client credentials |
| ↳ allowed_scopes | array | ❌ | ["external"] | — | Scopes to allow for these credentials |Returns:
PromiseExample:
`typescript
const result = await sdk.createClientCredentials({
name: "example-value",
});
`####
deleteClientCredentialsDelete client credentials by client ID
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| ------------ | -------- | -------- | ------- | --------------- | ------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ clientId | string | ✅ | — | — | The client ID of the client credentials to delete |Returns:
PromiseExample:
`typescript
const result = await sdk.deleteClientCredentials({
clientId: "example-id",
});
`####
listClientCredentialsList client credentials for the authenticated user
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| ------------ | -------- | -------- | ------- | --------------- | ---------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ pageSize | number | ❌ | — | — | Number of credentials per page |
| ↳ maxItems | number | ❌ | — | — | Maximum total items to return across all pages |
| ↳ cursor | string | ❌ | — | — | Cursor to start from |Returns:
PromiseExample:
`typescript
// Get first page and a cursor for the second page
const { data: clientCredentials, nextCursor } =
await sdk.listClientCredentials();// Or iterate over all pages
for await (const page of sdk.listClientCredentials()) {
// Do something with each page
}
// Or iterate over individual items across all pages
for await (const clientCredentials of sdk.listClientCredentials().items()) {
// Do something with each clientCredentials
}
`$3
####
fetchExecute fetch
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| -------------------------- | ------------------------ | -------- | ------- | ---------------------------------------------------------- | -------------------------------------------------------------------- |
|
url | string, custom | ✅ | — | — | The URL to fetch |
| init | object | ❌ | — | — | Fetch options including authentication |
| ↳ method | string | ❌ | — | GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS | |
| ↳ headers | object | ❌ | — | — | |
| ↳ body | string, custom, custom | ❌ | — | — | |
| ↳ authenticationId | string, number | ❌ | — | — | Authentication ID to use for this action |
| ↳ callbackUrl | string | ❌ | — | — | URL to send async response to (makes request async) |
| ↳ authenticationTemplate | string | ❌ | — | — | Optional JSON string authentication template to bypass Notary lookup |Returns:
PromiseExample:
`typescript
const result = await sdk.fetch("example-value", { key: "value" });
`####
requestMake authenticated HTTP requests through Zapier's Relay service
Parameters:
| Name | Type | Required | Default | Possible Values | Description |
| -------------------------- | ----------------------- | -------- | ------- | ---------------------------------------------------------- | -------------------------------------------------------------------- |
|
options | object | ✅ | — | — | |
| ↳ url | string | ✅ | — | — | The URL to request (will be proxied through Relay) |
| ↳ method | string | ❌ | — | GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS | HTTP method |
| ↳ body | string | ❌ | — | — | Request body as a string |
| ↳ authenticationId | string, number | ❌ | — | — | Authentication ID to use for this action |
| ↳ callbackUrl | string | ❌ | — | — | URL to send async response to (makes request async) |
| ↳ authenticationTemplate | string | ❌ | — | — | Optional JSON string authentication template to bypass Notary lookup |
| ↳ headers | record, custom, array | ❌ | — | — | Request headers |
| ↳ relayBaseUrl | string | ❌ | — | — | Base URL for Relay service |Returns:
PromiseExample:
`typescript
const result = await sdk.request({
url: "https://example.com",
});
``